import 'package:flutter/material.dart';

void main() {
runApp(const MyApp());
}

class MyApp extends StatelessWidget {
const MyApp({super.key});
// Widget này là thư mục gốc của ứng dụng của bạn.
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Tran Minh Thái',
theme: ThemeData(
// Đây là chủ đề của ứng dụng của bạn.
//
// THỬ ĐIỀU NÀY: Hãy thử chạy ứng dụng của bạn với "chạy rung". Bạn sẽ thấy
// ứng dụng có thanh công cụ màu xanh. Sau đó, không cần thoát khỏi ứng dụng,
// thử thay đổi SeedColor trong colorScheme bên dưới thành Colors.green
// và sau đó gọi "tải lại nóng" (lưu các thay đổi của bạn hoặc nhấn nút "hot
// nút tải lại" trong IDE được Flutter hỗ trợ hoặc nhấn "r" nếu bạn đã sử dụng
// dòng lệnh để khởi động ứng dụng).
//
// Lưu ý rằng bộ đếm không được đặt lại về 0; ứng dụng
// trạng thái không bị mất trong quá trình tải lại. Để thiết lập lại trạng thái, sử dụng nóng
// thay vào đó hãy khởi động lại.
//
// Điều này cũng có tác dụng với mã, không chỉ với giá trị: Hầu hết các thay đổi mã có thể được thực hiện
// đã được thử nghiệm chỉ bằng cách tải lại nóng.
colorScheme: ColorScheme.fromSeed(seedColor: Color.fromARGB(255, 226, 9, 9)),
useMaterial3: true,
),
home: const MyHomePage(title: 'Trần Minh Thái - TMT'),
);
}
}

class MyHomePage extends StatefulWidget {
const MyHomePage({super.key, required this.title});

// Widget này là trang chủ của ứng dụng của bạn. Nó có trạng thái, có nghĩa
// nó có một đối tượng State (được định nghĩa bên dưới) chứa các trường ảnh hưởng đến
// trông nó thế nào.

// Lớp này là cấu hình cho trạng thái. Nó giữ các giá trị (trong này
// viết hoa tiêu đề) do cha mẹ cung cấp (trong trường hợp này là tiện ích Ứng dụng) và
// được sử dụng bởi phương thức build của State. Các trường trong lớp con Widget là
// luôn được đánh dấu là "cuối cùng".

final String title;

@override
State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
int _counter = 0;

void _incrementCounter() {
setState(() {
// Lệnh gọi setState này cho Flutter framework biết rằng có thứ gì đó
// đã thay đổi trạng thái này, khiến nó chạy lại phương thức xây dựng bên dưới
// để màn hình có thể phản ánh các giá trị được cập nhật. Nếu chúng ta thay đổi
// _counter mà không gọi setState() thì phương thức build sẽ không hoạt động
// được gọi lại và dường như không có gì xảy ra.
_counter++;
});
}

@override
Widget build(BuildContext context) {
// Phương thức này được chạy lại mỗi khi setState được gọi, ví dụ như done
// bằng phương thức _incrementCounter ở trên.
//
// Flutter framework đã được tối ưu hóa để chạy lại các phương thức build
// nhanh, để bạn có thể xây dựng lại bất cứ thứ gì cần cập nhật thay vì
// thay vì phải thay đổi từng phiên bản của widget.
return Scaffold(
appBar: AppBar(
// THỬ ĐIỀU NÀY: Hãy thử thay đổi màu ở đây thành một màu cụ thể (để
// Có lẽ là Colors.amber?) và kích hoạt tải lại nóng để xem AppBar
// thay đổi màu trong khi các màu khác giữ nguyên.
backgroundColor: Theme.of(context).colorScheme.inversePrimary,
// Ở đây chúng ta lấy giá trị từ đối tượng MyHomePage được tạo bởi
// phương thức App.build và sử dụng nó để đặt tiêu đề thanh ứng dụng của chúng ta.
title: Text(widget.title),
),
body: Center(
// Center là một widget bố cục. Nó lấy một đứa trẻ và định vị nó
// ở giữa cha mẹ.
child: Column(
// Cột cũng là một widget bố cục. Nó lấy một danh sách trẻ em và
// sắp xếp chúng theo chiều dọc. Theo mặc định, nó có kích thước phù hợp với
// con theo chiều ngang và cố gắng cao bằng cha mẹ.
//
// Cột có nhiều thuộc tính khác nhau để kiểm soát kích thước của nó và
// cách nó định vị các con của nó. Ở đây chúng tôi sử dụng mainAxisAlignment để
// căn giữa các phần tử con theo chiều dọc; trục chính ở đây là trục dọc
// trục vì các Cột thẳng đứng (trục chéo sẽ là
// nằm ngang).
//
// THỬ ĐIỀU NÀY: Gọi "bức tranh gỡ lỗi" (chọn "Toggle Debug Paint"
// hành động trong IDE hoặc nhấn "p" trong bảng điều khiển), để xem
// wireframe cho mỗi widget.
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
const Text(
'You have pushed the button this many times:',
),
Text(
'$_counter',
style: Theme.of(context).textTheme.headlineMedium,
),
],
),
),
floatingActionButton: FloatingActionButton(
onPressed: _incrementCounter,
tooltip: 'Increment',
child: const Icon(Icons.add),
), // Dấu phẩy ở cuối này giúp định dạng tự động tốt hơn cho các phương thức xây dựng.
);
}
}