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(() => {}));