如何在Flutter中重置Navigator.pop回调值?

时间:2020-08-03 07:23:07

标签: flutter callback navigator

请在下面提供我的解释。 我有一个包含2个BottomNavigationBar项目的页面:

Page1(),
Page2(),

Page1中有一个按钮,可导航到另一个名为PostSomethingPage的页面:

// in Page1
onPressed: () => Navigator.push(
   context, MaterialPageRoute<bool>(builder: 
     (context) => PostSomethingPage()))
        .then((isPostSuccess) => isPostSuccess 
          ? print('is Success!') : print('Failed!'));

您可以看到Page1期望从PostSomethingPage返回布尔值,并将基于该值进行打印。

这是PostSomethingPage中返回结果的代码:

// in PostSomethingPage
Navigator.pop(context, isSuccess);

然后,当我们返回到Page1时,已经收到了来自回调的值,并相应地执行了print语句,此时一切似乎都很好。

但是当我导航到Page2并返回到Page1时出现了一个问题
注意:至此,我从Page1 => PostSomethingPage =>返回到Page1,并得到结果,然后转到Page2

因为当我再次回到Page1时,打印语句将根据LAST已知值再次打印。但是我想要的是将回调值重置为空,而不是使用truefalse

1 个答案:

答案 0 :(得分:1)

使用变量存储PostSomethingPage返回的值

//our variable initialized with null
bool isPostSuccess;

@override
Widget build(BuildContext context) {
  return FlatButton(onPressed: () async {
    //going to PostSomethingPage from Page1
    isPostSuccess = await Navigator.of(context).push(
        MaterialPageRoute<bool>(builder: (context) {
          return PostSomethingPage();
        })
    );
  }, child: Text(''));
  //we are back at the Page1
  //isPostSuccess will not be null
}

现在在进入第2页之前,只需将isPostSuccess的值再次设置为空

    //going to Page2 from Page1
    isPostSuccess = null;
    Navigator.of(context).push(
        MaterialPageRoute<bool>(builder: (context) {
          return Page2();
        })
    );