写个MyNavigatorObserver路由监听,添加到navigatorObservers:里面
import 'package:flutter/material.dart';
class MyNavigatorObserver extends NavigatorObserver {
int count = 0;
static List<StackBean> mStackBeans = [];
StackBean? mStackBean;
@override
void didRemove(Route<dynamic> route, Route<dynamic>? previousRoute) {
}
@override
void didPush(Route<dynamic> route, Route<dynamic>? previousRoute) {
super.didPush(route, previousRoute);
count++;
if(mStackBean == null){
mStackBean = StackBean();
}
if(route != null){
if(route.settings.name != mStackBean!.pathName){
mStackBeans.add(mStackBean!);
mStackBean = StackBean();
}
mStackBean!.pathName = route.settings.name;
}
print("wgw_Observer=didPush:${route.settings.name}");
if(previousRoute != null){
mStackBean!.prePathName = previousRoute.settings.name;
print("wgw_Observer=didPush:previousRoute:${previousRoute.settings.name}");
}
print('Total page navigations: $count');
}
@override
void didPop(Route<dynamic> route, Route<dynamic>? previousRoute) {
super.didPop(route, previousRoute);
count--;
if(route.settings.name == mStackBean!.pathName){
mStackBeans.add(mStackBean!);
mStackBean = StackBean();
}
print("wgw_Observer=didPop:${route.settings.name}");
if(previousRoute != null){
print("wgw_Observer=didPop:previousRoute:${previousRoute.settings.name}");
if(previousRoute.settings.name == "/TabMainPage"){
///上传 list
if(mStackBeans != null && mStackBeans.length>0){
mStackBeans.forEach((element) {
print("wgw_mStackBeans_item:${element.pathName}");
});
}
}else{
if(mStackBean == null){
mStackBean = StackBean();
}
mStackBean!.pathName = previousRoute.settings.name;
}
}
print('Total page navigations: $count');
}
@override
void didReplace({Route<dynamic>? newRoute, Route<dynamic>? oldRoute}) {
if(newRoute != null){
print("wgw_Observer=didReplace:${newRoute!.settings.name}");
}
if(oldRoute != null){
print("wgw_Observer=didReplace:previousRoute:${oldRoute.settings.name}");
}
print('Total page navigations: $count');
}
@override
void didStartUserGesture(Route<dynamic> route, Route<dynamic>? previousRoute) {
}
@override
void didStopUserGesture() {
}
}
class StackBean{
String? pathName;
double? timeStart;
double? timeStop;
double? longTime;
String? prePathName;
}
可以在其他页面进行添加和遍历清空数组上传,至于事件的上传可以埋在请求网络请求和点击事件中,单独用个结构体存放或者直接上传