setState() báo cho framework rằng state nội bộ của State đã đổi → đánh dấu element là dirty và lên lịch dựng lại (build()) widget đó ở frame kế tiếp.
Điểm cần nhớ:
- Cập nhật biến state bên trong callback của setState, không phải sau đó.
- setState chỉ dựng lại subtree từ widget hiện tại — nên đặt nó càng gần nơi thực sự đổi càng tốt để tránh dựng lại thừa (đẩy state xuống widget lá).
- Không gọi setState trong build() (vòng lặp vô hạn) hay sau khi widget đã dispose.
- Với state chia sẻ giữa nhiều màn hình, setState không đủ → dùng Provider/Riverpod/BLoC.