文章目录
一、前言
有时候需要对程序路由栈变化进行监听,这里可以使用NavigatorObserver来进行处理,使用该代码可以获取当前栈中页面层数和判断是否是到了最后一个页面,不过大部分情况下是用不到这个类的。代码如下:
二、代码
先定义一个继承NavigatorObserver的单独的类
navigator_test.dart
import 'package:flutter/material.dart';
///导航栈的变化监听
class MyNavigator extends NavigatorObserver{
@override
void didPop(Route<dynamic> route, Route<dynamic> previousRoute) {
super.didPop(route, previousRoute);
var previousName = '';
if (previousRoute == null) {
previousName = 'null';
}else {
previousName = previousRoute.settings.name;
}
print('YM----->NavObserverDidPop--Current:' + route.settings.name + ' Previous:' + previousName);
}
@override
void didPush(Route<dynamic> route, Route<dynamic> previousRoute) {
super.didPush(route, previousRoute);
var previousName = '';
if (previousRoute == null) {
previousName = 'null';
}else {
previousName = previousRoute.settings.name;
}
print('YM-------NavObserverDidPush-Current:' + route.settings.name + ' Previous:' + previousName);
}
@override
void didStopUserGesture() {
super.didStopUserGesture();
}
@override
void didStartUserGesture(Route<dynamic> route, Route<dynamic> previousRoute) {
super.didStartUserGesture(route, previousRoute);
}
@override
void didReplace({Route<dynamic> newRoute, Route<dynamic> oldRoute}) {
super.didReplace(newRoute: newRoute,oldRoute: oldRoute);
}
@override
void didRemove(Route<dynamic> route, Route<dynamic> previousRoute) {
super.didRemove(route, previousRoute);
}
}
main.dart
import 'package:flutter/material.dart';
import 'navigator_test.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Material App',
initialRoute: "/",
navigatorObservers: [
MyNavigator()
],
);
}
}
本文转自 blog.csdn.net/Mr_Tony/art…,如有侵权,请联系删除。