flutter埋点监听浏览页面

写个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;
}

可以在其他页面进行添加和遍历清空数组上传,至于事件的上传可以埋在请求网络请求和点击事件中,单独用个结构体存放或者直接上传

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,727评论 11 349
  • 背景 互联网发展到现在,数据的重要性已经不需要再多的强调,那如何做好数据搜集的工作则是每一家公司都要面临的问题。尤...
    这个前端不太冷阅读 13,081评论 0 17
  • 2018web前端最新面试题总结 一、Html/Css基础模块 基础部分 什么是HTML?答:​ HTML并不是...
    duans_阅读 4,711评论 3 27
  • [TOC] 1 JAVA: String为什么这么设计 在源码中string是用final 进行修饰,它是不可更改...
    寄浮生阅读 942评论 0 0
  • 1. Flutter中的StatefulWidget和StatelessWidget有什么区别? Stateful...
    阿登乔治阅读 2,799评论 0 6

友情链接更多精彩内容