หน้าคือข้อมูล, UI ผ่าน resolver
เก็บเฉพาะ metadata ใน PageEntry ใช้ buildPage เพื่อ map แต่ละ page key ไปยัง widget จริง.
สถานะที่ serializable
PageEntry เป็นข้อมูลธรรมดา จึงสามารถ log, diff และ replay สถานะการนำทางได้.
resolver แบบง่าย
switch บน page.key ทำให้ routing ชัดเจนและตรวจทานได้.
แหล่งความจริงเดียว
Push และ pop เป็นการทำงานบนรายการ _pages ไม่ใช่ side effects.
รูปแบบ resolver
สร้างตาม page key และเปลี่ยนรายการหน้าแบบ declaratively.
Command
ตัวอย่าง 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 ให้เบา
หลีกเลี่ยงการวาง Widget instances ลงใน navigation state และเก็บ PageEntry เป็น metadata ล้วนเพื่อความดูแลง่าย.
ก่อนหน้า
การติดตั้งถัดไป
Resolver