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ì.

Trước đó

Cài đặt

Tiếp theo

Overlays