- vừa được xem lúc

Flutter: SchedulerBinding vs WidgetsBinding

0 0 28

Người đăng: Phạm Sỹ Hưng

Theo Viblo Asia

Bài viết được dịch từ bài Flutter: SchedulerBinding vs WidgetsBinding của Jitesh Mohite

Đây là một kiến thức khá khó khó vì bạn sẽ không tìm thấy lời giải thích nào tại trang document của Flutter. Vì vậy tôi sẽ chia sẻ một vài kinh nghiệm của bản thân để giúp bạn phần nào phân biệt được chúng

Hiện tại có tồn tại 3 loại callback dùng để render widget

Transient callback: Được trigger bởi callback [Window.onBeginFrame] của hệ thống, để sync giữa hoạt động của app với hoạt động hiển thị của hệ thống, ví dụ như [Ticker] và [AnimationController]

Persistent callback: Được trigger bởi callback [Window.onDrawFrame] của hệ thống, để update lại hiển thị trên hệ thống sau khi Transient callback được gọi

Post-frame callbacks: Được gọi sau Persistent callback, ngay sau khi [Window.onDrawFrame] hoàn tất. Những task chạy ở đây là những task không liên quan đến render, và được chạy sau mỗi frame. Chúng được gọi theo thứ tự theo như schedulingStrategy.

Tất cả những callback phía trên đều chạy lần lượt

Widgets Binding: Sự kết nối giữa widget layer và Flutter engine, và đi cùng với mixin WidgetsBindingObserver kèm theo rất nhiều callback, trong số đó có một callback bắt buộc phải override đó là didChangeAppLifecycleState

Scheduler Binding: Cũng giống như WidgetBinding nhưng không cung cấp bất kì callback nào

Ví dụ về binding dưới đây chỉ gọi đúng một lần duy nhất, có nghĩa là hàm print trong WidgetsBinding & SchedulerBinding chỉ chạy duy nhất một lần kể từ khi chúng ta gọi nó trong initState, nhưng chúng chỉ được gọi sau khi hàm build đã render xong.

void initState() { // TODO: implement initState super.initState(); print("initState"); WidgetsBinding.instance.addPostFrameCallback((_) { print("WidgetsBinding"); }); SchedulerBinding.instance.addPostFrameCallback((_) { print("SchedulerBinding"); });
}

addPostFrameCallback được chạy trong một frame, chỉ ngay sau khi persistent frame callback. Nếu một frame đang được thực thi và post-frame callback chưa được thực thi thì những callback đã được chuẩn bị sẽ vẫn gọi trong fame đó. Ngược lại, những callback được chuẩn bị sẽ chạy vào frame tiếp theo.

Callback được thực thi theo thứ tự mà chúng được thêm vào. Post-frame callback không thể bị xoá bỏ khi chúng đã được thêm vào từ trước, và chúng chỉ chạy duy nhất một lần

Bình luận

Bài viết tương tự

- vừa được xem lúc

Học Flutter từ cơ bản đến nâng cao. Phần 1: Làm quen cô nàng Flutter

Lời mở đầu. Gần đây, Flutter nổi lên và được Google PR như một xu thế của lập trình di động vậy.

0 0 281

- vừa được xem lúc

Học Flutter từ cơ bản đến nâng cao. Phần 3: Lột trần cô nàng Flutter, BuildContext là gì?

Lời mở đầu. Màn làm quen cô nàng FLutter ở Phần 1 đã gieo rắc vào đầu chúng ta quá nhiều điều bí ẩn về nàng Flutter.

0 0 207

- vừa được xem lúc

Flutter Animation: Creating medium’s clap animation in flutte Part II

Trong phần 1 mình đã giới thiệu với các bạn cơ bản về Animation trong Flutter. Score Widget Size Animation.

0 0 64

- vừa được xem lúc

Flutter - GetX - Using GetConnect to handle API request (Part 4)

Giới thiệu. Xin chào các bạn, lại là mình với series về GetX và Flutter.

0 0 351

- vừa được xem lúc

StatefulWidget và StatelessWidget trong Flutter

I. Mở đầu. Khi các bạn build một ứng dụng với Flutter thì Widgets là thứ không thể thiếu đúng không ạ. Và 2 loại Widget không thể thiếu đó là StatefullWidget và StatelessWidget.

0 0 143

- vừa được xem lúc

Tìm hiểu về Riverpod - Provider nhưng không hắn :v

Trong Flutter có rất nhiều các quản lý state: Provider, Bloc, GetX, Redux,... khó mà nói cái nào tốt hơn cái nào. Tuy nhiên nếu bạn đã làm quen với Provider thì không ngại để tìm hiểu thêm về Riverpod. Một bản nâng cấp của Provider. Nếu bạn để ý thì cái tên "Riverpod" là các chữ cái của "Provider" đ

0 0 67