Logo

HƯỚNG NGHIỆP DỮ LIỆU

LẬP TRÌNH FLUTTER

Vòng đời widget (Widget Lifecycle) trong Flutter

Đăng bởi Admin
Vòng đời widget (Widget Lifecycle) trong Flutter

Vòng đời widget (Widget Lifecycle) trong Flutter

Widget Lifecycle Flutter

Hiểu rõ vòng đời (lifecycle) của widget là điều cần thiết để xây dựng ứng dụng Flutter hiệu quả. Bài viết này sẽ giải thích chi tiết về lifecycle của StatelessWidget và StatefulWidget.

Tổng quan về Widget Lifecycle

Widget lifecycle là quá trình từ khi widget được tạo ra, hiển thị, cập nhật, đến khi bị hủy. Flutter quản lý lifecycle này để tối ưu hiệu suất và quản lý bộ nhớ.

StatelessWidget Lifecycle

StatelessWidget là widget không thay đổi sau khi được tạo. Lifecycle của nó đơn giản:

[object Object]

Ví dụ StatelessWidget:

[object Object]

Lifecycle:

  1. Constructor: Widget được khởi tạo
  2. build(): Widget được build và render
  3. dispose(): Widget bị hủy khi không còn cần thiết

StatefulWidget Lifecycle

StatefulWidget có lifecycle phức tạp hơn vì có thể thay đổi state:

[object Object]

Các phương thức lifecycle quan trọng:

1. createState()

Được gọi khi StatefulWidget được tạo. Trả về State object:

[object Object]

2. initState()

Được gọi một lần duy nhất khi State object được tạo. Đây là nơi khởi tạo:

[object Object]

Khi nào dùng initState():

  • Khởi tạo controllers (TextEditingController, AnimationController)
  • Thiết lập listeners
  • Khởi tạo timers
  • Gọi API một lần khi widget được tạo

3. didChangeDependencies()

Được gọi sau initState() và mỗi khi widget phụ thuộc vào InheritedWidget thay đổi:

[object Object]

Khi nào dùng didChangeDependencies():

  • Cần truy cập InheritedWidget (Theme, MediaQuery, Localizations)
  • Cần thực hiện action khi dependencies thay đổi

4. build()

Được gọi mỗi khi widget cần rebuild. Đây là phương thức quan trọng nhất:

[object Object]

Lưu ý:

  • Không nên thực hiện heavy operations trong build()
  • Không nên gọi setState() trong build() (sẽ gây infinite loop)
  • Build() phải là pure function

5. setState()

Được gọi để thông báo Flutter rằng state đã thay đổi và cần rebuild:

[object Object]

Khi nào dùng setState():

  • Khi state của widget thay đổi
  • Khi cần rebuild UI

6. didUpdateWidget()

Được gọi khi widget được rebuild với widget mới cùng type:

[object Object]

Khi nào dùng didUpdateWidget():

  • Cần so sánh old widget và new widget
  • Cần cập nhật state dựa trên thay đổi của widget properties

7. deactivate()

Được gọi khi widget bị remove khỏi tree nhưng có thể được insert lại:

[object Object]

8. dispose()

Được gọi một lần duy nhất khi widget bị hủy vĩnh viễn:

[object Object]

Khi nào dùng dispose():

  • Dispose controllers
  • Cancel timers
  • Cancel subscriptions
  • Close streams
  • Free resources

Sơ đồ vòng đời đầy đủ

[object Object]

Ví dụ thực tế: Counter App với Lifecycle

[object Object]

Best Practices

1. Luôn gọi super trong lifecycle methods

[object Object]

2. Kiểm tra mounted trước khi setState

[object Object]

3. Dispose tất cả resources trong dispose()

[object Object]

4. Không thực hiện heavy operations trong build()

[object Object]

So sánh với React Lifecycle

Nếu bạn đã quen với React, đây là sự tương đồng:

Flutter React Mô tả
initState() componentDidMount() Khởi tạo
didUpdateWidget() componentDidUpdate() Widget được update
dispose() componentWillUnmount() Cleanup
build() render() Render UI

Kết luận

Hiểu rõ widget lifecycle giúp bạn:

  • ✅ Quản lý resources hiệu quả
  • ✅ Tránh memory leaks
  • ✅ Tối ưu hiệu suất ứng dụng
  • ✅ Xử lý state đúng cách

Tóm tắt:

  • initState(): Khởi tạo, chỉ gọi 1 lần
  • didChangeDependencies(): Khi dependencies thay đổi
  • build(): Render UI, gọi nhiều lần
  • didUpdateWidget(): Khi widget được update
  • deactivate(): Khi widget bị remove
  • dispose(): Cleanup, chỉ gọi 1 lần

Nắm vững lifecycle là nền tảng để xây dựng ứng dụng Flutter chuyên nghiệp!


Tác giả: Admin
Ngày đăng: 22/01/2025
Chuyên mục: Flutter

Bình luận

Tính năng bình luận đang được phát triển...