Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 如何在按下后退按钮后刷新页面_Flutter_Dart - Fatal编程技术网

Flutter 如何在按下后退按钮后刷新页面

Flutter 如何在按下后退按钮后刷新页面,flutter,dart,Flutter,Dart,我有一个“列表页”。和一个添加页面。用户单击“添加页面”,进入一个新页面,在其中添加一些实体。然后我弹出导航器,用户返回“列表页” 在这一点上,我想以某种方式得到通知-回调可能?重写一个方法,我不是很确定——并从数据库中重新读取信息 在弗利特有这样的钩子吗?或者我应该使用另一种模式吗?导航器.push方法返回路线通用类型的未来: Navigator.of(context) .push(new MaterialPageRoute<String>(...)) .then((Str

我有一个“列表页”。和一个添加页面。用户单击“添加页面”,进入一个新页面,在其中添加一些实体。然后我弹出导航器,用户返回“列表页”

在这一点上,我想以某种方式得到通知-回调可能?重写一个方法,我不是很确定——并从数据库中重新读取信息


在弗利特有这样的钩子吗?或者我应该使用另一种模式吗?

导航器.push方法返回路线通用类型的未来:

Navigator.of(context)
  .push(new MaterialPageRoute<String>(...))
  .then((String value) {
    print(value);
  });

若在列表页面上创建函数,比如retrieveData()来读取数据列表,然后在initState中调用它,若使用pushNamed路由,简单的解决方案是

Navigator.pushNamed(context, '/adddatapage').whenComplete(retrieveData());
如果你使用推送路线

Navigator.of(context).push(new MaterialPageRoute(builder: (context) => AddPage())).whenComplete(retrieveData);

这应该足够了。无需在添加页面上添加其他代码。如果用户再次按下“后退”按钮,并且在添加页面中没有其他代码,则此操作将有效。

我使用的是
导航器。按下并移动直到
,它将刷新页面并再次加载数据,例如:

Navigator.pushAndRemoveUntil(
        context,
        MaterialPageRoute(
            builder: (context) =>
                CustomerMainPage()),
            (Route<dynamic> route) =>
        false);
Navigator.pushandremove直到(
上下文
材料路线(
生成器:(上下文)=>
CustomerMainPage()),
(路线)=>
假);

我将回调方法作为导航器路由参数传递到“添加”页面。回调是我的列表页面中的一个方法。“添加”页面在退出时执行回调。回调方法然后简单地刷新数据并调用setState刷新屏幕


我的架构使用提供者和视图模型,但在标准应用程序中也应该是直截了当的

为@ian的答案添加选项

Navigator.of(context)
  .push(new MaterialPageRoute<String>(...))
  .then((value) => setState(() => {}));
Navigator.of(上下文)
.推动(新材料路线(…)
。然后((值)=>setState(()=>{}));
这对我有用。无论何时加载页面,都将重新生成该页面。

对于命名路由:

Navigator.pushNamed(上下文“/page2”)。然后((){
//当您从第2页返回到第1页时,此块将运行。
设置状态(){
//调用setState刷新页面。
});
});
对于未命名路线:

Navigator.push(上下文,MaterialPackageRoute(生成器:(){
//当您从第2页返回到第1页时,此块将运行。
设置状态(){
//调用setState刷新页面。
});
});

看到这一点:您可以使用NavigatorObserver和RouteObserver来接收与屏幕转换相关的事件。可能重复的可能重复我正在使用Get,因此我不直接处理Navigator.of(上下文),而是更简单的
Get.to()
<代码>.whenComplete()帮助nevertheless@CsabaToth是的,这里的神奇工具是whenComplete()方法本身。您添加了什么,一个
setState
调用?你可以编辑他的答案,而不是自己写。
Navigator.of(context)
  .push(new MaterialPageRoute<String>(...))
  .then((value) => setState(() => {}));