Էջերը որպես տվյալ, 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-ի համար։