| Các Phương Pháp Truyền Dữ Liệu Trong Flutter: Giải Pháp Vượt Qua Prop Drilling

Được viết bởi thanhdt vào ngày 01/06/2026 lúc 20:21 | 11 lượt xem

Khi ứng dụng phình to, việc truyền dữ liệu từ Widget cha xuống các Widget con ở tầng sâu qua các constructor (Prop Drilling) sẽ khiến mã nguồn trở nên cực kỳ rối rắm và khó bảo trì.

1. Vấn đề “Prop Drilling” thực tế

Hãy tưởng tượng bạn có dữ liệu người dùng ở màn hình chính (Widget A), và bạn cần hiển thị nó ở nút bấm nằm sâu trong Widget Tree (Widget D). Bạn phải truyền qua B, C dù 2 Widget này không hề dùng đến dữ liệu đó. Điều này gây dư thừa constructor rất lớn.

2. Giải pháp nguyên bản của Flutter: InheritedWidget

InheritedWidget cho phép các Widget con nằm ở bất kỳ độ sâu nào trong cây thư mục đều có thể truy cập trực tiếp dữ liệu từ Widget cha thông qua cơ chế Context:

final myData = MyInheritedWidget.of(context).data;

Hệ thống sẽ tự động đăng ký lắng nghe và re-build lại Widget con khi dữ liệu của InheritedWidget thay đổi.

3. Hạn chế và Hướng đi tương lai

InheritedWidget viết code khá rườm rà. Vì vậy, các thư viện State Management hiện đại (như ScopedModel, Provider, Bloc) đều được xây dựng bọc lấy InheritedWidget để mang lại cú pháp lập trình đơn giản hơn.