initState() — gọi một lần khi widget được thêm vào (khởi tạo controller, listener). didChangeDependencies() — gọi sau initState và khi dependency thay đổi. build() — gọi thường xuyên, trả về widget tree. didUpdateWidget() — gọi khi parent rebuild với thuộc tính khác. dispose() — gọi một lần khi xóa (dọn dẹp tài nguyên, đóng stream).
Nắm rõ vòng đời này để tránh memory leak.