按下后退按钮时如何清除数据

时间:2019-06-08 10:26:51

标签: flutter dart

我有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;
    });
  }

3 个答案:

答案 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)

不知道这是否是最好的解决方案,但是我可以将ScaffoldWillPopScope包装在一起,然后使用Navigator.pushReplacementNamed从那里导航到上一个屏幕以“激活”再次initState

答案 2 :(得分:0)

#应用程序根

 return WillPopScope(
      onWillPop: () async {
        data1 = '';
        data2 = 0;
        Navigator.pop(context);
        return true;
      },
      child:scaffold...