如何从ChangeNotifier导航?

时间:2019-08-02 16:11:06

标签: flutter flutter-navigation flutter-provider

我正在学习provider + ChangeNotifier for state management,但是找不到有关如何从ChangeNotifier实施导航的官方指南。

比方说,我们改进了provider_shopper示例here,因此,当用户单击“购买”时,CartModel会执行一些购买逻辑,然后导航至“订单查看”页面。该导航应如何实施?

我们是否提供CartModel的回调,以便它将调用它并触发UI上的导航?

1 个答案:

答案 0 :(得分:-1)

可能有一个更简单,更优雅的解决方案,但我只能考虑使用一页并取消使用导航器:

@override
  Widget build(BuildContext context) {
    final appProvider = Provider.of<AppProvider>(context);
    switch (appProvider.getCurrentPage()) {
      case 'home': return homePage(appProvider);break;
      case 'test': return testPage(appProvider,context);break;
    }  
    return homePage(appProvider);
  }

每个“页面”只是一个返回Wigdet(脚手架)的函数:

Widget testPage(AppProvider appProvider,BuildContext context) {
    return WillPopScope(
      onWillPop: () {return controlBackButton(appProvider,context);},
          child: Scaffold(
        appBar: AppBar(
          title: Text('Test Page'),
        ),

更改页面:

 void changePage(AppProvider appProvider,String page) {
    setState(() { 
      appProvider.setCurrentPage(page);
    });
  }

除主页以外的所有页面都需要包装在WillPopScope小部件中,以便使后退按钮导航到主屏幕:

 Future<bool> controlBackButton(AppProvider appProvider) async{
    setState(() {
       appProvider.setCurrentPage('home');  
    });
    return false;
  }

我认为这不是最好的解决方案,而是一个好的开始。