الگوهای نادرستِ قابل اجتناب
بیشتر باگها وقتی رخ میدهند که مدلهای imperative و declarative با هم مخلوط شوند. یک مرز سخت برای state نگه دارید.
مخلوط کردن push/pop با pages
برای stackهایی که از قبل توسط List<PageEntry> مدیریت میشوند، Navigator.push/pop را صدا نزنید.
Widget در state
نمونههای Widget را داخل metadata صفحه نگذارید. فقط keyها و شناسههای شبیه route را نگه دارید.
کلیدهای نامحدود
از استفاده دوباره از مقدارهای تکراری PageEntry.key در یک stack خودداری کنید.
فهرست مهاجرت
از این فهرست بررسی هنگام بازنویسی استفاده کنید تا معماری سازگار بماند.
فهرست بررسی
خوب در برابر بد
// بد: مخلوط کردن رویکرد imperative و declarative برای یک stack
Navigator.of(context).push(...);
_pages = [..._pages, const PageEntry(key: 'detail', name: '/detail')];
// خوب: فقط state declarative را بهروزرسانی کنید
setState(() {
_pages = [..._pages, const PageEntry(key: 'detail', name: '/detail')];
});
نکتهٔ بازبینی
در بازبینی کد، دنبال کنید چه کسی مالک تغییرات stack است و تغییراتی را که همان stack را از چند API مختلف دستکاری میکنند رد کنید.