首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从ChangeNotifier导航?

如何从ChangeNotifier导航?
EN

Stack Overflow用户
提问于 2019-08-03 00:11:07
回答 1查看 608关注 0票数 1

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

假设我们改进了provider_shopper示例here,这样当用户单击BUY时,CartModel会执行一些购买逻辑,然后导航到Order Review页面。这个导航应该如何实现?

我们是否为CartModel提供回调,这样它就会调用它并触发UI上的导航?

EN

回答 1

Stack Overflow用户

发布于 2019-08-03 04:08:56

也许有一种更简单、更优雅的解决方案,但我只能想到使用一个页面,去掉Navigator:

代码语言:javascript
复制
@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(一个脚手架)的函数:

代码语言:javascript
复制
Widget testPage(AppProvider appProvider,BuildContext context) {
    return WillPopScope(
      onWillPop: () {return controlBackButton(appProvider,context);},
          child: Scaffold(
        appBar: AppBar(
          title: Text('Test Page'),
        ),

更改页面:

代码语言:javascript
复制
 void changePage(AppProvider appProvider,String page) {
    setState(() { 
      appProvider.setCurrentPage(page);
    });
  }

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

代码语言:javascript
复制
 Future<bool> controlBackButton(AppProvider appProvider) async{
    setState(() {
       appProvider.setCurrentPage('home');  
    });
    return false;
  }

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

票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57330108

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档