0

我的问题与提供者模式/库有关。

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

class State1 with ChangeNotifier{

String _s;

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

}

然后我使用 multiprovider 来传递它(在小部件 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() 弹出小部件时,无法使用该状态,因为它说它已被处置。我做错了还是我错过了什么?

对不起,如果我把这个弄复杂了。我不得不删除很多代码。

谢谢你的帮助 :)

4

1 回答 1

3

可能你有context hierarchy问题。MaterialApp用 MultiProvider包裹你,或者你Provider必须在Route你得到提供者的顶部。

否则,您可以使用Consumer小部件包装您的 Scaffold。所做的是Consumer,它只是一个构建器,用于在您之间建立连接ProviderRoute通过创建另一个连接context并让您Provider通过InheritedWidget.

于 2019-07-14T10:22:53.113 回答