Flutter 状态管理问题

Flutter state management issue

我的问题与提供商有关 pattern/library。

我创建了一些状态 类 如下(我替换了 content/var 名称以尽量保持简单)

class State1 with ChangeNotifier{

String _s;

  set s(String newS){
    _s = newS;
    notifyListeners();
  }

}

然后我使用多提供商来传递它(在 widget init 中创建对象,它充当应用程序中所有内容的父级。)

child: MultiProvider(
        providers: [
          ChangeNotifierProvider(builder: (context) => state1),
        ],
        child: Stack(
        alignment: Alignment.center,
        children: stackChildren,
      ),

然后使用

在子部件构建方法中访问它
 state1Var = Provider.of<State1>(context);

所有这一切都很好..

我的问题是,当我开始使用导航推送时,我无法再访问该状态。

onPressed: (() {
          Navigator.push(
            contextField,
            MaterialPageRoute(builder: (context) => NewPage()),
          );
        }),

当我收到这个错误时

Could not find the correct Provider<State1> above this NewPage Widget...

我确实设法用这个

  Navigator.push(
            context,
            MaterialPageRoute(builder: (context) => Consumer(builder: (),child: NewPage(),)),
          );

但是当我使用 navigator.pop() 弹出小部件时,状态无法使用,因为它说它已被处置。我是不是做错了,还是我漏掉了什么?

抱歉,如果我把事情弄复杂了。我不得不删除很多代码。

感谢您的帮助:)

您可能遇到了 context hierarchy 问题。用 MultiProvider 包裹你的 MaterialApp,或者你的 Provider 必须在你正在获取供应商的 Route 之上。

否则,您可以使用 Consumer 小部件包装您的脚手架。 Consumer 的作用是,它只是一个构建器,用于通过创建另一个 contextProviderRoute 之间建立连接,并让您获得 Provider class 通过 InheritedWidget.