소스 검색

[feat]添加友盟上报事件

云天逵 10 달 전
부모
커밋
b07773406a
48개의 변경된 파일750개의 추가작업 그리고 159개의 파일을 삭제
  1. 1 1
      android/app/src/main/AndroidManifest.xml
  2. 15 0
      android/app/src/main/java/com/example/clean/clean/MainApplication.java
  3. 11 6
      lib/base/base_photo_controller.dart
  4. 13 0
      lib/data/consts/build_config.dart
  5. 152 0
      lib/data/consts/event_report_id.dart
  6. 1 0
      lib/data/repositories/user_repository.dart
  7. 4 0
      lib/dialog/photo_preview_tip_dialog.dart
  8. 4 0
      lib/dialog/wallpaper_detail_dialog.dart
  9. 43 0
      lib/handler/event_handler.dart
  10. 38 1
      lib/main.dart
  11. 3 0
      lib/module/analysis/analysis_controller.dart
  12. 25 2
      lib/module/calendar/preview/calendar_preview_controller.dart
  13. 5 2
      lib/module/calendar/preview/calendar_preview_view.dart
  14. 10 0
      lib/module/calendar/selected_preview/calendar_selected_preview_controller.dart
  15. 5 2
      lib/module/calendar/selected_preview/calendar_selected_preview_view.dart
  16. 3 0
      lib/module/contact/all/all_controller.dart
  17. 4 0
      lib/module/contact/backup/controller.dart
  18. 6 0
      lib/module/contact/contact_view.dart
  19. 4 0
      lib/module/contact/duplicate/controller.dart
  20. 3 0
      lib/module/contact/incomplete/controller.dart
  21. 18 0
      lib/module/home/home_controller.dart
  22. 1 3
      lib/module/home/home_view.dart
  23. 4 0
      lib/module/locations_photo/locations_photo_controller.dart
  24. 9 0
      lib/module/main/main_view.dart
  25. 31 0
      lib/module/more/more_controller.dart
  26. 9 13
      lib/module/more/more_view.dart
  27. 15 0
      lib/module/people_photo/people_photo_controller.dart
  28. 64 59
      lib/module/people_photo/people_photo_view.dart
  29. 20 0
      lib/module/photo_info/photo_info_controller.dart
  30. 13 2
      lib/module/photo_preview/photo_preview_controller.dart
  31. 60 57
      lib/module/photo_preview/photo_preview_view.dart
  32. 20 3
      lib/module/photo_preview/photo_selected_preview_controller.dart
  33. 5 0
      lib/module/privacy/privacy_controller.dart
  34. 8 0
      lib/module/screenshots_blurry/screenshots_controller.dart
  35. 1 0
      lib/module/setting/setting_controller.dart
  36. 21 1
      lib/module/similar_photo/similar_photo_controller.dart
  37. 4 2
      lib/module/similar_photo/similar_photo_view.dart
  38. 6 0
      lib/module/splash/intro/intro_controller.dart
  39. 8 0
      lib/module/splash/splash_controller.dart
  40. 14 0
      lib/module/store/discount/discount_controller.dart
  41. 2 1
      lib/module/store/payment_status_manager.dart
  42. 15 0
      lib/module/store/store_controller.dart
  43. 1 1
      lib/module/store/store_view.dart
  44. 5 0
      lib/module/wallpaper/wallpaper_controller.dart
  45. 2 1
      lib/router/app_pages.dart
  46. 32 0
      lib/sdk/umeng/umeng_helper.dart
  47. 2 2
      lib/utils/file_size_calculator_util.dart
  48. 10 0
      pubspec.yaml

+ 1 - 1
android/app/src/main/AndroidManifest.xml

@@ -6,7 +6,7 @@
     <uses-permission android:name="android.permission.WRITE_CONTACTS"/>
     <application
         android:label="clean"
-        android:name="${applicationName}"
+        android:name=".MainApplication"
         android:icon="@mipmap/ic_launcher">
 
         <activity

+ 15 - 0
android/app/src/main/java/com/example/clean/clean/MainApplication.java

@@ -0,0 +1,15 @@
+package com.example.clean.clean;
+
+import android.app.Application;
+import com.umeng.commonsdk.UMConfigure;
+public class MainApplication extends Application{
+
+    @Override
+    public void onCreate() {
+        super.onCreate();
+        // Initialize the SDK
+        UMConfigure.setLogEnabled(true);
+        UMConfigure.preInit(this,"678617728f232a05f1f8de39","android");
+    }
+}
+

+ 11 - 6
lib/base/base_photo_controller.dart

@@ -13,6 +13,8 @@ import 'package:clean/utils/toast_util.dart';
 import 'package:clean/data/bean/photos_type.dart';
 import 'package:clean/module/photo_preview/photo_preview_view.dart';
 
