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.
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.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.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.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.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.