美文网首页
flutter Navigator.of(context).po

flutter Navigator.of(context).po

作者: 小话001 | 来源:发表于2021-07-02 14:05 被阅读0次
三种返回页面的方式

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'),
        ),
      ),
    );
  }
}

相关文章

网友评论

      本文标题:flutter Navigator.of(context).po

      本文链接:https://www.haomeiwen.com/subject/foieultx.html