Halaman sebagai Data, UI via Resolver
Simpan hanya metadata di PageEntry. Gunakan buildPage untuk memetakan setiap kunci halaman ke widget yang sebenarnya.
State Terserialisasi
PageEntry hanyalah data biasa, sehingga state navigasi dapat dicatat, dibandingkan (diffed), dan diputar ulang.
Resolver Sederhana
Penggunaan switch pada page.key menjaga perutean (routing) tetap eksplisit dan mudah ditinjau.
Satu Sumber Kebenaran
Push dan pop adalah operasi daftar pada _pages, bukan efek samping.
Pola Resolver
Bangun berdasarkan kunci halaman dan ubah daftar halaman secara deklaratif.
Aturan State Halaman
Contoh 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')]);
}
Jaga Metadata Tetap Ringan
Hindari menempatkan instance Widget ke dalam state navigasi dan pertahankan PageEntry sebagai metadata murni untuk kemudahan pemeliharaan.