+import '../data/consts/event_report_id.dart';
+import '../handler/event_handler.dart';
 import '../utils/file_size_calculator_util.dart';
 
 abstract class BasePhotoController extends BaseController {
@@ -55,7 +57,7 @@ abstract class BasePhotoController extends BaseController {
   // 切换图片选中状态
   Future<void> toggleImageSelection(
       List<AssetEntity> groupTitle, int imageIndex) async {
-    print("BasePhotoController toggleImageSelection");
+    debugPrint("BasePhotoController toggleImageSelection");
     final group = getGroupByImages(groupTitle);
     final image = group.images[imageIndex];
     final selected = !group.selectedImages[imageIndex];
@@ -98,7 +100,7 @@ abstract class BasePhotoController extends BaseController {
   }
 
   void clickImage(List<AssetEntity> images, int imageIndex, PhotosType type) {
-    print("BasePhotoController clickImage");
+    debugPrint("BasePhotoController clickImage");
     final group = getGroupByImages(images);
     final image = group.images[imageIndex];
     PhotoPreviewPage.start(type, image.id);
@@ -152,7 +154,7 @@ abstract class BasePhotoController extends BaseController {
 
   @override
   void onInit() {
-    print("BasePhotoController onInit");
+    debugPrint("BasePhotoController onInit");
     super.onInit();
     loadPhotos();
     restoreSelections();
@@ -162,6 +164,9 @@ abstract class BasePhotoController extends BaseController {
 
   // 点击删除
   void clickDelete() async {
+    EventHandler.report(EventId.event_03008,
+        params: {EventId.type: getPhotosType().name});
+    print('BasePhotoController getPhotosType().toString() ${getPhotosType().toString()}');
     if (userRepository.isVip()) {
       if (selectedPhotosIds.isNotEmpty) {
         photoDeletingDialog();
@@ -185,7 +190,7 @@ abstract class BasePhotoController extends BaseController {
 
           selectedPhotosIds.clear();
           selectedFileCount.value = selectedPhotosIds.length;
-          print(
+          debugPrint(
               "BasePhotoController clickDelete selectedPhotosIds $selectedPhotosIds");
           updateSelectedFilesSize();
 
@@ -205,13 +210,13 @@ abstract class BasePhotoController extends BaseController {
   }
 
   void updateSelections(Set<String> selectedIds) {
-    print(
+    debugPrint(
         "BasePhotoController updateSelections selectedIds $selectedIds, selectedPhotosIds $selectedPhotosIds getPhotosType() ${getPhotosType()}");
     // selectedId如果是selectedPhotosIds对象,那么selectedPhotosIds.assignAll(selectedIds)会清空
     // selectedPhotosIds.assignAll(selectedIds);
 
     selectedPhotosIds.assignAll(Set.from(selectedIds));
-    print(
+    debugPrint(
         "BasePhotoController updateSelections selectedIds $selectedIds, selectedPhotosIds $selectedPhotosIds getPhotosType() ${getPhotosType()}");
 
     switch (getPhotosType()) {

+ 13 - 0
lib/data/consts/build_config.dart

@@ -1,3 +1,5 @@
+import 'dart:io';
+
 import 'package:flutter/foundation.dart';
 
 class BuildConfig {
@@ -5,3 +7,14 @@ class BuildConfig {
 
   static bool get isDebug => kDebugMode;
 }
+
+final class UmengConfig {
+  UmengConfig._();
+
+  //友盟统计配置
+  static const umengAndroidAppKey = "678617728f232a05f1f8de39";
+  static const umengIosAppKey = "678617728f232a05f1f8de39";
+
+
+
+}

+ 152 - 0
lib/data/consts/event_report_id.dart

@@ -0,0 +1,152 @@
+abstract class EventId{
+  static const String type = 'type';
+
+  // c_01000	启屏
+  static const String event_01000 = 'c_01000'; //启屏-展示
+  // c_01001	隐私页面1-展示
+  // static const String event_01001 = 'c_01001'; //隐私页面1-展示
+  // c_01002	隐私页面1-点击开始
+  static const String event_01002 = 'c_01002'; //隐私页面1-点击开始
+  // c_01003	新人引导页面1-展示
+  static const String event_01003 = 'c_01003'; //新人引导页面1-展示
+  // c_01004	新人引导页面1-点击
+  static const String event_01004 = 'c_01004'; //新人引导页面1-点击
+  // c_01005	新人引导页面2-展示
+  static const String event_01005 = 'c_01005'; //新人引导页面2-展示
+  // c_01006	新人引导页面2-点击
+  // static const String event_01006 = 'c_01006'; //新人引导页面2-点击
+
+
+  // 会员页
+  // c_02000	会员-点击-入口
+  static const String event_02000 = 'c_02000'; //会员-点击-入口
+  // c_02001	会员页-展示
+  static const String event_02001 = 'c_02001'; //会员页-展示
+  // c_02002	会员页-点击-付费按钮
+  static const String event_02002 = 'c_02002'; //会员页-点击-付费按钮
+  // c_02003	会员页-点击-关闭按钮
+  static const String event_02003 = 'c_02003'; //会员页-点击-关闭按钮
+  // c_02004	会员页-点击-恢复订阅
+  static const String event_02004 = 'c_02004'; //会员页-点击-恢复订阅
+  // 会员折扣页	c_02005	会员折扣页-展示
+  static const String event_02005 = 'c_02005'; //会员折扣页-展示
+  // c_02006	会员页-点击-付费按钮
+  static const String event_02006 = 'c_02006'; //会员页-点击-付费按钮
+  // c_02007	会员页-关闭支付弹窗
+  static const String event_02007 = 'c_02007'; //会员页-关闭支付弹窗
+
+  // 首页
+  // c_03000	首页-展示
+  // static const String event_03000 = 'c_03000'; //首页-展示
+  // c_03001	首页-点击-重复项clean
+  static const String event_03001 = 'c_03001'; //首页-点击-重复项clean
+  // c_03002	首页-点击-人物项clean
+  static const String event_03002 = 'c_03002'; //首页-点击-人物项clean
+  // c_03003	首页-点击-地点项clean
+  static const String event_03003 = 'c_03003'; //首页-点击-地点项clean
+  // c_03004	首页-点击-截图项clean
+  static const String event_03004 = 'c_03004'; //首页-点击-截图项clean
+  // c_03005	首页-点击-模糊项clean
+  static const String event_03005 = 'c_03005'; //首页-点击-模糊项clean
+  // 首页按钮	c_03006	图片清理页-页面展示
+  static const String event_03006 = 'c_03006'; //图片清理页-页面展示
+  // c_03007	重复项-点击-Move按钮
+  static const String event_03007 = 'c_03007'; //重复项-点击-Move按钮
+  // c_03008	地点页-点击-删除
+  static const String event_03008 = 'c_03008'; //地点页-点击-删除
+  // // c_03009	截屏页-点击-删除
+  // static const String event_03009 = 'c_03009'; //截屏页-点击-删除
+  // // c_03010	模糊图片-点击-删除
+  // static const String event_03010 = 'c_03010'; //模糊图片-点击-删除
+  //
+  // 预览页-通用
+  // c_04000	图片预览引导页-展示
+  static const String event_04000 = 'c_04000'; //图片预览引导页-展示
+  // c_04001	图片预览引导页-点击-试一试
+  static const String event_04001 = 'c_04001'; //图片预览引导页-点击-试一试
+  // c_04002	图片预览页-展示
+  static const String event_04002 = 'c_04002'; //图片预览页-展示
+  // c_04003	图片预览页-点击-返回
+  static const String event_04003 = 'c_04003'; //图片预览页-点击-返回
+  // c_04004	图片预览页-点击-删除按钮
+  static const String event_04004 = 'c_04004'; //图片预览页-点击-删除按钮
+  // c_04005	图片选中列表-点击-入口
+  static const String event_04005 = 'c_04005'; //图片选中列表-点击-入口
+  // c_04006	图片选中列表-点击-删除
+  static const String event_04006 = 'c_04006'; //图片选中列表-点击-删除
+  // c_04007	图片选中列表-点击-返回
+  static const String event_04007 = 'c_04007'; //图片选中列表-点击-返回
+  // c_04008	结果页-完成删除(删除本地相册照片)
+  static const String event_04008 = 'c_04008'; //结果页-完成删除(删除本地相册照片)
+  // c_04009	保留结果页
+  static const String event_04009 = 'c_04009'; //保留结果页
+  //
+  // 隐私空间
+  // c_05000	隐私空间-点击-入口
+  static const String event_05000 = 'c_05000'; //隐私空间-点击-入口
+  // c_05001	隐私空间-密码页展示
+  static const String event_05001 = 'c_05001'; //隐私空间-密码页展示
+  // c_05002	照片上传页-展示
+  static const String event_05002 = 'c_05002'; //照片上传页-展示
+  // c_05003	照片预览页-展示
+  static const String event_05003 = 'c_05003'; //照片预览页-展示
+  // c_05004	照片预览页-点击-删除
+  static const String event_05004 = 'c_05004'; //照片预览页-点击-删除
+
+  // 壁纸
+  // c_06000	壁纸-点击-入口
+  static const String event_06000 = 'c_06000'; //壁纸-点击-入口
+  // c_06001	壁纸页展示
+  static const String event_06001 = 'c_06001'; //壁纸页展示
+  // c_06002	壁纸页-点击-下载
+  static const String event_06002 = 'c_06002'; //壁纸页-点击-下载
+  //
+  // 设置	c_07000	设置-点击-入口
+  static const String event_07000 = 'c_07000'; //设置-点击-入口
+  // c_07001	设置页-展示
+  static const String event_07001 = 'c_07001'; //设置页-展示
+  //
+  // 联系人模块	c_08000	管理联系人入口点击
+  static const String event_08000 = 'c_08000'; //管理联系人入口点击
+  // c_08001	所有联系人-入口点击
+  static const String event_08001 = 'c_08001'; //所有联系人-入口点击
+  // c_08002	所有联系人页-展示
+  static const String event_08002 = 'c_08002'; //所有联系人页-展示
+  // c_08003	所有联系人页-删除
+  static const String event_08003 = 'c_08003'; //所有联系人页-删除
+  // c_08004	重复联系人-入口点击
+  static const String event_08004 = 'c_08004'; //重复联系人-入口点击
+  // c_08005	重复联系人页-展示
+  static const String event_08005 = 'c_08005'; //重复联系人页-展示
+  // c_08006	重复联系人页-点击-合并
+  static const String event_08006 = 'c_08006'; //重复联系人页-点击-合并
+  // c_08007	不完整联系人-入口点击
+  static const String event_08007 = 'c_08007'; //不完整联系人-入口点击
+  // c_08008	不完整联系人页-展示
+  static const String event_08008 = 'c_08008'; //不完整联系人页-展示
+  // c_08009	不完整联系人页-点击-删除
+  static const String event_08009 = 'c_08009'; //不完整联系人页-点击-删除
+  // c_08010	备份联系人-入口点击
+  static const String event_08010 = 'c_08010'; //备份联系人-入口点击
+  // c_08011	备份联系人页-展示
+  static const String event_08011 = 'c_08011'; //备份联系人页-展示
+  // c_08012	备份联系人页-点击-备份
+  static const String event_08012 = 'c_08012'; //备份联系人页-点击-备份
+  //
+  // 照片分析	c_09000	照片分析-入口点击
+  static const String event_09000 = 'c_09000'; //照片分析-入口点击
+  // c_09001	照片分析-上传按钮点击
+  static const String event_09001 = 'c_09001'; //照片分析-上传按钮点击
+  // c_09002	照片分析-图片预览
+  static const String event_09002 = 'c_09002'; //照片分析-图片预览
+  // c_09003	照片分析-图片预览-点击删除
+  static const String event_09003 = 'c_09003'; //照片分析-图片预览-点击删除
+  //
+  // tab点击	c_10000	照片日历
+  static const String event_10000 = 'c_10000'; //照片日历
+  // c_10001	首页
+  static const String event_10001 = 'c_10001'; //首页
+  // c_10002	更多功能
+  static const String event_10002 = 'c_10002'; //更多功能
+
+}

+ 1 - 0
lib/data/repositories/user_repository.dart

@@ -25,6 +25,7 @@ class UserRepository {
 
   // 检测是否为会员
   bool isVip() {
+
     // 检查用户信息和会员信息是否存在
     if (userInfo.value?.memberInfo == null) {
       return false;

+ 4 - 0
lib/dialog/photo_preview_tip_dialog.dart

@@ -5,7 +5,11 @@ import 'package:flutter/cupertino.dart';
 import 'package:flutter_screenutil/flutter_screenutil.dart';
 import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
 
+import '../data/consts/event_report_id.dart';
+import '../handler/event_handler.dart';
+
 void photoPreviewTipDialog({VoidCallback? clickCallback}) {
+  EventHandler.report(EventId.event_04000);
   const tag = 'photoPreviewTipDialog';
   SmartDialog.show(
       tag: tag,

+ 4 - 0
lib/dialog/wallpaper_detail_dialog.dart

@@ -1,5 +1,6 @@
 import 'package:cached_network_image/cached_network_image.dart';
 import 'package:clean/data/bean/wallpapers_bean.dart';
+import 'package:clean/handler/event_handler.dart';
 import 'package:clean/resource/assets.gen.dart';
 import 'package:clean/resource/colors.gen.dart';
 import 'package:clean/utils/toast_util.dart';
@@ -9,6 +10,8 @@ import 'package:flutter_screenutil/flutter_screenutil.dart';
 import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
 import 'package:image_gallery_saver/image_gallery_saver.dart';
 
+import '../data/consts/event_report_id.dart';
+
 const tag = 'wallpaperDetailDialog';
 
 void wallpaperDetailDialog(
@@ -61,6 +64,7 @@ void wallpaperDetailDialog(
                       GestureDetector(
                           onTap: () {
                             downloadWallpaper(wallpapersBean?.imageUrl);
+                            EventHandler.report(EventId.event_06002);
                           },
                           child: Container(
                             width: 328.w,

+ 43 - 0
lib/handler/event_handler.dart

@@ -0,0 +1,43 @@
+import 'package:clean/data/consts/event_report_id.dart';
+import 'package:clean/sdk/umeng/umeng_helper.dart';
+
+import '../data/consts/constants.dart';
+import '../utils/toast_util.dart';
+
+class EventHandler {
+  static const bool isShowToast = true;
+
+  EventHandler._();
+
+  static void report(String eventId, {Map<String, dynamic>? params}) {
+    if (isShowToast) {
+      if (params == null) {
+        ToastUtil.show(eventId);
+      } else {
+        ToastUtil.show('$eventId ${params.toString()}');
+      }
+    }
+    UmengHelper.onEvent(eventId, params ?? {"defaultKey": "default"});
+  }
+
+  static void reportPay(
+      int priceFen, String orderId, String itemName, int payWay) {
+    if (isShowToast) {
+      String? payWayStr;
+      switch (payWay) {
+        case PayMethod.alipay:
+          payWayStr = '支付宝';
+          break;
+        case PayMethod.wechat:
+          payWayStr = '微信';
+          break;
+        case PayMethod.apple:
+          payWayStr = '苹果';
+          break;
+      }
+      ToastUtil.show(
+          'PAY: 金额:$priceFen 订单号:$orderId 商品名:$itemName 支付方式:$payWayStr');
+    }
+    UmengHelper.onEvent(EventId.event_02007,  {"price": priceFen, "orderId": orderId, "itemName": itemName, "payWay": payWay});
+  }
+}

+ 38 - 1
lib/main.dart

@@ -1,8 +1,10 @@
+import 'package:atmob_channel_reader/atmob_channel_reader.dart';
 import 'package:clean/data/consts/constants.dart';
 import 'package:clean/resource/colors.gen.dart';
 import 'package:clean/resource/string.gen.dart';
 import 'package:clean/resource/string_source.dart';
 import 'package:clean/router/app_pages.dart';
+import 'package:clean/sdk/umeng/umeng_helper.dart';
 import 'package:clean/utils/app_info_util.dart';
 import 'package:clean/utils/mmkv_util.dart';
 import 'package:flutter/material.dart';
@@ -12,12 +14,13 @@ import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
 import 'package:get/get_navigation/src/root/get_material_app.dart';
 import 'package:pull_to_refresh/pull_to_refresh.dart';
 
+import 'device/atmob_platform_info.dart';
 import 'device/device_info_util.dart';
 
 Future<void> main() async {
 
   await KVUtil.init();
-
+  initChannel();
   //初始化
   await initAfterGrant();
 
@@ -28,10 +31,44 @@ Future<void> initAfterGrant() async {
   if (!isAgreePrivacyPolicy()) {
     return;
   }
+
   //获取包信息
   await appInfoUtil.init();
   //获取设备信息
   await deviceInfoUtil.init();
+
+  // 初始化友盟
+ await UmengHelper.initCommon();
+
+}
+
+
+initChannel() async {
+  await AtmobChannelReader.default4Test(Constants.appDefaultChannel,
+      Constants.appDefaultAppId, Constants.appDefaultTgPlatformId);
+
+  String? channel = KVUtil.getString(
+      Constants.appChanelName, await AtmobChannelReader.getChannel());
+  KVUtil.putString(Constants.appChanelName, channel);
+
+  int? channelId = KVUtil.getInt(Constants.appChannelId, -1);
+  if (channelId == -1) {
+    channelId = await AtmobChannelReader.getAppId();
+  }
+  if (channelId != null) {
+    KVUtil.putInt(Constants.appChannelId, channelId);
+  }
+
+  int? appTgPlatformId = KVUtil.getInt(Constants.appTgPlatformId, -1);
+  if (appTgPlatformId == -1) {
+    appTgPlatformId = await AtmobChannelReader.getTgPlatformId();
+  }
+  if (appTgPlatformId != null) {
+    KVUtil.putInt(Constants.appTgPlatformId, appTgPlatformId);
+  }
+  atmobPlatformInfo.setChannelName(channel);
+  atmobPlatformInfo.setAppId(channelId);
+  atmobPlatformInfo.setTgPlatform(appTgPlatformId);
 }
 
 class MyApp extends StatelessWidget {

+ 3 - 0
lib/module/analysis/analysis_controller.dart

@@ -4,6 +4,7 @@ import 'package:classify_photo/classify_photo.dart';
 import 'package:clean/base/base_controller.dart';
 import 'package:clean/data/repositories/user_repository.dart';
 import 'package:clean/dialog/photo_uploading_dialog.dart';
+import 'package:clean/handler/event_handler.dart';
 import 'package:clean/module/analysis/analysis_state.dart';
 import 'package:clean/module/store/store_view.dart';
 import 'package:clean/router/app_pages.dart';
@@ -17,6 +18,7 @@ import 'package:get/get_rx/src/rx_types/rx_types.dart';
 import 'package:permission_handler/permission_handler.dart';
 import 'package:wechat_camera_picker/wechat_camera_picker.dart';
 
+import '../../data/consts/event_report_id.dart';
 import '../../model/asset_info.dart';
 import '../../utils/file_utils.dart';
 import '../../utils/image_util.dart';
@@ -98,6 +100,7 @@ class AnalysisController extends BaseController {
 
   // 上传按钮点击
   void uploadBtnClick() {
+    EventHandler.report(EventId.event_09001);
     if (userRepository.isVip()) {
       openGallery();
     } else {

+ 25 - 2
lib/module/calendar/preview/calendar_preview_controller.dart

@@ -8,10 +8,14 @@ import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
 import 'package:get/get.dart';
 import 'package:wechat_assets_picker/wechat_assets_picker.dart';
 
+import '../../../data/consts/constants.dart';
+import '../../../data/consts/event_report_id.dart';
 import '../../../data/repositories/user_repository.dart';
 import '../../../dialog/photo_delete_finish_dialog.dart';
 import '../../../dialog/photo_deleting_dialog.dart';
+import '../../../dialog/photo_preview_tip_dialog.dart';
 import '../../../dialog/play_video_dialog.dart';
+import '../../../handler/event_handler.dart';
 import '../../../utils/file_size_calculator_util.dart';
 import '../../../utils/toast_util.dart';
 import '../../image_picker/image_picker_util.dart';
@@ -66,6 +70,7 @@ class CalendarPreviewController extends BaseController
         //   延迟一秒
         Future.delayed(Duration(seconds: 1), () {
           animationIsComplete.value = true;
+          EventHandler.report(EventId.event_04008);
         });
       }
       if (status == AnimationStatus.completed) {
@@ -173,12 +178,27 @@ class CalendarPreviewController extends BaseController
   void clickSelect() {
     cardSwiperController.swipe(CardSwiperDirection.left);
   }
+  @override
+  void onReady() {
+
+    super.onReady();
+    EventHandler.report(EventId.event_04002);
+    print('PhotoPreviewController onReady');
+    if (isFirstOpenPhotoPreview()) {
+      photoPreviewTipDialog(clickCallback: () {
+        setFirstOpenPhotoPreview(false);
+        EventHandler.report(EventId.event_04001);
+      });
+    }
+  }
 
   void clickBack() {
+    EventHandler.report(EventId.event_04003);
     Get.back();
   }
 
   clickDelete() async {
+    EventHandler.report(EventId.event_04004);
     debugPrint('CalendarPreviewController clickDelete');
     if (userRepository.isVip()) {
       if (photoGroup.value.selectedPhotosIds.isNotEmpty) {
@@ -200,7 +220,6 @@ class CalendarPreviewController extends BaseController
         if (result.length == photoGroup.value.selectedPhotosIds.length) {
           ImagePickerUtil.updatePhotoData(photoGroup.value.selectedPhotosIds);
           cleanSelections();
-
           ToastUtil.show('Delete success');
           Future.delayed(Duration(seconds: 2), () {
             SmartDialog.dismiss(tag: 'photoDeletingDialog');
@@ -216,7 +235,11 @@ class CalendarPreviewController extends BaseController
       StorePage.start();
     }
   }
-
+  void clickJumpSelected() {
+    debugPrint('PhotoPreviewController clickJumpSelected');
+    EventHandler.report(EventId.event_04005);
+    CalendarSelectedPreviewPage.start(photoGroup.value);
+  }
   //删除成功清除选中的图片
   void cleanSelections() async {
     photoGroup.value.images.removeWhere(

+ 5 - 2
lib/module/calendar/preview/calendar_preview_view.dart

@@ -257,7 +257,10 @@ class CalendarPreviewPage extends BasePage<CalendarPreviewController> {
   }
 
   Widget _bottomBarCard() {
-    return Container(
+    return GestureDetector(
+        onTap:controller.clickJumpSelected,
+      child:
+      Container(
       width: 360.w,
       height: 81.h,
       padding: EdgeInsets.symmetric(horizontal: 16.w),
@@ -318,7 +321,7 @@ class CalendarPreviewPage extends BasePage<CalendarPreviewController> {
               )),
         ],
       ),
-    );
+    ));
   }
 
   Widget bottomButtonCard() {

+ 10 - 0
lib/module/calendar/selected_preview/calendar_selected_preview_controller.dart

@@ -5,9 +5,11 @@ import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
 import 'package:get/get.dart';
 import 'package:wechat_assets_picker/wechat_assets_picker.dart';
 
+import '../../../data/consts/event_report_id.dart';
 import '../../../data/repositories/user_repository.dart';
 import '../../../dialog/photo_delete_finish_dialog.dart';
 import '../../../dialog/photo_deleting_dialog.dart';
+import '../../../handler/event_handler.dart';
 import '../../../router/app_pages.dart';
 import '../../../utils/file_size_calculator_util.dart';
 import '../../../utils/toast_util.dart';
@@ -53,6 +55,12 @@ class CalendarSelectedPreviewController extends BaseController {
   }
 
   void clickBack() {
+    EventHandler.report(EventId.event_04007);
+
+    calendarPreviewController.photoGroup.value.selectedPhotosIds.assignAll(
+      photoGroup.value.selectedPhotosIds,
+    );
+
     calendarPreviewController.restoreSelections();
     Get.back();
   }
@@ -69,6 +77,7 @@ class CalendarSelectedPreviewController extends BaseController {
   }
 
   clickDelete() async {
+    EventHandler.report(EventId.event_04004);
     debugPrint('CalendarSelectedPreviewController clickDelete');
     if (userRepository.isVip()) {
       if (photoGroup.value.selectedPhotosIds.isNotEmpty) {
@@ -107,6 +116,7 @@ class CalendarSelectedPreviewController extends BaseController {
         }
       } else {
         isKeepAll.value = true;
+        EventHandler.report(EventId.event_04009);
 
         Future.delayed(Duration(seconds: 3), () {
           Get.until((route) => Get.currentRoute == RoutePath.mainTab);

+ 5 - 2
lib/module/calendar/selected_preview/calendar_selected_preview_view.dart

@@ -130,7 +130,9 @@ class CalendarSelectedPreviewPage
                         onTap: () => controller.toggleGroupSelection(
                             controller.photoGroup.value.images),
                         child: Obx(() => Text(
-                              controller.photoGroup.value.isSelected.value
+                              controller.photoGroup.value.selectedPhotosIds
+                                          .length ==
+                                      controller.photoGroup.value.images.length
                                   ? 'Deselect All'
                                   : 'Select All',
                               style: TextStyle(
@@ -206,7 +208,8 @@ class CalendarSelectedPreviewPage
           onTap: () => controller.clickImage(index),
           child: Obx(() {
             final photoId = controller.photoGroup.value.images[index].id;
-            final isSelected = controller.photoGroup.value.selectedPhotosIds.contains(photoId);
+            final isSelected =
+                controller.photoGroup.value.selectedPhotosIds.contains(photoId);
             return Stack(
               children: [
                 Container(

+ 3 - 0
lib/module/contact/all/all_controller.dart

@@ -1,5 +1,7 @@
 import 'package:clean/base/base_controller.dart';
+import 'package:clean/data/consts/event_report_id.dart';
 import 'package:clean/data/repositories/user_repository.dart';
+import 'package:clean/handler/event_handler.dart';
 import 'package:clean/module/contact/contact_state.dart';
 import 'package:clean/module/store/store_view.dart';
 import 'package:clean/utils/toast_util.dart';
@@ -77,6 +79,7 @@ class AllController extends BaseController {
   }
 
   void deleteBtnClick() async{
+    EventHandler.report(EventId.event_08003);
     if (!userRepository.isVip()) {
       StorePage.start();
       return;

+ 4 - 0
lib/module/contact/backup/controller.dart

@@ -3,6 +3,7 @@ import 'dart:io';
 
 import 'package:clean/base/base_controller.dart';
 import 'package:clean/dialog/loading_dialog.dart';
+import 'package:clean/handler/event_handler.dart';
 import 'package:clean/utils/expand.dart';
 import 'package:clean/utils/toast_util.dart';
 import 'package:flutter/cupertino.dart';
@@ -14,6 +15,8 @@ import 'package:get/get_rx/src/rx_types/rx_types.dart';
 import 'package:path_provider/path_provider.dart';
 import 'package:wechat_camera_picker/wechat_camera_picker.dart';
 
+import '../../../data/consts/event_report_id.dart';
+
 class ContactBackUpController extends BaseController {
 
   // 是否为编辑状态
@@ -123,6 +126,7 @@ class ContactBackUpController extends BaseController {
 
   // 备份通讯录
   Future<void> backupContacts() async {
+    EventHandler.report(EventId.event_08012);
     LoadingDialog.show(displayTime: 100);
     try {
       if (!await FlutterContacts.requestPermission()) {

+ 6 - 0
lib/module/contact/contact_view.dart

@@ -1,4 +1,6 @@
 import 'package:clean/base/base_page.dart';
+import 'package:clean/data/consts/event_report_id.dart';
+import 'package:clean/handler/event_handler.dart';
 import 'package:clean/module/contact/contact_controller.dart';
 import 'package:clean/module/more/more_controller.dart';
 import 'package:clean/resource/assets.gen.dart';
@@ -89,6 +91,7 @@ class ContactPage extends BasePage<ContactController> {
                     height: 40.w,
                   ),
                   onTap: () {
+                    EventHandler.report(EventId.event_08001);
                     Get.toNamed(RoutePath.contactAll);
                   },
                 ),
@@ -99,6 +102,7 @@ class ContactPage extends BasePage<ContactController> {
                     height: 40.w,
                   ),
                   onTap: () {
+                    EventHandler.report(EventId.event_08004);
                     Get.toNamed(RoutePath.contactDuplicate);
                   },
                 ),
@@ -117,6 +121,7 @@ class ContactPage extends BasePage<ContactController> {
                     height: 40.w,
                   ),
                   onTap: () {
+                    EventHandler.report(EventId.event_08007);
                     Get.toNamed(RoutePath.contactIncomplete);
                   },
                 ),
@@ -127,6 +132,7 @@ class ContactPage extends BasePage<ContactController> {
                     height: 40.w,
                   ),
                   onTap: () {
+                    EventHandler.report(EventId.event_08010);
                     Get.toNamed(RoutePath.contactBackup);
                   },
                 ),

+ 4 - 0
lib/module/contact/duplicate/controller.dart

@@ -1,6 +1,7 @@
 import 'package:clean/base/base_controller.dart';
 import 'package:clean/data/repositories/user_repository.dart';
 import 'package:clean/dialog/loading_dialog.dart';
+import 'package:clean/handler/event_handler.dart';
 import 'package:clean/module/contact/contact_state.dart';
 import 'package:clean/module/store/store_view.dart';
 import 'package:clean/utils/toast_util.dart';
@@ -8,6 +9,8 @@ import 'package:flutter_contacts/contact.dart';
 import 'package:flutter_contacts/flutter_contacts.dart';
 import 'package:get/get_rx/src/rx_types/rx_types.dart';
 
+import '../../../data/consts/event_report_id.dart';
+
 class ContactDuplicateController extends BaseController {
   // 是否为编辑状态
   RxBool isEdit = false.obs;
@@ -170,6 +173,7 @@ class ContactDuplicateController extends BaseController {
 
     // 合并联系人
     Future<void> mergeBtnClick(List<Contact> contacts) async {
+    EventHandler.report(EventId.event_08006);
       if (!userRepository.isVip()) {
         StorePage.start();
         return;

+ 3 - 0
lib/module/contact/incomplete/controller.dart

@@ -1,5 +1,6 @@
 import 'package:clean/base/base_controller.dart';
 import 'package:clean/data/repositories/user_repository.dart';
+import 'package:clean/handler/event_handler.dart';
 import 'package:clean/module/contact/contact_state.dart';
 import 'package:clean/module/store/store_view.dart';
 import 'package:flutter/Material.dart';
@@ -9,6 +10,7 @@ import 'package:get/get.dart';
 
 import 'package:scrollable_positioned_list/scrollable_positioned_list.dart';
 
+import '../../../data/consts/event_report_id.dart';
 import '../../../dialog/loading_dialog.dart';
 import '../../../utils/toast_util.dart';
 
@@ -72,6 +74,7 @@ class ContactInCompleteController extends BaseController {
   }
 
   Future<void> deleteBtnClick() async {
+    EventHandler.report(EventId.event_08009);
     if (!userRepository.isVip()) {
       StorePage.start();
       return;

+ 18 - 0
lib/module/home/home_controller.dart

@@ -16,6 +16,8 @@ import 'package:permission_handler/permission_handler.dart';
 import 'package:wechat_assets_picker/wechat_assets_picker.dart';
 
 import '../../data/api/response/user_info_response.dart';
+import '../../data/consts/event_report_id.dart';
+import '../../handler/event_handler.dart';
 
 class HomeController extends BaseController {
   Rx<double> totalSpace = 0.0.obs;
@@ -88,6 +90,11 @@ class HomeController extends BaseController {
     setFirstIntoApp(false);
   }
 
+  @override
+  void onReady() {
+    super.onReady();
+    // EventHandler.report(EventId.event_03000);
+  }
   Future<void> loadPhotosFromDirectory() async {
     if (ImagePickerUtil.peoplePhotos.isEmpty ||
         ImagePickerUtil.similarPhotos.isEmpty ||
@@ -225,26 +232,37 @@ class HomeController extends BaseController {
 
   similarCleanClick() {
     print('similarCleanClick');
+    EventHandler.report(EventId.event_03001);
     _navigateAndStartPage(SimilarPhotoPage.start);
   }
 
   peopleCleanClick() {
     print('peopleCleanClick');
+    EventHandler.report(EventId.event_03002);
     _navigateAndStartPage(PeoplePhotoPage.start);
   }
 
   locationCleanClick() {
     print('locationCleanClick');
+    EventHandler.report(EventId.event_03003);
     _navigateAndStartPage(LocationsPhotoPage.start);
   }
 
   screenshotCleanClick() {
     print('screenshotCleanClick');
+    EventHandler.report(EventId.event_03004);
     _navigateAndStartPage(() => ScreenshotsPage.start("Screenshots"));
   }
 
   blurryCleanClick() {
     print('blurCleanClick');
+    EventHandler.report(EventId.event_03005);
     _navigateAndStartPage(() => ScreenshotsPage.start("Blurry"));
   }
+
+  titleVipClick() {
+    EventHandler.report(EventId.event_02000);
+    Get.toNamed(RoutePath.store);
+  }
+
 }

+ 1 - 3
lib/module/home/home_view.dart

@@ -71,9 +71,7 @@ class HomePage extends BaseView<HomeController> {
             ),
           ),
           GestureDetector(
-            onTap: () {
-              Get.toNamed(RoutePath.store);
-            },
+            onTap: controller.titleVipClick,
             child: Assets.images.iconHomeTitleVip
                 .image(width: 60.8.w, height: 20.h),
           ),

+ 4 - 0
lib/module/locations_photo/locations_photo_controller.dart

@@ -9,6 +9,9 @@ import 'package:path_provider/path_provider.dart';
 import 'package:path/path.dart' as p;
 import 'package:wechat_assets_picker/wechat_assets_picker.dart';
 
+import '../../data/consts/event_report_id.dart';
+import '../../handler/event_handler.dart';
+
 class LocationsPhotoController extends BaseController {
    final RxList<PhotoGroup> photoGroups = <PhotoGroup>[].obs;
 
@@ -44,6 +47,7 @@ class LocationsPhotoController extends BaseController {
   void onReady() {
     // TODO: implement onReady
     super.onReady();
+    EventHandler.report(EventId.event_03006);
     restoreSelections();
   }
   void clickPhotoGroup(PhotoGroup photoGroup) {

+ 9 - 0
lib/module/main/main_view.dart

@@ -1,3 +1,4 @@
+import 'package:clean/handler/event_handler.dart';
 import 'package:clean/module/calendar/calendar_view.dart';
 import 'package:clean/module/more/more_view.dart';
 import 'package:clean/utils/expand.dart';
@@ -5,6 +6,7 @@ import 'package:convex_bottom_bar/convex_bottom_bar.dart';
 import 'package:flutter_screenutil/flutter_screenutil.dart';
 
 import '../../base/base_page.dart';
+import '../../data/consts/event_report_id.dart';
 import '../../resource/assets.gen.dart';
 import '../../router/app_pages.dart';
 import '../home/home_view.dart';
@@ -71,6 +73,13 @@ class MainTabPage extends BasePage<MainController> {
         initialActiveIndex: controller.currentIndex,
         onTap: (int i) {
           if (controller.currentIndex != i) {
+            if (controller.currentIndex == 0) {
+             EventHandler.report(EventId.event_10000);
+            } else if (controller.currentIndex == 1) {
+              EventHandler.report(EventId.event_10001);
+            } else if (controller.currentIndex == 2) {
+              EventHandler.report(EventId.event_10002);
+            }
             controller.changeIndex(i);
           }
         },

+ 31 - 0
lib/module/more/more_controller.dart

@@ -1,5 +1,36 @@
 import 'package:clean/base/base_controller.dart';
+import 'package:get/get.dart';
+import '../../data/consts/event_report_id.dart';
+import '../../handler/event_handler.dart';
+import '../../router/app_pages.dart';
+import '../wallpaper/wallpaper_view.dart';
 
 class MoreController extends BaseController {
 
+  storeCardClick() {
+    EventHandler.report(EventId.event_02000);
+    Get.toNamed(RoutePath.store);
+  }
+  privacySpaceClick() {
+    EventHandler.report(EventId.event_05000);
+    Get.toNamed(RoutePath.privacy);
+  }
+  walletClick() {
+    EventHandler.report(EventId.event_06000);
+    WallPaperPage.start();
+  }
+  settingClick() {
+    EventHandler.report(EventId.event_07000);
+    Get.toNamed(RoutePath.setting);
+  }
+  contactClick() {
+    EventHandler.report(EventId.event_08000);
+    Get.toNamed(RoutePath.contact);
+  }
+  photoAnalysisClick() {
+    EventHandler.report(EventId.event_09000);
+    Get.toNamed(RoutePath.analysis);
+  }
+
+
 }

+ 9 - 13
lib/module/more/more_view.dart

@@ -13,7 +13,6 @@ import '../../resource/assets.gen.dart';
 class MorePage extends BaseView<MoreController> {
   const MorePage({super.key});
 
-
   @override
   Widget buildBody(BuildContext context) {
     return SafeArea(
@@ -59,7 +58,8 @@ class MorePage extends BaseView<MoreController> {
                         Assets.images.iconMorePrivacyBg.image(),
                         Assets.images.iconMorePrivacy
                             .image(height: 72.w, width: 72.w), onTap: () {
-                      Get.toNamed(RoutePath.privacy);
+                          controller.privacySpaceClick();
+
                     }),
                     SizedBox(height: 14.h),
                     _buildCustomCard(
@@ -68,7 +68,7 @@ class MorePage extends BaseView<MoreController> {
                       Assets.images.iconMoreContacts
                           .image(height: 72.w, width: 72.w),
                       onTap: () {
-                        Get.toNamed(RoutePath.contact);
+                      controller.contactClick();
                       },
                     ),
                     SizedBox(height: 14.h),
@@ -78,7 +78,7 @@ class MorePage extends BaseView<MoreController> {
                       Assets.images.iconMoreAnalysis
                           .image(height: 72.w, width: 72.w),
                       onTap: () {
-                        Get.toNamed(RoutePath.analysis);
+                        controller.photoAnalysisClick();
                       },
                     ),
                     SizedBox(height: 14.h),
@@ -86,10 +86,9 @@ class MorePage extends BaseView<MoreController> {
                         "Wallpaper",
                         Assets.images.iconMoreWallpaperBg.image(),
                         Assets.images.iconMoreWallpaper
-                            .image(height: 72.w, width: 72.w),
-                        onTap: () {
-                          WallPaperPage.start();
-                        }),
+                            .image(height: 72.w, width: 72.w), onTap: () {
+                    controller.walletClick();
+                    }),
                     SizedBox(height: 14.h),
                     _buildCustomCard(
                       "Settings",
@@ -97,10 +96,9 @@ class MorePage extends BaseView<MoreController> {
                       Assets.images.iconMoreSettings
                           .image(height: 72.w, width: 72.w),
                       onTap: () {
-                        Get.toNamed(RoutePath.setting);
+                       controller.settingClick();
                       },
                     ),
-
                     SizedBox(height: 25.h),
                   ],
                 ),
@@ -114,9 +112,7 @@ class MorePage extends BaseView<MoreController> {
 
   Widget _buildStoreCard() {
     return GestureDetector(
-      onTap: () {
-        Get.toNamed(RoutePath.store);
-      },
+      onTap: controller.storeCardClick,
       child: Stack(
         children: [
           Assets.images.iconMoreStoreCard.image(),

+ 15 - 0
lib/module/people_photo/people_photo_controller.dart

@@ -5,9 +5,14 @@ import 'package:clean/module/image_picker/image_picker_util.dart';
 import 'package:clean/module/people_photo/photo_group.dart';
 import 'package:clean/module/photo_preview/photo_preview_view.dart';
 import 'package:clean/utils/toast_util.dart';
+import 'package:flutter/Material.dart';
 import 'package:get/get.dart';
 import 'package:wechat_assets_picker/wechat_assets_picker.dart';
 
+import '../../data/consts/event_report_id.dart';
+import '../../handler/event_handler.dart';
+import '../photo_preview/phtoto_selected_preview_view.dart';
+
 class PeoplePhotoController extends BasePhotoController {
   @override
   void loadPhotos() {
@@ -37,5 +42,15 @@ class PeoplePhotoController extends BasePhotoController {
   void onReady() {
     // TODO: implement onReady
     super.onReady();
+    EventHandler.report(EventId.event_03006);
+  }
+  void clickJumpSelect() {
+    if (selectedPhotosIds.isEmpty) {
+      ToastUtil.show('请选择图片');
+      return;
+    }
+    debugPrint('PeoplePhotoController clickJumpSelected');
+    EventHandler.report(EventId.event_04005);
+    PhotoSelectedPreviewPage.start(PhotosType.peoplePhotos, selectedPhotosIds);
   }
 }

+ 64 - 59
lib/module/people_photo/people_photo_view.dart

@@ -124,71 +124,76 @@ class PeoplePhotoPage extends BasePage<PeoplePhotoController> {
   }
 
   Widget _bottomBarCard() {
-    return Container(
-      width: 360.w,
-      height: 81.h,
-      padding: EdgeInsets.symmetric(horizontal: 16.w),
-      decoration: ShapeDecoration(
-        color: Color(0xFF23232A),
-        shape: RoundedRectangleBorder(
-          side: BorderSide(
-              width: 1.w, color: Colors.white.withValues(alpha: 0.1)),
-          borderRadius: BorderRadius.only(
-            topLeft: Radius.circular(14.r),
-            topRight: Radius.circular(14.r),
+    return GestureDetector(
+      onTap: () {
+        controller.clickJumpSelect();
+      },
+      child: Container(
+        width: 360.w,
+        height: 81.h,
+        padding: EdgeInsets.symmetric(horizontal: 16.w),
+        decoration: ShapeDecoration(
+          color: Color(0xFF23232A),
+          shape: RoundedRectangleBorder(
+            side: BorderSide(
+                width: 1.w, color: Colors.white.withValues(alpha: 0.1)),
+            borderRadius: BorderRadius.only(
+              topLeft: Radius.circular(14.r),
+              topRight: Radius.circular(14.r),
+            ),
           ),
         ),
-      ),
-      child: Row(
-        mainAxisAlignment: MainAxisAlignment.spaceBetween,
-        children: [
-          Obx(() {
-            return Text(
-              '${controller.selectedFileCount.value} files selected (${controller.selectedFilesSizeString})',
-              textAlign: TextAlign.center,
-              style: TextStyle(
-                color: Colors.white.withOpacity(0.9),
-                fontSize: 13.sp,
-                fontWeight: FontWeight.w500,
-              ),
-            );
-          }),
-          GestureDetector(
-            onTap: () {
-              controller.clickDelete();
-            },
-            child:
-          Container(
-            width: 108.w,
-            height: 38.h,
-            decoration: ShapeDecoration(
-              color: Color(0xFF0279FB),
-              shape: RoundedRectangleBorder(
-                borderRadius: BorderRadius.circular(10.r),
-              ),
-            ),
-            child: Row(
-              mainAxisAlignment: MainAxisAlignment.spaceEvenly,
-              children: [
-                Text(
-                  'Delete',
-                  textAlign: TextAlign.center,
-                  style: TextStyle(
-                    color: Colors.white,
-                    fontSize: 16.sp,
-                    fontWeight: FontWeight.w500,
+        child: Row(
+          mainAxisAlignment: MainAxisAlignment.spaceBetween,
+          children: [
+            Obx(() {
+              return Text(
+                '${controller.selectedFileCount.value} files selected (${controller.selectedFilesSizeString})',
+                textAlign: TextAlign.center,
+                style: TextStyle(
+                  color: Colors.white.withOpacity(0.9),
+                  fontSize: 13.sp,
+                  fontWeight: FontWeight.w500,
+                ),
+              );
+            }),
+            GestureDetector(
+              onTap: () {
+                controller.clickDelete();
+              },
+              child:
+              Container(
+                width: 108.w,
+                height: 38.h,
+                decoration: ShapeDecoration(
+                  color: Color(0xFF0279FB),
+                  shape: RoundedRectangleBorder(
+                    borderRadius: BorderRadius.circular(10.r),
                   ),
                 ),
-                Assets.images.iconDelete.image(
-                  width: 18.w,
-                  height: 18.h,
+                child: Row(
+                  mainAxisAlignment: MainAxisAlignment.spaceEvenly,
+                  children: [
+                    Text(
+                      'Delete',
+                      textAlign: TextAlign.center,
+                      style: TextStyle(
+                        color: Colors.white,
+                        fontSize: 16.sp,
+                        fontWeight: FontWeight.w500,
+                      ),
+                    ),
+                    Assets.images.iconDelete.image(
+                      width: 18.w,
+                      height: 18.h,
+                    ),
+                  ],
                 ),
-              ],
+              ),
             ),
-          ),
-          ),
-        ],
-      ),
+          ],
+        ),
+      )
     );
   }
 

+ 20 - 0
lib/module/photo_info/photo_info_controller.dart

@@ -13,6 +13,8 @@ import 'package:get/get.dart';
 import 'package:wechat_assets_picker/wechat_assets_picker.dart';
 
 import '../../base/base_controller.dart';
+import '../../data/consts/event_report_id.dart';
+import '../../handler/event_handler.dart';
 import '../../model/asset_info.dart';
 
 class PhotoInfoController extends BaseController {
@@ -98,6 +100,18 @@ class PhotoInfoController extends BaseController {
   }
 
 
+  @override
+  void onReady() {
+
+    super.onReady();
+    if(type.value == FileType.analysis) {
+      EventHandler.report(EventId.event_09002);
+    }
+    if(type.value == FileType.privacy) {
+      EventHandler.report(EventId.event_05003);
+    }
+  }
+
   // 切换到下一张图片
   void nextImage() {
     if (currentImageIndex.value < imageList.length - 1) {
@@ -115,6 +129,12 @@ class PhotoInfoController extends BaseController {
   }
 
   void deleteBtnClick(AssetInfo asset, int index) {
+    if (type.value == FileType.analysis) {
+      EventHandler.report(EventId.event_09003);
+    }
+    if (type.value == FileType.privacy) {
+      EventHandler.report(EventId.event_05004);
+    }
     showCupertinoModalPopup(
       context: Get.context!,
       builder: (context) {

+ 13 - 2
lib/module/photo_preview/photo_preview_controller.dart

@@ -26,7 +26,9 @@ import 'package:lottie/lottie.dart';
 
 import 'package:wechat_assets_picker/wechat_assets_picker.dart';
 
+import '../../data/consts/event_report_id.dart';
 import '../../dialog/play_video_dialog.dart';
+import '../../handler/event_handler.dart';
 import '../../utils/file_size_calculator_util.dart';
 
 class PhotoPreviewController extends BaseController
@@ -76,6 +78,7 @@ class PhotoPreviewController extends BaseController
         //   延迟一秒
         Future.delayed(Duration(seconds: 1), () {
           animationIsComplete.value = true;
+          EventHandler.report(EventId.event_04008);
         });
       }
       if (status == AnimationStatus.completed) {
@@ -90,11 +93,12 @@ class PhotoPreviewController extends BaseController
   void onReady() {
     // TODO: implement onReady
     super.onReady();
-
+    EventHandler.report(EventId.event_04002);
     print('PhotoPreviewController onReady');
     if (isFirstOpenPhotoPreview()) {
       photoPreviewTipDialog(clickCallback: () {
         setFirstOpenPhotoPreview(false);
+        EventHandler.report(EventId.event_04001);
       });
     }
   }
@@ -207,6 +211,7 @@ class PhotoPreviewController extends BaseController
 
 
 
+
   void updateSelections(Set<String> selectedIds) {
     print(
         'PhotoPreviewController updateSelections photosType $photosType selectedIds $selectedIds');
@@ -241,10 +246,16 @@ class PhotoPreviewController extends BaseController
   }
 
   void clickBack() {
+    EventHandler.report(EventId.event_04003);
     _saveSelectedPhotos(photosType);
     Get.back();
   }
 
+  void clickJumpSelected() {
+    debugPrint('PhotoPreviewController clickJumpSelected');
+    EventHandler.report(EventId.event_04005);
+    PhotoSelectedPreviewPage.start(photosType, selectedPhotosIds);
+  }
   // // 保存选择的图片ID列表
   void _saveSelectedPhotos(PhotosType type) {
     switch (type) {
@@ -354,7 +365,7 @@ class PhotoPreviewController extends BaseController
 
   clickDelete() async {
     print('clickDelete');
-
+    EventHandler.report(EventId.event_04004);
     if (userRepository.isVip()) {
       switch (photosType) {
         case PhotosType.peoplePhotos:

+ 60 - 57
lib/module/photo_preview/photo_preview_view.dart

@@ -258,67 +258,70 @@ class PhotoPreviewPage extends BasePage<PhotoPreviewController> {
   }
 
   Widget _bottomBarCard() {
-    return Container(
-      width: 360.w,
-      height: 81.h,
-      padding: EdgeInsets.symmetric(horizontal: 16.w),
-      decoration: ShapeDecoration(
-        color: Color(0xFF23232A),
-        shape: RoundedRectangleBorder(
-          side: BorderSide(
-              width: 1.w, color: Colors.white.withValues(alpha: 0.1)),
-          borderRadius: BorderRadius.only(
-            topLeft: Radius.circular(14.r),
-            topRight: Radius.circular(14.r),
+    return GestureDetector(
+      onTap: controller.clickJumpSelected,
+      child: Container(
+        width: 360.w,
+        height: 81.h,
+        padding: EdgeInsets.symmetric(horizontal: 16.w),
+        decoration: ShapeDecoration(
+          color: Color(0xFF23232A),
+          shape: RoundedRectangleBorder(
+            side: BorderSide(
+                width: 1.w, color: Colors.white.withValues(alpha: 0.1)),
+            borderRadius: BorderRadius.only(
+              topLeft: Radius.circular(14.r),
+              topRight: Radius.circular(14.r),
+            ),
           ),
         ),
-      ),
-      child: Row(
-        mainAxisAlignment: MainAxisAlignment.spaceBetween,
-        children: [
-          Obx(() {
-            return Text(
-              '${controller.selectedFileCount.value} files selected (${controller.selectedFilesSizeString} )',
-              textAlign: TextAlign.center,
-              style: TextStyle(
-                color: Colors.white.withValues(alpha: 0.9),
-                fontSize: 13.sp,
-                fontWeight: FontWeight.w500,
-              ),
-            );
-          }),
-          GestureDetector(
-              onTap: controller.clickDelete,
-              child: Container(
-                width: 108.w,
-                height: 38.h,
-                decoration: ShapeDecoration(
-                  color: Color(0xFF0279FB),
-                  shape: RoundedRectangleBorder(
-                    borderRadius: BorderRadius.circular(10.r),
-                  ),
+        child: Row(
+          mainAxisAlignment: MainAxisAlignment.spaceBetween,
+          children: [
+            Obx(() {
+              return Text(
+                '${controller.selectedFileCount.value} files selected (${controller.selectedFilesSizeString} )',
+                textAlign: TextAlign.center,
+                style: TextStyle(
+                  color: Colors.white.withValues(alpha: 0.9),
+                  fontSize: 13.sp,
+                  fontWeight: FontWeight.w500,
                 ),
-                child: Row(
-                  mainAxisAlignment: MainAxisAlignment.spaceEvenly,
-                  children: [
-                    Text(
-                      'Delete',
-                      textAlign: TextAlign.center,
-                      style: TextStyle(
-                        color: Colors.white,
-                        fontSize: 16.sp,
-                        fontWeight: FontWeight.w500,
-                      ),
-                    ),
-                    Assets.images.iconDelete.image(
-                      width: 18.w,
-                      height: 18.h,
+              );
+            }),
+            GestureDetector(
+                onTap: controller.clickDelete,
+                child: Container(
+                  width: 108.w,
+                  height: 38.h,
+                  decoration: ShapeDecoration(
+                    color: Color(0xFF0279FB),
+                    shape: RoundedRectangleBorder(
+                      borderRadius: BorderRadius.circular(10.r),
                     ),
-                  ],
-                ),
-              )),
-        ],
-      ),
+                  ),
+                  child: Row(
+                    mainAxisAlignment: MainAxisAlignment.spaceEvenly,
+                    children: [
+                      Text(
+                        'Delete',
+                        textAlign: TextAlign.center,
+                        style: TextStyle(
+                          color: Colors.white,
+                          fontSize: 16.sp,
+                          fontWeight: FontWeight.w500,
+                        ),
+                      ),
+                      Assets.images.iconDelete.image(
+                        width: 18.w,
+                        height: 18.h,
+                      ),
+                    ],
+                  ),
+                )),
+          ],
+        ),
+      )
     );
   }
 

+ 20 - 3
lib/module/photo_preview/photo_selected_preview_controller.dart

@@ -4,6 +4,7 @@ import 'package:clean/data/bean/photos_type.dart';
 import 'package:clean/data/repositories/user_repository.dart';
 import 'package:clean/dialog/photo_delete_finish_dialog.dart';
 import 'package:clean/dialog/photo_deleting_dialog.dart';
+import 'package:clean/handler/event_handler.dart';
 import 'package:clean/module/image_picker/image_picker_util.dart';
 import 'package:clean/module/people_photo/photo_group.dart';
 import 'package:clean/module/photo_preview/photo_preview_controller.dart';
@@ -15,10 +16,13 @@ import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
 import 'package:get/get.dart';
 import 'package:wechat_assets_picker/wechat_assets_picker.dart';
 
+import '../../data/consts/event_report_id.dart';
+import '../people_photo/people_photo_controller.dart';
+import '../similar_photo/similar_photo_controller.dart';
+
 class PhotoSelectedPreviewController extends BasePhotoController {
   late PhotosType photosType;
 
-
   final RxBool isKeepAll = false.obs;
   final RxList<AssetEntity> selectedPhotos = <AssetEntity>[].obs;
   PhotoPreviewController photoPreviewController =
@@ -56,8 +60,20 @@ class PhotoSelectedPreviewController extends BasePhotoController {
   }
 
   void clickBack() {
+    EventHandler.report(EventId.event_04007);
     print('PhotoSelectedPreviewController clickBack');
     photoPreviewController.updateSelections(selectedPhotosIds);
+    if (photosType == PhotosType.peoplePhotos) {
+      print(
+          'PhotoSelectedPreviewController clickBack selectedPhotosIds $selectedPhotosIds');
+      PeoplePhotoController controller = Get.find<PeoplePhotoController>();
+      controller.updateSelections(selectedPhotosIds);
+      controller.restoreSelections();
+    } else if (photosType == PhotosType.similarPhotos) {
+      SimilarPhotoController controller = Get.find<SimilarPhotoController>();
+      controller.updateSelections(selectedPhotosIds);
+      controller.restoreSelections();
+    }
 
     Get.back();
   }
@@ -69,6 +85,7 @@ class PhotoSelectedPreviewController extends BasePhotoController {
 
   @override
   void clickDelete() async {
+    EventHandler.report(EventId.event_04006);
     if (userRepository.isVip()) {
       if (selectedPhotosIds.isNotEmpty) {
         photoDeletingDialog();
@@ -117,10 +134,10 @@ class PhotoSelectedPreviewController extends BasePhotoController {
           ToastUtil.show("Delete failed");
         }
       } else {
+        EventHandler.report(EventId.event_04009);
         isKeepAll.value = true;
-
         Future.delayed(Duration(seconds: 3), () {
-          Get.until((route) => Get. currentRoute ==RoutePath.mainTab);
+          Get.until((route) => Get.currentRoute == RoutePath.mainTab);
         });
       }
     } else {

+ 5 - 0
lib/module/privacy/privacy_controller.dart

@@ -2,6 +2,7 @@ import 'dart:ffi';
 import 'dart:math';
 
 import 'package:clean/base/base_controller.dart';
+import 'package:clean/handler/event_handler.dart';
 import 'package:clean/model/asset_info.dart';
 import 'package:clean/module/privacy/privacy_state.dart';
 import 'package:clean/utils/expand.dart';
@@ -16,6 +17,7 @@ import 'package:permission_handler/permission_handler.dart';
 import 'package:wechat_assets_picker/wechat_assets_picker.dart';
 import 'package:wechat_camera_picker/wechat_camera_picker.dart';
 
+import '../../data/consts/event_report_id.dart';
 import '../../dialog/photo_uploading_dialog.dart';
 import '../../utils/toast_util.dart';
 import '../image_picker/image_picker_assets.dart';
@@ -179,6 +181,7 @@ class PrivacyController extends BaseController {
       if (isPrivacyExistPasswd.value) {
         String? password = KVUtil.getString(privacyPasswd, "");
         if (passwordStr.value == password) {
+          EventHandler.report(EventId.event_05002);
           isUnlock.value = true;
           passwordStr.value = "";
         } else {
@@ -197,6 +200,7 @@ class PrivacyController extends BaseController {
               passwordStr.value = "";
             });
           } else {
+            EventHandler.report(EventId.event_05002);
             isUnlock.value = true;
             KVUtil.putString(privacyPasswd, passwordStr.value);
             KVUtil.putBool(isExistPasswd, true);
@@ -249,6 +253,7 @@ class PrivacyController extends BaseController {
 
 // 上传按钮点击
   void uploadBtnClick() {
+    EventHandler.report(EventId.event_05002);
     showCupertinoModalPopup(
       context: Get.context!,
       builder: (context) {

+ 8 - 0
lib/module/screenshots_blurry/screenshots_controller.dart

@@ -8,6 +8,9 @@ import 'package:clean/utils/toast_util.dart';
 import 'package:get/get.dart';
 import 'package:wechat_assets_picker/wechat_assets_picker.dart';
 
+import '../../data/consts/event_report_id.dart';
+import '../../handler/event_handler.dart';
+
 class ScreenShotsController extends BasePhotoController {
   late String titleName;
 
@@ -32,7 +35,12 @@ class ScreenShotsController extends BasePhotoController {
     }
 
   }
+@override
+  void onReady() {
 
+    super.onReady();
+    EventHandler.report(EventId.event_03006);
+  }
 
   @override
   void loadPhotos() {

+ 1 - 0
lib/module/setting/setting_controller.dart

@@ -7,4 +7,5 @@ class SettingController extends BaseController {
     // TODO: implement onInit
     super.onInit();
   }
+
 }

+ 21 - 1
lib/module/similar_photo/similar_photo_controller.dart

@@ -6,16 +6,21 @@ import 'package:clean/data/bean/photos_type.dart';
 import 'package:clean/data/repositories/user_repository.dart';
 import 'package:clean/dialog/photo_delete_finish_dialog.dart';
 import 'package:clean/dialog/photo_deleting_dialog.dart';
+import 'package:clean/handler/event_handler.dart';
 import 'package:clean/module/image_picker/image_picker_util.dart';
 import 'package:clean/module/people_photo/photo_group.dart';
 import 'package:clean/module/photo_preview/photo_preview_view.dart';
 import 'package:clean/module/store/store_view.dart';
 import 'package:clean/utils/toast_util.dart';
+import 'package:flutter/Material.dart';
 import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
 import 'package:get/get.dart';
 
 import 'package:wechat_assets_picker/wechat_assets_picker.dart';
 
+import '../../data/consts/event_report_id.dart';
+import '../photo_preview/phtoto_selected_preview_view.dart';
+
 class SimilarPhotoController extends BasePhotoController {
   @override
   void loadPhotos() {
@@ -41,6 +46,7 @@ class SimilarPhotoController extends BasePhotoController {
 
   // 点击删除单组选中的图片
   void clickSingleGroupDelete(List<AssetEntity> images) async {
+    EventHandler.report(EventId.event_03007);
     if (userRepository.isVip()) {
       // 获取指定组
       final group = getGroupByImages(images);
@@ -114,7 +120,21 @@ class SimilarPhotoController extends BasePhotoController {
       StorePage.start();
     }
   }
-
+  void clickJumpSelect() {
+    if (selectedPhotosIds.isEmpty) {
+      ToastUtil.show('请选择图片');
+      return;
+    }
+    debugPrint('SimilarPhotoController clickJumpSelected');
+    EventHandler.report(EventId.event_04005);
+    PhotoSelectedPreviewPage.start(PhotosType.similarPhotos, selectedPhotosIds);
+  }
+  @override
+  void onReady() {
+    // TODO: implement onReady
+    super.onReady();
+    EventHandler.report(EventId.event_03006);
+  }
   @override
   PhotosType getPhotosType() => PhotosType.similarPhotos;
 }

+ 4 - 2
lib/module/similar_photo/similar_photo_view.dart

@@ -104,7 +104,9 @@ class SimilarPhotoPage extends BasePage<SimilarPhotoController> {
   }
 
   Widget _bottomBarCard() {
-    return Container(
+    return GestureDetector(
+        onTap:controller.clickJumpSelect,
+        child: Container(
       width: 360.w,
       height: 81.h,
       padding: EdgeInsets.symmetric(horizontal: 16.w),
@@ -165,7 +167,7 @@ class SimilarPhotoPage extends BasePage<SimilarPhotoController> {
           )
         ],
       ),
-    );
+    ));
   }
 
   Widget _buildPhotoGroup({

+ 6 - 0
lib/module/splash/intro/intro_controller.dart

@@ -8,6 +8,9 @@ import 'package:clean/router/app_pages.dart';
 import 'package:flutter/Material.dart';
 import 'package:get/get.dart';
 
+import '../../../data/consts/event_report_id.dart';
+import '../../../handler/event_handler.dart';
+
 class IntroController extends BaseController {
   Rx<PageController> pageController = PageController().obs;
   var currentPage = 0.obs;
@@ -28,6 +31,7 @@ class IntroController extends BaseController {
   @override
   void onReady() {
     super.onReady();
+    EventHandler.report(EventId.event_01003);
     _autoPageTimer = Timer.periodic(const Duration(seconds: 3), (timer) {
       swiperIntro();
     });
@@ -49,6 +53,7 @@ class IntroController extends BaseController {
       });
     } else {
       // 跳转到下一页
+      EventHandler.report(EventId.event_01005);
       pageController.value.nextPage(
         duration: const Duration(milliseconds: 500),
         curve: Curves.easeInOut,
@@ -58,6 +63,7 @@ class IntroController extends BaseController {
   }
 
   void clickContinue() {
+    EventHandler.report(EventId.event_01004);
     Timer(const Duration(milliseconds: 500), () {
       MainTabPage.start();
       setFirstIntro(false);

+ 8 - 0
lib/module/splash/splash_controller.dart

@@ -9,6 +9,9 @@ import 'package:clean/module/splash/intro/intro_view.dart';
 import 'package:flutter/Material.dart';
 import 'package:get/get.dart';
 
+import '../../data/consts/event_report_id.dart';
+import '../../handler/event_handler.dart';
+
 class SplashController extends BaseController {
   Animation<double>? animation;
 
@@ -21,15 +24,20 @@ class SplashController extends BaseController {
   void onReady() {
     print('SplashController onReady');
     super.onReady();
+
     final isAgreePrivacy = isAgreePrivacyPolicy();
     if (isAgreePrivacy) {
+
       onAgreePrivacy();
+      EventHandler.report(EventId.event_01000);
     } else {
       Future.delayed(const Duration(seconds: 2), () {
         privacyDialog(
           onAgree: () {
             setPrivacyPolicy(true);
+
             onAgreePrivacy();
+            EventHandler.report(EventId.event_01002);
           },
           onDisagree: () {
             setPrivacyPolicy(false);

+ 14 - 0
lib/module/store/discount/discount_controller.dart

@@ -13,6 +13,9 @@ import 'package:clean/utils/error_handler.dart';
 import 'package:clean/utils/toast_util.dart';
 import 'package:get/get.dart';
 
+import '../../../data/consts/event_report_id.dart';
+import '../../../handler/event_handler.dart';
+
 class DiscountController extends BaseController implements PaymentStatusCallback {
 
   final RxList<StoreItem> storeItems = <StoreItem>[].obs;
@@ -31,6 +34,13 @@ class DiscountController extends BaseController implements PaymentStatusCallback
     initStoreIndexData();
   }
 
+  @override
+  void onReady() {
+    // TODO: implement onReady
+    super.onReady();
+    EventHandler.report(EventId.event_02005);
+  }
+
   void initStoreIndexData() {
     LoadingDialog.show();
     storeRepository.storeIndex().then((indexData) async {
@@ -59,6 +69,7 @@ class DiscountController extends BaseController implements PaymentStatusCallback
 
   void onBuyClick() async {
 
+    EventHandler.report(EventId.event_02006);
     StoreItem? storeItem = currentSelectedStoreItem.value;
     if (storeItem == null) {
       // ToastUtil.showToast(StringName.storeChoiceGoods.tr);
@@ -106,6 +117,8 @@ class DiscountController extends BaseController implements PaymentStatusCallback
     }
   }
 
+
+
   void checkPaymentStatus(
       String orderNo, PaymentWay paymentWay, StoreItem storeItemBean,
       {String? receiptData}) {
@@ -123,6 +136,7 @@ class DiscountController extends BaseController implements PaymentStatusCallback
     Future.delayed(Duration(seconds: 3), () {
       userRepository.getUserInfo();
     });
+
     Get.back();
   }
 

+ 2 - 1
lib/module/store/payment_status_manager.dart

@@ -4,6 +4,7 @@ import 'package:synchronized/synchronized.dart';
 import '../../data/bean/payment_way.dart';
 import '../../data/bean/store_item.dart';
 import '../../data/repositories/store_repository.dart';
+import '../../handler/event_handler.dart';
 import '../../utils/async_util.dart';
 
 class PaymentStatusManager {
@@ -75,7 +76,7 @@ class PaymentStatusManager {
 
   void reportPaySuccess(
       int price, String orderId, String itemName, int paymentWay) {
-    // EventHandler.reportPay(price, orderId, itemName, paymentWay);
+    EventHandler.reportPay(price, orderId, itemName, paymentWay);
   }
 
   void checkPaymentStatus(

+ 15 - 0
lib/module/store/store_controller.dart

@@ -15,8 +15,10 @@ import '../../data/api/response/order_pay_response.dart';
 import '../../data/bean/payment_way.dart';
 import '../../data/bean/store_item.dart';
 import '../../data/consts/constants.dart';
+import '../../data/consts/event_report_id.dart';
 import '../../data/repositories/store_repository.dart';
 import '../../dialog/loading_dialog.dart';
+import '../../handler/event_handler.dart';
 import '../../sdk/pay/agile_pay.dart';
 import '../../sdk/pay/applepay/apple_pay_info.dart';
 import '../../sdk/pay/assist/product_type.dart';
@@ -43,6 +45,12 @@ class StoreController extends BaseController implements PaymentStatusCallback {
   }
 
   @override
+  void onReady() {
+    EventHandler.report(EventId.event_02001);
+    super.onReady();
+
+  }
+  @override
   void onClose() {
     // TODO: implement onClose
     super.onClose();
@@ -52,6 +60,7 @@ class StoreController extends BaseController implements PaymentStatusCallback {
     }
   }
 
+
   void initStoreIndexData() {
     LoadingDialog.show();
     storeRepository.storeIndex().then((indexData) async {
@@ -78,6 +87,7 @@ class StoreController extends BaseController implements PaymentStatusCallback {
   }
 
   Future<void> onRestoreClick() async {
+    EventHandler.report(EventId.event_02004);
     PaymentWay? paymentWay = currentSelectedPaymentWay.value;
     if (paymentWay == null) {
       // ToastUtil.showToast(StringName.storeChoicePayment.tr);
@@ -108,6 +118,7 @@ class StoreController extends BaseController implements PaymentStatusCallback {
 
   void onBuyClick() async {
 
+    EventHandler.report(EventId.event_02002);
     StoreItem? storeItem = currentSelectedStoreItem.value;
     if (storeItem == null) {
       // ToastUtil.showToast(StringName.storeChoiceGoods.tr);
@@ -156,6 +167,10 @@ class StoreController extends BaseController implements PaymentStatusCallback {
     }
   }
 
+  void closeBackClick(){
+    EventHandler.report(EventId.event_02003);
+    Get.back();
+  }
   // 检查恢复订阅结果
   Future<void> checkRestoreStatus(String? receiptData) async {
     PaymentWay? paymentWay = currentSelectedPaymentWay.value;

+ 1 - 1
lib/module/store/store_view.dart

@@ -50,7 +50,7 @@ class StorePage extends BasePage<StoreController> {
                       margin: EdgeInsets.only(left: 16.w, top: 14.h),
                       child: GestureDetector(
                         onTap: () {
-                          Get.back();
+                          controller.closeBackClick();
                         },
                         child: Assets.images.iconStoreClose
                             .image(width: 28.w, height: 28.w),

+ 5 - 0
lib/module/wallpaper/wallpaper_controller.dart

@@ -3,9 +3,12 @@ import 'package:clean/data/api/response/wallpaper_list_response.dart';
 import 'package:clean/data/bean/wallpapers_bean.dart';
 import 'package:clean/data/repositories/wallpaper_repositories.dart';
 import 'package:clean/dialog/wallpaper_detail_dialog.dart';
+import 'package:clean/handler/event_handler.dart';
 import 'package:clean/router/app_pages.dart';
 import 'package:get/get.dart';
 
+import '../../data/consts/event_report_id.dart';
+
 class WallPaperController extends BaseController {
   RxList<WallpapersBean> get wallpapersList =>
       wallpaperRepository.wallpapersList;
@@ -18,7 +21,9 @@ class WallPaperController extends BaseController {
 
   @override
   void onReady() {
+
     super.onReady();
+    EventHandler.report(EventId.event_06001);
   }
 
   @override

+ 2 - 1
lib/router/app_pages.dart

@@ -20,6 +20,7 @@ import 'package:clean/module/locations_photo/locations_photo_view.dart';
 import 'package:clean/module/locations_photo/locations_single_photo_controller.dart';
 import 'package:clean/module/locations_photo/locations_single_photo_view.dart';
 import 'package:clean/module/main/main_view.dart';
+import 'package:clean/module/more/more_controller.dart';
 import 'package:clean/module/photo_preview/photo_preview_controller.dart';
 import 'package:clean/module/photo_preview/photo_preview_view.dart';
 import 'package:clean/module/photo_info/photo_info_controller.dart';
@@ -97,13 +98,13 @@ class AppBinding extends Bindings {
     lazyPut(() => BrowserController());
     lazyPut(() => MainController());
     lazyPut(() => HomeController());
+    lazyPut(()=>MoreController());
     lazyPut(() => PrivacyController());
     lazyPut(() => PeoplePhotoController());
     lazyPut(() => SimilarPhotoController());
     lazyPut(() => LocationsPhotoController());
     lazyPut(() => ScreenShotsController());
     lazyPut(() => PhotoPreviewController());
-
     lazyPut(() => PhotoInfoController());
     lazyPut(() => StoreController());
     lazyPut(() => DiscountController());

+ 32 - 0
lib/sdk/umeng/umeng_helper.dart

@@ -0,0 +1,32 @@
+import 'dart:io';
+
+import 'package:atmob_channel_reader/atmob_channel_reader.dart';
+import 'package:umeng_common_sdk/umeng_common_sdk.dart';
+
+import '../../data/consts/build_config.dart';
+import '../../data/consts/constants.dart';
+import '../../utils/mmkv_util.dart';
+
+class UmengHelper {
+  UmengHelper._();
+
+  static Future<void> initCommon() async {
+    // if (BuildConfig.isDebug) {
+    //   return;
+    // }
+
+    if (Platform.isIOS) {
+      UmengCommonSdk.initCommon(UmengConfig.umengAndroidAppKey,
+          UmengConfig.umengIosAppKey, "AppStore");
+    } else {
+      String? channel = KVUtil.getString(
+          Constants.appChanelName, await AtmobChannelReader.getChannel());
+      UmengCommonSdk.initCommon(UmengConfig.umengAndroidAppKey,
+          UmengConfig.umengIosAppKey, channel ?? "android");
+    }
+  }
+
+  static void onEvent(String event, Map<String, dynamic> properties) {
+    UmengCommonSdk.onEvent(event, properties);
+  }
+}

+ 2 - 2
lib/utils/file_size_calculator_util.dart

@@ -90,11 +90,11 @@ class FileSizeCalculatorUtil {
       final String? path = entity.relativePath;
       if (path == null) return 0;
       final file = File("/storage/emulated/0/$path${entity.title}");
-      print("file path: ${await file.path}");
+      // print("file path: ${await file.path}");
       if (!await file.exists()) {
         return 0;
       }
-      print("file size: ${await file.length()}");
+      // print("file size: ${await file.length()}");
       final double size = (await file.length()) / 1024;
       fileSizeCache[assetId] = size;
       return size;

+ 10 - 0
pubspec.yaml

@@ -123,6 +123,16 @@ dependencies:
   # 实现点击跳转列表
   scrollable_positioned_list: ^0.3.8
 
+  #友盟
+  umeng_common_sdk: ^1.2.8
+  #渠道包信息
+  atmob_channel_reader:
+    version: ^0.0.2
+    hosted:
+      name: atmob_channel_reader
+      url: http://pub.v8dashen.com/
+
+
   # 照片
   classify_photo:
     path: plugins/classify_photo