flutter Navigator.of(context).pop() refresh路由返回刷新问题

三种返回页面的方式

1.原生点击Native Back Button
2.点击app bar的Back Button(返回按钮)
3.以编程的方式调用Navigator.pop(context)
但是不管是以哪种方式,我们最终都是通过: Navigator.pop(context)

应用场景:

在新闻列表(PageList)中,我们点击了新闻详情(PageDetail)页面,push到详情页面后,需要点击返回(不管是物理键返回还是按钮返回又或者是左上角的自带返回),我们想要返回PageList的时候想要列表重新刷新获取新的新闻,因为某些场景下新闻是需要实时更新变化的。

初步设想:通过pushReplacement、pushAndRemoveUntil 、跳转回调调函数(推荐)

import 'dart:async';
import 'package:flutter/material.dart';
void main() {
  runApp(MyApp());
class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Refresh on Go Back',
      home: HomePage(),
class HomePage extends StatefulWidget {
  @override
  _HomePageState createState() => _HomePageState();
class _HomePageState extends State<HomePage> {
  int id = 0;
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Home'),
      body: Center(
        child: Column(
          mainAxisSize: MainAxisSize.min,
          children: <Widget>[
            Text(
              'Data: $id',
              style: Theme.of(context).textTheme.headline5,
            RaisedButton(
              child: Text('Second Page'),
              onPressed: navigateSecondPage,
  FutureOr onGoBack(dynamic value) {
    refreshData();
    setState(() {});
  void navigateSecondPage(){ 
    Route route = MaterialPageRoute(builder: (context) => SecondPage());
    Navigator.push(context, route).then(onGoBack);
  void refreshData() {
    id++;
class SecondPage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Second Page'),
      body: Center(
        child: RaisedButton(
          onPressed: () {
            Navigator.pop(context);
          child: Text('Go Back'),