我有一个列表页面和一个添加页面,用户单击添加页面,转到新页面,在那里添加一些实体;然后我弹出导航器,用户返回列表页面。在这一点上,我想以某种方式得到通知 - 可能回调?覆盖一个方法,我不太确定 - 并重新读取数据库中的信息。
颤动时是否有这样的钩子?还是我应该使用另一种模式?
答案 0 :(得分:4)
在@ian的答案中添加一个选项
Navigator.of(context)
.push(new MaterialPageRoute<String>(...))
.then((value) => setState(() => {}));
这对我有用。每当页面加载时都会重新构建。
答案 1 :(得分:2)
Navigator.push
方法返回Route的泛型类型的未来:
Navigator.of(context)
.push(new MaterialPageRoute<String>(...))
.then((String value) {
print(value);
});
在新路线中,当你拥有所需的价值时:
Navigator.of(context).pop('String');
答案 2 :(得分:1)
我将回调方法作为导航器路由参数传递到“添加”页面。回调是我列表页面中的一种方法。退出时,“添加”页面执行回调。然后,回调方法仅刷新数据并调用setState刷新屏幕。
我的体系结构使用的是Provider和ViewModel,但在标准应用程序中也应该简单明了。
答案 3 :(得分:0)
如果在列表页面上创建函数,让函数说方法restoreData()读取数据列表,然后在initState中调用它,如果使用的是pushNamed路由,则简单的解决方案是
Navigator.pushNamed(context, '/adddatapage').whenComplete(retrieveData());
如果您使用的是推送路线,
Navigator.of(context).push(new MaterialPageRoute(builder: (context) => AddPage())).whenComplete(retrieveData);
那应该足够了。无需在添加页面上添加其他代码。如果用户再次按下返回按钮,而在添加页面中也没有其他代码,则将可以使用此功能。
答案 4 :(得分:0)
我使用Navigator.pushAndRemoveUntil
,它将刷新页面并再次加载数据,这是示例:
Navigator.pushAndRemoveUntil(
context,
MaterialPageRoute(
builder: (context) =>
CustomerMainPage()),
(Route<dynamic> route) =>
false);
答案 5 :(得分:0)
对于命名路由:
Navigator.pushNamed(context, '/page2').then((_) {
// This block runs when you have returned back to the 1st Page from 2nd.
setState(() {
// Call setState to refresh the page.
});
});
对于未命名的路线:
Navigator.push(context, MaterialPageRoute(builder: (_) => Page2())).then((_) {
// This block runs when you have come back to the 1st Page from 2nd.
setState(() {
// Call setState to refresh the page.
});
});