我的问题与提供者模式/库有关。
我已经创建了一些状态类,如下所示(用替换的内容/变量名来保持简单)
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()弹出窗口小部件时,无法使用该状态,因为它说它已经被丢弃了。我是做错了还是我错过了什么?
对不起,如果我把它弄复杂了。我不得不删除很多代码。
感谢您的帮助:)
答案 0 :(得分:1)
可能您有一个context
层次结构问题。将您的MaterialApp
用MultiProvider包裹起来,否则您的Provider
必须位于route
的顶部,这样才能将提供商纳入其中。
或使用Consumer
小部件包装您的脚手架。 Consumer
的作用是,它只是在Provider
和Route
之间建立连接的构建器。同样,由于Consumer
小部件是Builder
小部件,因此它还在各层之间也创建了context
。