डेटा के रूप में पेज, Resolver के जरिए UI

PageEntry में सिर्फ metadata रखें. हर page key को वास्तविक widget से map करने के लिए buildPage का उपयोग करें.

सीरियलाइज़ेबल स्टेट

PageEntry साधारण डेटा है, इसलिए navigation state को log, diff और replay किया जा सकता है.

सिंपल रेज़ॉल्वर

page.key पर switch routing को स्पष्ट और reviewable रखता है.

एक ही source of truth

Push और pop _pages list पर operations हैं, side effects नहीं.

रेज़ॉल्वर पैटर्न

page key के आधार पर build करें और page list को declaratively बदलें.

Command

रेज़ॉल्वर उदाहरण

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 में और maintainability के लिए PageEntry को pure metadata ही रहने दें.

अगला

Resolver