Էջերը որպես տվյալ, UI-ը resolver-ով

PageEntry-ում պահիր միայն metadata։ Օգտագործիր buildPage, որպեսզի յուրաքանչյուր page key կապվի իրական widget-ի հետ։

Սերիալացվող state

PageEntry-ն պարզ տվյալ է, ուստի navigation state-ը կարելի է log անել, diff անել և replay անել։

Պարզ resolver

page.key-ի վրա switch-ը պահում է route-ավորումը հստակ և review-ի համար հասկանալի։

Մեկ truth source

Push և pop գործողությունները _pages-ի list operation-ներ են, ոչ թե side effect-ներ։

Resolver pattern

Կառուցիր page key-ով և page list-ը փոխիր հայտարարական ձևով։

Page state-ի կանոն

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')]);
}
Պահիր metadata-ն թեթև

Խուսափիր navigation state-ի մեջ Widget instance-ներ տեղադրելուց և պահիր PageEntry-ն որպես մաքուր metadata՝ maintainability-ի համար։

Նախորդը

Տեղադրում

Հաջորդը

Overlays