在应用程序主页上,我设置了Model2来对数据进行API调用。然后,用户可以导航到其他页面(Navigator.push)。但是我想在用户回按时从Model2进行API调用(_onBackPress()),以便可以刷新首页上的数据。

问题是Model2并非针对所有用户初始化。但是,如果我为未初始化Model2的用户调用final model2 = Provider.of<Model2>(context, listen: false);,则会出现错误。

如何仅在有条件的情况下致电提供方?例如:if(user == paid)
主页中的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页中:
Future<void> _onBackPress(context) async {

// if(user == paid)
final model2 = Provider.of<Model2>(context, listen: false);

  return showDialog<void>(
    context: context,
    barrierDismissible: false,
    builder: (BuildContext context) {
      return

// if(user == paid)
    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 {

// if(user == paid)
await model2.getData();

              Navigator.of(context).pop();
            },
          ),
        ],
),
      );
    },
  );
}

替代方法(可能更简单):如何在Navigator.of(context).pop();的上一页(主页)上调用提供程序?

TLDR:什么是调用API的最佳解决方案,以便当用户返回上一页时(但仅对于某些用户)可以刷新数据?

最佳答案

您可以将第二个页面界面构建器包装在WillPopScope小部件中,然后将想要调用的任何方法传递给onWillPop小部件的WillPopScope回调。这样,您可以在用户按下后退按钮时进行API调用。在this WillPopScope Flutter dev documentation article上找到有关WillPopScope小部件的更多信息。

08-18 17:48