我有2页,并且每个页面在initState
中具有返回列表的相同功能。
第一页具有常规功能,第二页具有相同功能,但具有返回过滤列表的过滤器。
问题是,当我按下第二页上的“后退按钮”并返回第一页时,我得到的是过滤列表,而不是常规列表。
在转到首页之前,如何从第二页“清除”数据?
功能:
Future fetchProducts({flag = false}) {
return http
.get(
'MyAddress')
.then<Null>((http.Response response) {
final Map<String, dynamic> listData = json.decode(response.body);
listData.forEach((String id, dynamic fetchedData) {
final Product product = Product(
id: id,
address: fetchedData['address'],
image: fetchedData['imageUrl'],
);
fetchedData.add(product);
});
_product = flag
? fetchedData.where((Product product) {
return product.userId == 1;
}).toList()
: fetchedData;
});
}
答案 0 :(得分:2)
返回页面(路由)时有两种触发动作的方法。
1)
void WaitforBeingBackfromConfig() async{
await Navigator.push(
context, MaterialPageRoute(
builder: (context) => ConfigScreen('platzhalter'))
);
//Do something right after return to page1
}
2)如@Michael所述:WillPopScope:
Widget build(BuildContext context) {
return WillPopScope(
onWillPop: _SaveAndBack,
child: Scaffold(
appBar: AppBar(
title: Text('Config'),
),
body: Column(children: <Widget>[
.... ]),
),
);
这将在离开第2页之前调用函数“ _SaveAndBack”。
答案 1 :(得分:0)
不知道这是否是最好的解决方案,但是我可以将Scaffold
和WillPopScope
包装在一起,然后使用Navigator.pushReplacementNamed
从那里导航到上一个屏幕以“激活”再次initState
答案 2 :(得分:0)
#应用程序根
return WillPopScope(
onWillPop: () async {
data1 = '';
data2 = 0;
Navigator.pop(context);
return true;
},
child:scaffold...