Trang là dữ liệu, UI qua Resolver
Chỉ lưu metadata trong PageEntry. Dùng buildPage để ánh xạ từng page key tới widget thực tế.
Trạng thái có thể tuần tự hóa
PageEntry là dữ liệu thuần nên trạng thái điều hướng có thể được ghi log, diff và phát lại.
Resolver đơn giản
Một lệnh switch trên page.key giúp việc định tuyến rõ ràng và dễ review.
Một nguồn chân lý duy nhất
Push và pop là các thao tác trên danh sách _pages, không phải side effect.
Mẫu Resolver
Dựng theo page key và thay đổi danh sách trang theo kiểu khai báo.
Lệnh
Ví dụ Resolver
Widget _buildPage(BuildContext context, PageEntry page) {
switch (page.key) {
case 'home':
return HomePage(onGoDetail: _goDetail);
case 'detail':
return const DetailPage();
default:
return const SizedBox.shrink();
}
}
void _goDetail() {
setState(() => _pages = [..._pages, const PageEntry(key: 'detail', name: '/detail')]);
}
Giữ metadata gọn nhẹ
Tránh đặt các instance Widget vào trạng thái điều hướng và giữ PageEntry là metadata thuần để dễ bảo trì.