Trong Flutter, hàm build() của StatelessWidgetStatefulWidget có một cơ chế tương tự nhau nhưng có một số điểm khác biệt quan trọng.

1. build() của StatelessWidget:

Trong StatelessWidget, hàm build() chỉ được gọi một lần khi widget được khởi tạo và không thay đổi trong suốt vòng đời của widget. Nó không nhận vào bất kỳ tham số nào khác ngoài BuildContext. Khi một phần tử giao diện người dùng (UI) trong widget cần được cập nhật, bạn cần tạo một widget mới hoàn toàn.

@override
Widget build(BuildContext context) {
  return Container(
    child: Text('Hello, World!'),
  );
}

2. build() của StatefulWidget:

Trong StatefulWidget, hàm build() có thể được gọi nhiều lần trong suốt vòng đời của widget. Mỗi khi gọi setState(), hàm build() sẽ được gọi để cập nhật giao diện người dùng dựa trên trạng thái mới. Nó cũng nhận vào một đối tượng BuildContext nhưng không nhận bất kỳ tham số nào khác.

@override
Widget build(BuildContext context) {
  return Column(
    children: <Widget>[
      Text('Counter: $_counter'),
      ElevatedButton(
        onPressed: _incrementCounter,
        child: Text('Increment'),
      ),
    ],
  );
}

Như bạn có thể thấy, trong StatefulWidget, hàm build() có thể truy cập và sử dụng các biến trạng thái được khai báo trong lớp con (ví dụ: _counter trong ví dụ trên), trong khi trong StatelessWidget, hàm build() không có khả năng truy cập đến bất kỳ trạng thái nào.