Flutter 对路由变化的监听-NavigatorObserver

1,140 阅读1分钟

文章目录

一、前言

有时候需要对程序路由栈变化进行监听,这里可以使用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…,如有侵权,请联系删除。