如何防止提供者处置模型?

时间:2019-08-20 20:43:56

标签: flutter dart flutter-provider

在应用程序主页上,我设置了Model2,该API可以对数据进行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();
            },
          ),
        ],
),
      );
    },
  );
}

0 个答案:

没有答案