Trong Flutter, phương thức build()
được định nghĩa trong lớp State
thay vì trong StatefulWidget
vì lý do tổ chức và quản lý trạng thái.
Giải thích:
- Tách biệt giữa Widget và State:
StatefulWidget
chỉ định nghĩa cấu trúc của widget và các thuộc tính ban đầu của nó. Nó không biết khi nào và như thế nào để cập nhật giao diện người dùng khi trạng thái thay đổi.
State
là nơi quản lý trạng thái của widget. Nó có thể giữ dữ liệu và logic để cập nhật và thay đổi giao diện khi cần thiết.
- Cập nhật Giao diện:
- Khi trạng thái của widget thay đổi, phương thức
setState()
trong State
được gọi. Điều này thông báo cho Flutter rằng nó cần gọi lại phương thức build()
để cập nhật giao diện.
- Nếu
build()
nằm trong StatefulWidget
, sẽ không có cách nào để State
thông báo cho widget rằng nó cần được cập nhật khi trạng thái thay đổi.
- Lập trình hướng đối tượng:
- Việc tách biệt này tuân theo nguyên tắc lập trình hướng đối tượng, cho phép bạn giữ các trách nhiệm khác nhau trong các lớp khác nhau.
StatefulWidget
là một lớp đại diện cho một widget không tĩnh, trong khi State
giữ các thông tin trạng thái và logic liên quan.
Ví dụ:
Khi bạn tạo một StatefulWidget
, bạn sẽ định nghĩa nó như sau:
class MyStatefulWidget extends StatefulWidget {
@override
MyState createState() => MyState();
}
class MyState extends State<MyStatefulWidget> {
int counter = 0;
@override
Widget build(BuildContext context) {
return Column(
children: [
Text('Counter: $counter'),
ElevatedButton(
onPressed: () {
setState(() {
counter++;
});
},
child: Text('Increment'),
),
],
);
}
}
Trong ví dụ này:
MyStatefulWidget
định nghĩa cấu trúc của widget.
MyState
quản lý trạng thái của widget và thực hiện việc cập nhật giao diện thông qua phương thức build()
.
Tóm lại, việc đặt phương thức build()
trong State
giúp tách biệt rõ ràng giữa cấu trúc widget và logic quản lý trạng thái, cho phép Flutter cập nhật giao diện một cách hiệu quả và dễ dàng hơn.