flutter - 如何防止提供者处置模型?
问题描述
在应用程序主页上,我设置了Model2
对数据进行 API 调用的设置。然后用户可以导航到其他页面 ( Navigator.push
)。但我想Model2
在用户按下(_onBackPress()
)时进行 API 调用,以便刷新主页上的数据。当我打电话时,它给出了错误:
未处理的异常:错误:在此消费者小部件上方找不到正确的提供者
如果我添加Consumer
到 Page2 它会给出错误:
错误:在此消费者小部件上方找不到正确的提供者
StatefulWidget
在主页:
@override
Widget build(BuildContext context) {
return ChangeNotifierProxyProvider<Model1, Model2>(
initialBuilder: (_) => Model2(),
builder: (_, model1, model2) => model2
..string = model1.string,
),
child: Consumer<Model2>(
builder: (context, model2, _) =>
...
Navigator.push(
context,
MaterialPageRoute(builder: (context) => SecondRoute(context: context)),
在第 2 页中:
final context;
Page2State({Key key, this.context});
...
// Consumer<Model2>(
// builder: (context, model2, _) =>
...
onWillPop: () => _onBackPress(context),
...
Future<void> _onBackPress(context) async {
final model2 = Provider.of<Model2>(context, listen: false);
return showDialog<void>(
context: context,
barrierDismissible: false,
builder: (BuildContext context) {
return
Provider.value(value: model2, child:
AlertDialog(
title: Text('Back'),
content: SingleChildScrollView(
child: ListBody(
children: <Widget>[
Text('Go back'),
],
),
),
actions: <Widget>[
FlatButton(
child: Text('OK'),
onPressed: () async {
await model2.getData();
Navigator.of(context).pop();
},
),
],
),
);
},
);
}
解决方案
推荐阅读
- postgresql - 获取 RDS Postgres DB 的增量更改
- c# - 我想按开始日期、开始时间和结束日期、结束时间获取数据
- kubernetes - 如何在 Kubernetes 中合并 ConfigMaps 的内容
- python - 使用子类化在python中扩展列表数据类型
- php - PSR-0 自动加载器问题
- docker - Docker-volume 绑定到另一个目录,但文件被克隆到 /var/lib/docker
- python - 错误栏信息未在 Scatter3d 悬停中显示
- javascript - 为什么 babel 包被分成两个独立的包
- c++ - 与 Java 和 Python 相比,为什么每次使用 Cmake 运行 C++ 程序都需要这么长时间?
- vb.net - 发生异常时显示警告消息