Flutter 6.2 - Widget lifecycler, App lifecycler, Context ?

1, Widget Lifecycler





Stateful Widgets: 
initState(): chỉ chạy 1 lần đầu tiên, khi widget rebuild, initState() ko đc chạy lại. Dùng để gán dữ liệu ban đầu.
setState(): dùng để update và rebuild widget 
didUpateWidget(): khi widget đc rebuild xong. Dùng để update lại các value thay đổi.
dispose(): khi widge gone. Dùng để clean data, close connection,... tránh leak memory.




Khi UI thay đổi : ví dụ khi show/hide BottomSheet constructor của widget sẽ đc gọi lại để check sự thay đổi. Vì state ko thay đổi nên ko đc gọi lại. Sau khi call constructor widget thì sẽ đến hàm didUpdateWidget.


2, App lifecycler





inactive: Ko hoạt động, user ko nhìn thấy app. App rơi vào trạng thái này khi chuẩn bị running in background (paused) và chuẩn bị quay trở lại hoạt động (resumed).
paused: Khi app running in background.
resumed: Khi app bắt đầu visible vào chuẩn bị ng dùng có thể thao tác tới app.
suspending: Khi clear app in background.

class _MyHomePageState extends State<MyHomePage> with WidgetsBindingObserver {
@override
void initState() {
WidgetsBinding.instance!.addObserver(this); // đăng kí lng nghe state
super.initState();
}

@override
void didChangeAppLifecycleState(AppLifecycleState state) {
print(state); // in state
super.didChangeAppLifecycleState(state);
}

@override
void dispose() {
WidgetsBinding.instance!.removeObserver(this); // hy đăng kí lng nghe state
super.dispose();
}

3, Context



Context : Mọi widget đều có context.  Context chứa meta infomation của widget và location của nó trong widget tree. Conxtext là kênh để các widget giao tiếp, để truyền data, để các widget biết bị trí của nhau,... 



Nếu Product Detail cần data từ MyApp, theo cách thông thường, chúnng ta sẽ truyền data từ MyApp => Products => SingleProduct => ProductDetail thông qua constructor.
Làm như vậy sẽ rất cồng kềnh => chúng ta có thể pass data từ MyApp xuống thằng ProductDetail thông qua context. 
*Tương tự như cách define Theme ở main, sau đó các widget khác sử dụng lại Theme đã đc define thông qua context. Chi tiết cách pass data = context xem ở mục Flutter 6.4



Nhận xét

Bài đăng phổ biến từ blog này

Flutter 4.5 - Custom theme, font, image

Flutter 1.2 - Flutter Architecture

Flutter 2.5 - First App | Building a Widget Tree