我尝试将传递上下文到第二个小部件树(函数中),但是我得到了错误:
尝试将提供程序与Listenable/Stream (Model2)的子类型一起使用。这可能是一个错误,因为当更新Model2时,提供者不会自动更新受抚养人。相反,考虑为处理更新机制的更具体的实现更改提供程序,例如:- ListenableProvider - ChangeNotifierProvider - ValueListenableProvider - StreamProvider
Future<void> _neverSatisfied({Key key, @required BuildContext 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('Rewind and remember'),
content: SingleChildScrollView(
child: ListBody(
children: <Widget>[
Text('You will never be satisfied.'),
Text('You\’re like me. I’m never satisfied.'),
],
),
),
actions: <Widget>[
FlatButton(
child: Text('Regret'),
onPressed: () async {
await model2.getData();
Navigator.of(context).pop();
},
),
],
),
);
},
);
}同一个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, _) =>第二个(,我从这里传递上下文,):
@override
Widget buildStep(BuildContext context) {
Consumer<Model2>(
builder: (context, model2, _) =>
...
_neverSatisfied(context: context); //**pass context**发布于 2019-08-20 19:49:44
而不是Provider.value,您应该使用ChangeNotifierProvider.value
https://stackoverflow.com/questions/57580586
复制相似问题