如何在后面按下后刷新页面

时间:2018-04-20 03:03:17

标签: flutter

我有一个列表页面和一个添加页面,用户单击添加页面,转到新页面,在那里添加一些实体;然后我弹出导航器,用户返回列表页面。在这一点上,我想以某种方式得到通知 - 可能回调?覆盖一个方法,我不太确定 - 并重新读取数据库中的信息。

颤动时是否有这样的钩子?还是我应该使用另一种模式?

6 个答案:

答案 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.
  });
});