news_getx/lib/routes/app_observer.dart

51 lines
1.2 KiB
Dart

import 'package:flutter/material.dart';
import 'package:news_getx/routes/app_pages.dart';
/// 监听路由导航
class AppNavigatorObserver extends NavigatorObserver {
@override
void didPush(Route route, Route? previousRoute) {
super.didPush(route, previousRoute);
var name = route.settings.name ?? "";
if (name.isNotEmpty) {
AppPages.history.add(name);
}
}
@override
void didPop(Route route, Route? previousRoute) {
super.didPop(route, previousRoute);
AppPages.history.remove(route.settings.name);
}
@override
void didRemove(Route route, Route? previousRoute) {
super.didRemove(route, previousRoute);
AppPages.history.remove(route.settings.name);
}
@override
void didReplace({Route? newRoute, Route? oldRoute}) {
super.didReplace(newRoute: newRoute, oldRoute: oldRoute);
if (newRoute != null) {
var index = AppPages.history.indexWhere((element) {
return element == oldRoute?.settings.name;
});
var name = newRoute.settings.name ?? '';
if (name.isNotEmpty) {
if (index > 0) {
AppPages.history[index] = name;
} else {
AppPages.history.add(name);
}
}
}
}
}