三种返回页面的方式
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'),
),
),
);
}
}
网友评论