Để kiểm soát bộ nhớ ứng dụng tốt, gọi API đúng thời điểm, và tránh rò rỉ tài nguyên (Memory Leak), bạn bắt buộc phải hiểu rõ vòng đời hoạt động của một StatefulWidget.
1. Giai đoạn khởi tạo: createState và initState
createState(): Được gọi ngay khi Widget được đưa vào Widget Tree để khởi tạo đối tượng State liên kết.
initState(): Hàm quan trọng bậc nhất. Được gọi duy nhất 1 lần trong đời của Widget. Đây là nơi lý tưởng để khởi tạo các Controller (như TextEditingController), đăng ký lắng nghe Stream, hoặc gọi API tải dữ liệu ban đầu.
2. Giai đoạn cập nhật trạng thái: didChangeDependencies và build
didChangeDependencies(): Chạy ngay sau initState và bất cứ khi nào đối tượng InheritedWidget mà nó phụ thuộc thay đổi giá trị.
build(): Được gọi liên tục mỗi khi State thay đổi (qua setState) để vẽ lại giao diện trên màn hình. Hãy giữ hàm build thật tinh gọn, không tính toán logic phức tạp ở đây!
3. Giai đoạn hủy bỏ giải phóng bộ nhớ: dispose
dispose(): Được gọi khi Widget bị xóa hoàn toàn khỏi Widget Tree. Bạn bắt buộc phải đóng các Stream, tắt các Animation Controller, hủy bộ lắng nghe để tránh tràn RAM thiết bị di động.