如何在Flutter中返回并刷新上一页?

Dav*_*vid 8 dart flutter

例如:我想从Page2返回Page1并刷新Page1.

Cop*_*oad 33

(在您的第一页中):使用此代码导航到第二页。

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.
  });
});
Run Code Online (Sandbox Code Playgroud)

(在您的第二页中):使用此代码返回到第一页。

Navigator.pop(context);
Run Code Online (Sandbox Code Playgroud)

  • 谢谢。它就像一个魔咒,帮我减轻了很多压力 (3认同)

azi*_*iza 13

当您导航回第一页时,您可以触发API调用,就像这个伪代码一样

class PageOne extends StatefulWidget {
  @override
  _PageOneState createState() => new _PageOneState();
}

class _PageOneState extends State<PageOne> {
  _getRequests()async{

  }
  @override
  Widget build(BuildContext context) {
    return new Scaffold(
      body: new Center(
        child: new RaisedButton(onPressed: ()=>
        Navigator.of(context).push(new MaterialPageRoute(builder: (_)=>new PageTwo()),)
        .then((val)=>val?_getRequests():null),
      ),
    ));
  }
}

class PageTwo extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    //somewhere
    Navigator.pop(context,true);
  }
}
Run Code Online (Sandbox Code Playgroud)

或者,如果API经常更新,您可以使用流,新数据将在您的内部自动更新 ListView

例如,使用firebase,我们可以做到这一点

stream: FirebaseDatabase.instance.reference().child(
      "profiles").onValue
Run Code Online (Sandbox Code Playgroud)

只要您在数据库中更改某些内容(例如,从编辑个人资料页面),它就会反映在您的个人资料页面上.在这种情况下,这是唯一可能的,因为我正在使用onValue它将继续监听任何更改并代表您进行更新.

  • 只需将 ```.then((val)=&gt;val?_getRequests():null)``` 替换为 ```.then((val)=&gt;{_getRequests()})``` 。否则会发生“bool != null 异常”。 (6认同)

Moh*_*our 11

当您从 nextScreen 导航回来时使用结果,如下所示:

Navigator.of(context).pop('result');

or if you are using Getx

Get.back(result: 'hello');
Run Code Online (Sandbox Code Playgroud)

并重新加载上一页使用此功能:

void _navigateAndRefresh(BuildContext context) async {
    final result = await Get.to(()=>NextScreen());//or use default navigation
    if(result != null){
      model.getEMR(''); // call your own function here to refresh screen
    }
  }
Run Code Online (Sandbox Code Playgroud)

调用此函数而不是直接导航到 nextScreen