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
的作用是,它只是一个构建器,用于通过创建另一个 context
在 Provider
和 Route
之间建立连接,并让您获得 Provider
class 通过 InheritedWidget
.
我的问题与提供商有关 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
的作用是,它只是一个构建器,用于通过创建另一个 context
在 Provider
和 Route
之间建立连接,并让您获得 Provider
class 通过 InheritedWidget
.