Logo

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

LẬP TRÌNH FLUTTER

StatelessWidget và StatefulWidget — khi nào dùng loại nào?

Đăng bởi Admin
StatelessWidget và StatefulWidget — khi nào dùng loại nào?

StatelessWidget và StatefulWidget — khi nào dùng loại nào?

StatelessWidget vs StatefulWidget

Một trong những quyết định quan trọng nhất khi phát triển Flutter là chọn giữa StatelessWidget và StatefulWidget. Bài viết này sẽ giúp bạn hiểu rõ sự khác biệt và biết khi nào nên dùng loại nào.

Tổng quan

StatelessWidget

StatelessWidget là widget không thay đổi sau khi được tạo. Nó chỉ phụ thuộc vào các tham số (parameters) được truyền vào.

StatefulWidget

StatefulWidget là widget có thể thay đổi trong suốt vòng đời của nó. Nó có thể lưu trữ và cập nhật state.

StatelessWidget

Đặc điểm:

  • Immutable: Không thể thay đổi sau khi tạo
  • Nhẹ: Hiệu suất tốt hơn
  • Đơn giản: Dễ hiểu và maintain
  • Pure function: build() luôn trả về cùng kết quả với cùng input

Cú pháp:

[object Object]

Khi nào dùng StatelessWidget?

1. Widget chỉ hiển thị dữ liệu

[object Object]

2. Widget nhận data từ parent

[object Object]

3. Widget chỉ render UI, không có logic phức tạp

[object Object]

StatefulWidget

Đặc điểm:

  • Mutable: Có thể thay đổi state
  • Interactive: Có thể xử lý user input
  • Dynamic: UI có thể thay đổi theo state
  • ⚠️ Phức tạp hơn: Cần quản lý state

Cú pháp:

[object Object]

Khi nào dùng StatefulWidget?

1. Widget cần quản lý state nội bộ

[object Object]

2. Widget cần xử lý user input

[object Object]

3. Widget cần animation

[object Object]

4. Widget cần fetch data và hiển thị

[object Object]

So sánh chi tiết

Tiêu chí StatelessWidget StatefulWidget
State Không có Có state
Rebuild Khi parent rebuild Khi setState() được gọi
Hiệu suất Tốt hơn Tốt (nhưng cần quản lý state)
Độ phức tạp Đơn giản Phức tạp hơn
Sử dụng khi Chỉ hiển thị data Cần tương tác, thay đổi

Quy tắc chọn lựa

Dùng StatelessWidget khi:

✅ Widget chỉ nhận data từ parent và hiển thị
✅ Widget không cần thay đổi sau khi tạo
✅ Widget là pure function (cùng input → cùng output)
✅ Widget không cần quản lý controllers, timers, animations

Ví dụ:

  • ProductCard
  • UserAvatar
  • CustomButton (chỉ nhận callback)
  • Header/Footer components

Dùng StatefulWidget khi:

✅ Widget cần quản lý state nội bộ
✅ Widget cần xử lý user input (forms, text fields)
✅ Widget cần animation
✅ Widget cần fetch và quản lý data
✅ Widget cần timers, streams, subscriptions

Ví dụ:

  • LoginForm
  • Counter
  • SearchBar với suggestions
  • Image carousel
  • Video player

Best Practices

1. Ưu tiên StatelessWidget

Luôn bắt đầu với StatelessWidget, chỉ chuyển sang StatefulWidget khi thực sự cần:

[object Object]

2. Tách biệt Stateless và Stateful

Tách logic stateful ra widget riêng:

[object Object]

3. Sử dụng const constructor khi có thể

[object Object]

4. Tránh setState không cần thiết

[object Object]

Ví dụ thực tế: Todo App

StatelessWidget - TodoItem

[object Object]

StatefulWidget - TodoList

[object Object]

Kết luận

Tóm tắt:

StatelessWidget:

  • Dùng khi widget không cần thay đổi
  • Đơn giản, hiệu suất tốt
  • Ưu tiên sử dụng

StatefulWidget:

  • Dùng khi cần quản lý state
  • Phức tạp hơn nhưng linh hoạt
  • Chỉ dùng khi thực sự cần

Quy tắc vàng:

"Luôn bắt đầu với StatelessWidget. Chỉ chuyển sang StatefulWidget khi bạn thực sự cần quản lý state."

Hiểu rõ sự khác biệt giữa StatelessWidget và StatefulWidget sẽ giúp bạn viết code Flutter hiệu quả và dễ maintain hơn!


Tác giả: Admin
Ngày đăng: 23/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...