Browse Source

[feat]新增部分埋点,修改TabBean

云天逵 1 year ago
parent
commit
90f3437b40

+ 3 - 3
lib/base/base_controller.dart

@@ -7,20 +7,20 @@ class BaseController extends GetxController {
 
   @override
   void onInit() {
-    debugPrint('BaseController $runtimeType onInit');
+    debugPrint('BaseController $runtimeType onInit $hashCode');
     super.onInit();
     _initParameters();
   }
 
   @override
   void onReady() {
-    debugPrint('BaseController $runtimeType onReady');
+    debugPrint('BaseController $runtimeType onReady $hashCode');
     super.onReady();
   }
 
   @override
   void onClose() {
-    debugPrint('BaseController $runtimeType onClose');
+    debugPrint('BaseController $runtimeType onClose $hashCode');
     super.onClose();
   }
   void _initParameters() {

+ 269 - 0
lib/data/consts/event_report.dart

@@ -0,0 +1,269 @@
+abstract class EventId {
+
+  static const String type = 'type';
+
+//  首页-展示	za_00001
+  static const String event_00001 = 'za_00001'; //首页-展示
+//  引导页-展示	za_01000
+  static const String event_01000 = 'za_01000'; //引导页-展示
+//  引导页-点击【定制恋爱键盘】	za_01001
+  static const String event_01001 = 'za_01001'; //引导页-点击【定制恋爱键盘】
+//  引导页-点击【去登录】	za_01002
+  static const String event_01002 = 'za_01002'; //引导页-点击【去登录】
+//  性别选择-展示	za_01003
+  static const String event_01003 = 'za_01003'; //性别选择-展示
+//  性别选择-点击【男】	za_01004
+  static const String event_01004 = 'za_01004'; //性别选择-点击【男】
+//  性别选择-点击【女】	za_01005
+  static const String event_01005 = 'za_01005'; //性别选择-点击【女】
+//  性别选择-点击【下一步】	za_01006
+  static const String event_01006 = 'za_01006'; //性别选择-点击【下一步】
+//  生日选择-展示	za_01007
+  static const String event_01007 = 'za_01007'; //生日选择-展示
+//  生日选择-点击【下一步】	za_01008
+  static const String event_01008 = 'za_01008'; //生日选择-点击【下一步】
+//  填写昵称-展示	za_01009
+  static const String event_01009 = 'za_01009'; //填写昵称-展示
+//  填写昵称-点击【下一步】	za_01010
+  static const String event_01010 = 'za_01010'; //填写昵称-点击【下一步】
+//  当前阶段-展示	za_01011
+  static const String event_01011 = 'za_01011'; //当前阶段-展示
+//  当前阶段-点击【下一步】	za_01012
+  static const String event_01012 = 'za_01012'; //当前阶段-点击【下一步】
+//  完善对方信息-点击【立即生成】	za_01013
+  static const String event_01013 = 'za_01013'; //完善对方信息-点击【立即生成】
+//  完善对方信息-点击【使用通用模式】	za_01014
+  static const String event_01014 = 'za_01014'; //完善对方信息-点击【使用通用模式】
+//  新人设置-点击【跳过】	za_01015
+  static const String event_01015 = 'za_01015'; //新人设置-点击【跳过】
+
+//  会员活动页-展示	za_02000
+  static const String event_02000 = 'za_02000'; //会员活动页-展示
+//  会员活动页-点击【立即解锁】	za_02001
+  static const String event_02001 = 'za_02001'; //会员活动页-点击【立即解锁】
+//  会员活动页-点击【返回】	za_02002
+  static const String event_02002 = 'za_02002'; //会员活动页-点击【返回】
+
+//  会员页-展示	za_02003
+  static const String event_02003 = 'za_02003'; //会员页-展示
+//  会员页-点击【立即支付】	za_02004
+  static const String event_02004 = 'za_02004'; //会员页-点击【立即支付】
+//  会员页-点击【返回】	za_02005
+  static const String event_02005 = 'za_02005'; //会员页-点击【返回】
+
+//  折扣券弹窗-展示	za_02006
+  static const String event_02006 = 'za_02006'; //折扣券弹窗-展示
+//  折扣券弹窗-点击【领取】	za_02007
+  static const String event_02007 = 'za_02007'; //折扣券弹窗-点击【领取】
+//  折扣券弹窗-点击【关闭】	za_02008
+  static const String event_02008 = 'za_02008'; //折扣券弹窗-点击【关闭】
+//
+//  新人特惠弹窗-展示	za_02009
+  static const String event_02009 = 'za_02009'; //新人特惠弹窗-展示
+//  新人特惠弹窗-点击【解锁】	za_02010
+  static const String event_02010 = 'za_02010'; //新人特惠弹窗-点击【解锁】
+//  新人特惠弹窗-点击【关闭】	za_02011
+  static const String event_02011 = 'za_02011'; //新人特惠弹窗-点击【关闭】
+//
+//  输入法开启-展示	za_03000
+  static const String event_03000 = 'za_03000'; //输入法开启-展示
+//  输入法开启-点击【启用键盘】	za_03001
+  static const String event_03001 = 'za_03001'; //输入法开启-点击【启用键盘】
+//  输入法开启-点击【开启悬浮窗】	za_03002
+  static const String event_03002 = 'za_03002'; //输入法开启-点击【开启悬浮窗】
+//  点击【悬浮窗】	za_03003
+///  原生加
+  static const String event_03003 = 'za_03003'; //点击【悬浮窗】
+
+//  复制指引-展示	za_03004
+  static const String event_03004 = 'za_03004'; //复制指引-展示
+//  复制指引-点击【复制】	za_03005
+  static const String event_03005 = 'za_03005'; //复制指引-点击【复制】
+//  点击人设指引-展示	za_03006
+//   原生加
+  static const String event_03006 = 'za_03006'; //点击人设指引-展示
+//  点击【去微信体验】	za_03007
+  static const String event_03007 = 'za_03007'; //点击【去微信体验】
+//
+//  登录弹窗-展示	za_04000
+  static const String event_04000 = 'za_04000'; //登录弹窗-展示
+//  登录-点击【微信登录】	za_04001
+  static const String event_04001 = 'za_04001'; //登录-点击【微信登录】
+//  登录-点击【手机号登录】	za_04002
+  static const String event_04002 = 'za_04002'; //登录-点击【手机号登录】
+//  登录状态-成功	za_04003
+  static const String event_04003 = 'za_04003'; //登录状态-成功
+//  登录状态-失败	za_04004
+  static const String event_04004 = 'za_04004'; //登录状态-失败
+//  登录弹窗/页面-点击【关闭】	za_04005
+  static const String event_04005 = 'za_04005'; //登录弹窗/页面-点击【关闭】
+//
+
+  /// event_05开头原生加
+//  模式选择-帮聊	za_05000
+  static const String event_05000 = 'za_05000'; //模式选择-帮聊
+//  模式选择-教你说	za_05001
+  static const String event_05001 = 'za_05001'; //模式选择-教你说
+//  模式选择-开场白	za_05002
+  static const String event_05002 = 'za_05002'; //模式选择-开场白
+//  键盘选择-通用键盘	za_05003
+  static const String event_05003 = 'za_05003'; //键盘选择-通用键盘
+//  键盘选择-专属键盘	za_05004
+  static const String event_05004 = 'za_05004'; //键盘选择-专属键盘
+
+//  登录弹窗-展示	za_05005
+  static const String event_05005 = 'za_05005'; //登录弹窗-展示
+//  登录弹窗-点击【登录】	za_05006
+  static const String event_05006 = 'za_05006'; //登录弹窗-点击【登录】
+//  登录弹窗-点击【关闭】	za_05007
+  static const String event_05007 = 'za_05007'; //登录弹窗-点击【关闭】
+//  解锁会员弹窗-展示	za_05008
+  static const String event_05008 = 'za_05008'; //解锁会员弹窗-展示
+//  解锁会员弹窗-点击【登录】	za_05009
+  static const String event_05009 = 'za_05009'; //解锁会员弹窗-点击【登录】
+//  解锁会员弹窗-点击【关闭】	za_05010
+  static const String event_05010 = 'za_05010'; //解锁会员弹窗-点击【关闭】
+//
+//  设置入口-点击	za_05011
+  static const String event_05011 = 'za_05011'; //设置入口-点击
+//  设置入口-点击【定制人设】	za_05012
+  static const String event_05012 = 'za_05012'; //设置入口-点击【定制人设】
+//  设置入口-点击【人设市场】	za_05013
+  static const String event_05013 = 'za_05013'; //设置入口-点击【人设市场】
+//  设置入口-点击【解锁会员】	za_05014
+  static const String event_05014 = 'za_05014'; //设置入口-点击【解锁会员】
+//
+//  亲密度-点击	za_05015
+  static const String event_05015 = 'za_05015'; //亲密度-点击
+//
+//  键盘-点击【发送】	za_05016
+  static const String event_05016 = 'za_05016'; //键盘-点击【发送】
+
+
+//  对方档案入口-点击	za_06000
+  static const String event_06000 = 'za_06000'; //对方档案入口-点击
+//  档案列表-展示	za_06001
+  static const String event_06001 = 'za_06001'; //档案列表-展示
+//  档案列表-点击【添加】	za_06002
+  static const String event_06002 = 'za_06002'; //档案列表-点击【添加】
+//  创建档案-点击【保存】	za_06003
+  static const String event_06003 = 'za_06003'; //创建档案-点击【保存】
+//  档案列表-点击【完成】	za_06004
+  static const String event_06004 = 'za_06004'; //档案列表-点击【完成】
+//
+//  亲密度调节入口-点击	za_07000
+  static const String event_07000 = 'za_07000'; //亲密度调节入口-点击
+//  亲密度调节-点击【保存】	za_07001
+  static const String event_07001 = 'za_07001'; //亲密度调节-点击【保存】
+//
+//  恋爱指数入口-点击	za_08000
+  static const String event_08000 = 'za_08000'; //恋爱指数入口-点击
+//  星座分析今日报告-展示	za_08001
+  static const String event_08001 = 'za_08001'; //星座分析今日报告-展示
+//  星座分析未开一周-展示	za_08002
+  static const String event_08002 = 'za_08002'; //星座分析未开一周-展示
+//  星座报告分析-点击【VIP免费看下周星座关系分析】	za_08003
+  static const String event_08003 = 'za_08003'; //星座报告分析-点击【VIP免费看下周星座关系分析】
+//
+//  亲密度分析入口-点击	za_09000
+  static const String event_09000 = 'za_09000'; //亲密度分析入口-点击
+//  亲密度分析报告-展示	za_09001
+  static const String event_09001 = 'za_09001'; //亲密度分析报告-展示
+//  亲密度分析报告-点击【立即分析】	za_09002
+  static const String event_09002 = 'za_09002'; //亲密度分析报告-点击【立即分析】
+//  亲密度分析传图页-展示	za_09003
+  static const String event_09003 = 'za_09003'; //亲密度分析传图页-展示
+//  亲密度分析传图页-点击【下一步】	za_09004
+  static const String event_09004 = 'za_09004'; //亲密度分析传图页-点击【下一步】
+//  亲密度分析报告-点击【立即解锁】	za_09005
+  static const String event_09005 = 'za_09005'; //亲密度分析报告-点击【立即解锁】
+//
+//  截图回复入口-点击	za_10000
+  static const String event_10000 = 'za_10000'; //截图回复入口-点击
+//  对话分析-展示 	za_10001
+  static const String event_10001 = 'za_10001'; //对话分析-展示
+//  对话分析-点击【上传截图】	za_10002
+  static const String event_10002 = 'za_10002'; //对话分析-点击【上传截图】
+//  对话分析-点击【解锁分析】	za_10003
+  static const String event_10003 = 'za_10003'; //对话分析-点击【解锁分析】
+//
+//  识图回复-展示	za_10004
+  static const String event_10004 = 'za_10004'; //识图回复-展示
+//  识图回复-点击【上传截图】	za_10005
+  static const String event_10005 = 'za_10005'; //识图回复-点击【上传截图】
+//  识图回复-点击【解锁分析】	za_10006
+  static const String event_10006 = 'za_10006'; //识图回复-点击【解锁分析】
+//
+//  人设市场-展示	za_11000
+  static const String event_11000 = 'za_11000'; //人设市场-展示
+//  人设-点击【解锁】	za_11001
+  static const String event_11001 = 'za_11001'; //人设-点击【解锁】
+//  人设弹窗-展示	za_11002
+  static const String event_11002 = 'za_11002'; //人设弹窗-展示
+//  人设弹窗-点击【添加到键盘】	za_11003
+  static const String event_11003 = 'za_11003'; //人设弹窗-点击【添加到键盘】
+//  人设弹窗-点击【关闭】	za_11004
+  static const String event_11004 = 'za_11004'; //人设弹窗-点击【关闭】
+//
+//  定制人设入口-点击	za_12000
+  static const String event_12000 = 'za_12000'; //定制人设入口-点击
+//  定制人设-点击【开始定制】	za_12001
+  static const String event_12001 = 'za_12001'; //定制人设-点击【开始定制】
+//  定制人设爱好-点击【下一步】	za_12002
+  static const String event_12002 = 'za_12002'; //定制人设爱好-点击【下一步】
+//  定制人设特质-点击【下一步】	za_12003
+  static const String event_12003 = 'za_12003'; //定制人设特质-点击【下一步】
+//  定制人设名称-点击【下一步】	za_12004
+  static const String event_12004 = 'za_12004'; //定制人设名称-点击【下一步】
+//  定制人设编辑-展示	za_12005
+  static const String event_12005 = 'za_12005'; //定制人设编辑-展示
+//  定制人设编辑-点击【解锁专属人设】	za_12006
+  static const String event_12006 = 'za_12006'; //定制人设编辑-点击【解锁专属人设】
+//  za_12007
+//  定制人设-点击【定制历史】	za_12007
+  static const String event_12007 = 'za_12007'; //定制人设-点击【定制历史】
+
+//  定制人设列表-展示	za_12008
+  static const String event_12008 = 'za_12008'; //定制人设列表-展示
+//  定制人设-点击【添加】	za_12009
+  static const String event_12009 = 'za_12009'; //定制人设-点击【添加】
+//  定制人设弹窗-点击【确认添加】	za_12010
+  static const String event_12010 = 'za_12010'; //定制人设弹窗-点击【确认添加】
+//
+//  键盘管理入口-点击	za_13000
+  static const String event_13000 = 'za_13000'; //键盘管理入口-点击
+//  定制键盘-展示	za_13001
+  static const String event_13001 = 'za_13001'; //定制键盘-展示
+//  定制键盘-点击保存	za_13002
+  static const String event_13002 = 'za_13002'; //定制键盘-点击保存
+//  通用键盘-展示	za_13003
+  static const String event_13003 = 'za_13003'; //通用键盘-展示
+//  通用键盘-点击保存	za_13004
+  static const String event_13004 = 'za_13004'; //通用键盘-点击保存
+//
+//  会员入口-点击	za_14000
+  static const String event_14000 = 'za_14000'; //会员入口-点击
+//  登录入口-点击	za_14001
+  static const String event_14001 = 'za_14001'; //登录入口-点击
+//  登录-退出账号	za_14002
+  static const String event_14002 = 'za_14002'; //登录-退出账号
+//  登录-注销账号	za_14003
+  static const String event_14003 = 'za_14003'; //登录-注销账号
+//  注销账号-点击【确认注销】	za_14004
+  static const String event_14004 = 'za_14004'; //注销账号-点击【确认注销】
+//  注销账号-点击【再想想】	za_14005
+  static const String event_14005 = 'za_14005'; //注销账号-点击【再想想】
+//  在线客服入口-点击	za_14006
+  static const String event_14006 = 'za_14006'; //在线客服入口-点击
+//  使用教程入口-点击	za_14007
+  static const String event_14007 = 'za_14007'; //使用教程入口-点击
+//  个人档案入口-点击	za_14008
+  static const String event_14008 = 'za_14008'; //个人档案入口-点击
+//  意见反馈入口-点击	za_14009
+  static const String event_14009 = 'za_14009'; //意见反馈入口-点击
+//  投诉举报入口-点击	za_14010
+  static const String event_14010 = 'za_14010'; //投诉举报入口-点击
+//  关于我们入口-点击	za_14011
+  static const String event_14011 = 'za_14011'; //关于我们入口-点击
+
+}

+ 7 - 1
lib/dialog/login/login_dialog.dart

@@ -2,6 +2,8 @@ import 'package:flutter/cupertino.dart';
 import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
 import 'package:get/get.dart';
 import 'package:keyboard/dialog/login/login_dialog_controller.dart';
+import '../../data/consts/event_report.dart';
+import '../../handler/event_handler.dart';
 import '../../module/login/login_controller.dart';
 import '../../utils/event_bus.dart';
 import 'login_dialog_view.dart';
@@ -13,6 +15,7 @@ class LoginDialog {
   static const String TAG = "LoginDialog";
 
   static void show() {
+    EventHandler.report(EventId.event_04000);
     SmartDialog.show(
       backType: SmartBackType.normal,
       clickMaskDismiss: true,
@@ -20,7 +23,10 @@ class LoginDialog {
       animationType: SmartAnimationType.centerScale_otherSlide,
       tag: TAG,
       keepSingle: true,
-      onDismiss: () => Get.delete<LoginDialogController>(),
+      onDismiss: () {
+        EventHandler.report(EventId.event_04005);
+        Get.delete<LoginDialogController>();
+      },
       builder: (context) {
         // 通知外部,登录弹窗显示
         WidgetsBinding.instance.addPostFrameCallback((_) {

+ 8 - 2
lib/dialog/login/login_dialog_controller.dart

@@ -12,6 +12,8 @@ import 'package:keyboard/utils/atmob_log.dart';
 import 'package:keyboard/utils/toast_util.dart';
 
 import '../../data/consts/error_code.dart';
+import '../../data/consts/event_report.dart';
+import '../../handler/event_handler.dart';
 import '../../handler/wechat_login_service.dart';
 import '../../resource/string.gen.dart';
 import '../../utils/error_handler.dart';
@@ -38,6 +40,7 @@ class LoginDialogController extends BaseController {
   }
 
   void clickWxLogin() async {
+    EventHandler.report(EventId.event_04001);
     if (!_isAgree.value) {
       PrivacyAgreementDialog.show(
         btnConfirm: () async {
@@ -56,6 +59,7 @@ class LoginDialogController extends BaseController {
             .then((data) {
               ToastUtil.show(StringName.loginSuccess);
               SmartDialog.dismiss(tag: LoginDialog.TAG);
+              EventHandler.report(EventId.event_04003);
             })
             .catchError((error) {
               if (error is ServerErrorException) {
@@ -66,14 +70,16 @@ class LoginDialogController extends BaseController {
                 }
               } else {
                 ErrorHandler.toastError(error);
-
               }
+              EventHandler.report(EventId.event_04004);
             });
       },
       onError: (code, msg) {
+        EventHandler.report(EventId.event_04004);
         ToastUtil.show("微信登录失败:$msg");
       },
       onCancel: () {
+        EventHandler.report(EventId.event_04004);
         ToastUtil.show("用户取消登录");
       },
     );
@@ -86,7 +92,7 @@ class LoginDialogController extends BaseController {
 
   void clickPhoneLogin() {
     AtmobLog.d(tag, "clickPhoneLogin");
-
+    EventHandler.report(EventId.event_04002);
     LoginPage.start();
 
     SmartDialog.dismiss(tag: LoginDialog.TAG);

+ 31 - 27
lib/module/character/character_controller.dart

@@ -10,8 +10,10 @@ import 'package:keyboard/utils/atmob_log.dart';
 
 import '../../data/api/response/user_info_response.dart';
 import '../../data/bean/character_group_info.dart';
+import '../../data/consts/event_report.dart';
 import '../../data/repository/characters_repository.dart';
 import '../../data/repository/keyboard_repository.dart';
+import '../../handler/event_handler.dart';
 import '../character_custom/character_custom_page.dart';
 
 @injectable
@@ -40,8 +42,8 @@ class CharacterController extends BaseController
   RxList<KeyboardInfo> get keyboardInfoList =>
       keyboardRepository.keyboardInfoList;
 
-  late Rx<TabController> tabController;
-  late PageController pageController;
+  Rx<TabController?> tabController = Rx(null);
+  PageController pageController = PageController();
 
   RxInt currentTabBarIndex = 0.obs;
 
@@ -67,31 +69,32 @@ class CharacterController extends BaseController
   }
 
   void _dataLoad() async {
-    pageController = PageController();
+    AtmobLog.d(tag, "_dataLoad");
 
-    tabController =
-        TabController(
-          length: characterGroupList.length,
-          vsync: this,
-          initialIndex: 0,
-        ).obs;
+    tabController.value = TabController(
+      length: characterGroupList.length,
+      vsync: this,
+      initialIndex: 0,
+    );
 
-    ever(charactersRepository.characterGroupList, (value) {
-      AtmobLog.d(tag, "characterGroupList changed");
-      if (value.isNotEmpty) {
-        tabController.value.dispose();
-        tabController.value = TabController(
-          length: characterGroupList.length,
-          vsync: this,
-          initialIndex: 0,
-        );
-        currentCharacterGroupInfo.value = characterGroupList.first;
-        AtmobLog.d(
-          tag,
-          "currentCharacterGroupInfo.value: ${characterGroupList.first.id}",
-        );
-      }
-    });
+    debugPrint("qqq tabController: ${tabController.hashCode}");
+
+    // ever(charactersRepository.characterGroupList, (value) {
+    //   AtmobLog.d(tag, "characterGroupList changed");
+    //   if (value.isNotEmpty) {
+    //     tabController.value?.dispose();
+    //     tabController.value = TabController(
+    //       length: characterGroupList.length,
+    //       vsync: this,
+    //       initialIndex: 0,
+    //     );
+    //     currentCharacterGroupInfo.value = characterGroupList.first;
+    //     AtmobLog.d(
+    //       tag,
+    //       "currentCharacterGroupInfo.value: ${characterGroupList.first.id}",
+    //     );
+    //   }
+    // });
 
     ever(keyboardInfoList, (value) {
       AtmobLog.d(tag, "keyboardInfoList1 changed ${keyboardInfoList.length}");
@@ -120,7 +123,7 @@ class CharacterController extends BaseController
     }
     currentTabBarIndex.value = index;
     currentCharacterGroupInfo.value = characterGroupList[index];
-    tabController.value.animateTo(
+    tabController.value?.animateTo(
       index,
       duration: const Duration(milliseconds: 300),
     );
@@ -129,12 +132,13 @@ class CharacterController extends BaseController
   @override
   void onReady() {
     super.onReady();
+    EventHandler.report(EventId.event_00001);
   }
 
   @override
   void onClose() {
     pageController.dispose();
-    tabController.value.dispose();
+    tabController.value?.dispose();
     super.onClose();
   }
 

+ 14 - 0
lib/module/intro/intro_controller.dart

@@ -8,6 +8,8 @@ import 'package:flutter_screenutil/flutter_screenutil.dart';
 import 'package:keyboard/data/repository/account_repository.dart';
 import 'package:keyboard/utils/toast_util.dart';
 import '../../data/consts/constants.dart';
+import '../../data/consts/event_report.dart';
+import '../../handler/event_handler.dart';
 import '../../resource/assets.gen.dart';
 import '../../dialog/login/login_dialog.dart';
 import '../../module/new_user/new_user_page.dart';
@@ -77,6 +79,16 @@ class IntroController extends BaseController {
   void onReady() {
     super.onReady();
     _startAutoSwitchTimer();
+    EventHandler.report(EventId.event_01000);
+    // 监听登录状态
+    ever(AccountRepository.getInstance().isLogin, (bool isLogin) {
+      if (isLogin) {
+        // 登录后跳转新用户页
+        Future.delayed(const Duration(milliseconds: 300), () {
+          NewUserPage.start();
+        });
+      }
+    });
   }
 
   /// 开始自动切页计时
@@ -115,12 +127,14 @@ class IntroController extends BaseController {
       }
       LoginDialog.show();
     });
+    EventHandler.report(EventId.event_01002);
   }
 
   void clickCustomButton() {
     Timer(const Duration(milliseconds: 500), () {
       NewUserPage.start();
     });
+    EventHandler.report(EventId.event_01001);
   }
 
   void clickBack() {

+ 3 - 0
lib/module/keyboard/keyboard_controller.dart

@@ -7,6 +7,7 @@ import 'package:keyboard/base/base_controller.dart';
 import 'package:keyboard/data/api/response/keyboard_home_info_response.dart';
 import 'package:keyboard/data/repository/account_repository.dart';
 import 'package:keyboard/data/repository/keyboard_repository.dart';
+import 'package:keyboard/handler/event_handler.dart';
 import 'package:keyboard/module/intimacy_analyse/enums/intimacy_analyse_tab.dart';
 import 'package:keyboard/module/keyboard_manage/keyboard_manage_page.dart';
 import 'package:keyboard/module/store/new_discount/new_discount_page.dart';
@@ -16,6 +17,7 @@ import 'package:keyboard/module/user_profile/user_profile_page.dart';
 import '../../data/api/response/keyboard_love_index_response.dart';
 import '../../data/bean/member_info.dart';
 import '../../data/consts/constants.dart';
+import '../../data/consts/event_report.dart';
 import '../../plugins/keyboard_android_platform.dart';
 import '../../utils/default_keyboard_helper.dart';
 import '../../utils/keyboard_tutorial_util.dart';
@@ -124,6 +126,7 @@ class KeyBoardController extends BaseController {
     debugPrint("click avatar");
     if (!isUser) {
       ProfilePage.start();
+      EventHandler.report(EventId.event_06000);
     } else {
       UserProfilePage.start();
     }

+ 38 - 29
lib/module/keyboard/keyboard_view.dart

@@ -11,6 +11,7 @@ import 'package:keyboard/resource/string.gen.dart';
 import '../../data/consts/constants.dart';
 import '../../resource/assets.gen.dart';
 import '../../utils/styles.dart';
+import '../../widget/app_lifecycle_widget.dart';
 import '../../widget/avatar/avatar_image_widget.dart';
 import '../../widget/heart_fill_view.dart';
 import '../../widget/pargress_bar.dart';
@@ -378,13 +379,20 @@ class KeyBoardView extends BaseView<KeyBoardController> {
                 child: Stack(
                   children: [
                     // Assets.images.bgKeyboardLove.image(width: 88.w, height: 72.h),
-                    HeartFillAnimation(
-                      fillProgress:
-                          controller.homeInfo?.intimacy != null
-                              ? controller.homeInfo!.intimacy! / 100
-                              : 0,
-                      width: 88.w,
+                    AppLifecycleWidget(
+                      onAppLifecycleCallback: (isForeground) {
+                        if (isForeground) {
+                        } else {}
+                      },
+                      child: HeartFillAnimation(
+                        fillProgress:
+                            controller.homeInfo?.intimacy != null
+                                ? controller.homeInfo!.intimacy! / 100
+                                : 0,
+                        width: 88.w,
+                      ),
                     ),
+
                     Positioned.fill(
                       child: Center(
                         child: Obx(
@@ -471,17 +479,15 @@ class KeyBoardView extends BaseView<KeyBoardController> {
                   imageProvider = Assets.images.bgKeyboardStartUsing.provider();
                 } else {
                   // 未选择为默认键盘,显示体验键盘
-                  imageProvider = Assets.images.bgKeyboardTryExperience.provider();
+                  imageProvider =
+                      Assets.images.bgKeyboardTryExperience.provider();
                 }
                 return GestureDetector(
                   onTap: controller.clickEasyReply,
                   child: SizedBox(
                     width: 170.w,
                     height: 155.85.w,
-                    child: Image(
-                      image: imageProvider,
-                      fit: BoxFit.contain,
-                    ),
+                    child: Image(image: imageProvider, fit: BoxFit.contain),
                   ),
                 );
               }),
@@ -644,30 +650,33 @@ class KeyBoardView extends BaseView<KeyBoardController> {
             children: [
               Positioned(
                 top: 20.h,
-                child: Visibility( visible: isNotHWChannel(),replacement:Assets.images.iconKeyboardBannerNoCountdown.image(
-                  width: 328.w,
-                  height: 64.h,
-                ) ,child: Assets.images.iconKeyboardBanner.image(
-                  width: 328.w,
-                  height: 64.h,
-                ),)
+                child: Visibility(
+                  visible: isNotHWChannel(),
+                  replacement: Assets.images.iconKeyboardBannerNoCountdown
+                      .image(width: 328.w, height: 64.h),
+                  child: Assets.images.iconKeyboardBanner.image(
+                    width: 328.w,
+                    height: 64.h,
+                  ),
+                ),
               ),
               Visibility(
                 visible: isNotHWChannel(),
-                child:   Positioned(
-                right: 53.w,
-                bottom: 18.h,
-                child: Obx(
-                      () => Text(
-                    controller.formattedTime,
-                    style: TextStyle(
-                      color: Colors.white,
-                      fontSize: 12.sp,
-                      fontWeight: FontWeight.w500,
+                child: Positioned(
+                  right: 53.w,
+                  bottom: 18.h,
+                  child: Obx(
+                    () => Text(
+                      controller.formattedTime,
+                      style: TextStyle(
+                        color: Colors.white,
+                        fontSize: 12.sp,
+                        fontWeight: FontWeight.w500,
+                      ),
                     ),
                   ),
                 ),
-              ),),
+              ),
 
               Positioned(
                 right: 6.w,

+ 4 - 0
lib/module/keyboard_guide/keyboard_guide_controller.dart

@@ -5,7 +5,9 @@ import 'package:keyboard/module/keyboard_guide/enums/keyboard_guide_msg_type.dar
 import 'package:keyboard/resource/string.gen.dart';
 import '../../base/base_controller.dart';
 import '../../data/bean/keyboard_guide_msg.dart';
+import '../../data/consts/event_report.dart';
 import '../../dialog/login/login_dialog.dart';
+import '../../handler/event_handler.dart';
 import '../../utils/clipboard_util.dart';
 import '../../utils/default_keyboard_helper.dart';
 import '../../utils/event_bus.dart';
@@ -213,12 +215,14 @@ class KeyboardGuidePageController extends BaseController {
     if (!KeyboardGuideRecordUtil.isFirstShowKeyboardGuide()) {
       return;
     }
+    EventHandler.report(EventId.event_03004);
     // 首帧结束后,再显示
     WidgetsBinding.instance.addPostFrameCallback((_) {
       KeyboardGuideOverlayDialog.show(
         guideMsgGlobalKey,
         onCopyCallback: () {
           // 复制
+          EventHandler.report(EventId.event_03005);
           ClipboardUtil.copyToClipboard(StringName.keyboardGuideTaReply2);
           ToastUtil.show(StringName.copySuccess);
         },

+ 3 - 0
lib/module/keyboard_guide/keyboard_guide_page.dart

@@ -9,6 +9,8 @@ import 'package:lottie/lottie.dart';
 
 import '../../base/base_page.dart';
 import '../../data/bean/keyboard_guide_msg.dart';
+import '../../data/consts/event_report.dart';
+import '../../handler/event_handler.dart';
 import '../../resource/assets.gen.dart';
 import '../../resource/colors.gen.dart';
 import '../../resource/string.gen.dart';
@@ -95,6 +97,7 @@ class KeyboardGuidePage extends BasePage<KeyboardGuidePageController> {
           GestureDetector(
             onTap: () async {
               bool result = await UrlLauncherUtil.openWeChat();
+              EventHandler.report(EventId.event_03007);
               if (!result) {
                 ToastUtil.show(StringName.keyboardGuideWechatNotInstall);
               }

+ 10 - 0
lib/module/keyboard_tutorial/android/keyboard_tutorial_android_view_controller.dart

@@ -4,6 +4,8 @@ import 'package:keyboard/base/base_controller.dart';
 import 'package:keyboard/module/keyboard_guide/keyboard_guide_page.dart';
 import 'package:keyboard/module/keyboard_tutorial/video/keyboard_tutorial_video_page.dart';
 
+import '../../../data/consts/event_report.dart';
+import '../../../handler/event_handler.dart';
 import '../../../plugins/keyboard_android_platform.dart';
 import '../../../utils/floating_window_helper.dart';
 import '../../../utils/keyboard_tutorial_util.dart';
@@ -30,6 +32,12 @@ class KeyboardTutorialAndroidViewController extends BaseController {
     checkSetting();
   }
 
+  @override
+  void onReady() {
+    super.onReady();
+    EventHandler.report(EventId.event_03000);
+  }
+
   /// 设置是否检查完成教程
   void setCheckTutorialComplete(bool check) {
     checkTutorialComplete.value = check;
@@ -69,11 +77,13 @@ class KeyboardTutorialAndroidViewController extends BaseController {
 
   /// 去启用键盘
   void goEnableKeyboard() {
+    EventHandler.report(EventId.event_03001);
     KeyboardAndroidPlatform.openInputMethodSettings();
   }
 
   /// 去启用悬浮窗
   void jumpFloatingWindowSetting() {
+    EventHandler.report(EventId.event_03002);
     KeyboardAndroidPlatform.jumpFloatingWindowSetting();
   }
 

+ 6 - 0
lib/module/login/login_controller.dart

@@ -5,8 +5,10 @@ import 'package:keyboard/base/base_controller.dart';
 import 'package:keyboard/dialog/login/login_dialog.dart';
 
 import '../../data/consts/error_code.dart';
+import '../../data/consts/event_report.dart';
 import '../../data/repository/account_repository.dart';
 import '../../dialog/privacy_agreement_dialog.dart';
+import '../../handler/event_handler.dart';
 import '../../handler/wechat_login_service.dart';
 import '../../resource/string.gen.dart';
 import '../../utils/error_handler.dart';
@@ -116,10 +118,13 @@ class LoginController extends BaseController {
     accountRepository
         .loginUserLogin(phone, code)
         .then((data) {
+          EventHandler.report(EventId.event_04003);
           Get.back();
           ToastUtil.show(StringName.loginSuccess);
+
         })
         .catchError((error) {
+          EventHandler.report(EventId.event_04004);
           if (error is LoginTooOftenException) {
             ToastUtil.show(StringName.loginTooOftenToast);
             return;
@@ -137,6 +142,7 @@ class LoginController extends BaseController {
   }
 
   void clickBack() {
+    EventHandler.report(EventId.event_04005);
     Get.back();
   }
 

+ 10 - 3
lib/module/login/login_page.dart

@@ -35,9 +35,16 @@ class LoginPage extends BasePage<LoginController> {
 
   @override
   Widget buildBody(BuildContext context) {
-    return Stack(
+    return PopScope(
+        canPop: false,
+        onPopInvokedWithResult: (didPop, result) async {
+          if (didPop) {
+            return;
+          }
+          controller.clickBack();
+        },
+        child: Stack(
       children: [
-
         Assets.images.bgLogin.image(fit: BoxFit.contain, width: 360.w),
         _buildTitle(),
         SafeArea(
@@ -59,7 +66,7 @@ class LoginPage extends BasePage<LoginController> {
         ),
 
       ],
-    );
+    ));
   }
   _buildTitle() {
     return SafeArea(

+ 24 - 23
lib/module/main/main_controller.dart

@@ -51,41 +51,40 @@ class MainController extends BaseController {
       StringName.mainTabKeyboard,
       Assets.images.iconTabKeyboardUnselect.path,
       Assets.anim.animTabKeyboardSelectedData,
-      AnimatedSwitcher(
-        duration: Duration(milliseconds: 300),
-        transitionBuilder: (Widget child, Animation<double> animation) {
-          return FadeTransition(opacity: animation, child: child);
-        },
-        child: KeyBoardView(),
-      ),
+      () {
+        return AnimatedSwitcher(
+          duration: Duration(milliseconds: 300),
+          transitionBuilder: (Widget child, Animation<double> animation) {
+            return FadeTransition(opacity: animation, child: child);
+          },
+          child: KeyBoardView(),
+        );
+      },
     ),
     TabBean(
       StringName.mainTabCharacter,
       Assets.images.iconTabCharacterUnselect.path,
       Assets.anim.animTabCharacterSelectedData,
 
-      AnimatedSwitcher(
-        duration: Duration(milliseconds: 300),
-
-        transitionBuilder: (Widget child, Animation<double> animation) {
-          return FadeTransition(opacity: animation, child: child);
-        },
-        child: CharacterView(),
-      ),
+      () {
+        return CharacterView();
+      },
     ),
     TabBean(
       StringName.mainTabMine,
       Assets.images.iconTabMineUnselect.path,
       Assets.anim.animTabMineSelectedData,
 
-      AnimatedSwitcher(
-        duration: Duration(milliseconds: 300),
-        transitionBuilder: (Widget child, Animation<double> animation) {
-          return FadeTransition(opacity: animation, child: child);
-        },
+      () {
+        return AnimatedSwitcher(
+          duration: Duration(milliseconds: 300),
+          transitionBuilder: (Widget child, Animation<double> animation) {
+            return FadeTransition(opacity: animation, child: child);
+          },
 
-        child: MineView(),
-      ),
+          child: MineView(),
+        );
+      },
     ),
   ];
 
@@ -138,7 +137,9 @@ class TabBean {
   final String title;
   final String normalIcon;
   final String selectedIcon;
-  final Widget page;
+  final WidgetFunction page;
 
   const TabBean(this.title, this.normalIcon, this.selectedIcon, this.page);
 }
+
+typedef WidgetFunction = Widget Function();

+ 1 - 1
lib/module/main/main_page.dart

@@ -40,7 +40,7 @@ class MainPage extends BasePage<MainController> {
             // 处理跳转参数
             controller.handleJumpParameters();
           },
-          child: Obx(() => controller.tabBeans[controller.currentIndex].page),
+          child: Obx(() => controller.tabBeans[controller.currentIndex].page()),
         ),
       ),
     );

+ 0 - 6
lib/module/mine/mine_controller.dart

@@ -70,7 +70,6 @@ class MineController extends BaseController {
   }
 
   clickOnlineCustomerService() {
-    final userInfo = accountRepository.userInfo.value;
     if (isLogin) {
       debugPrint('clickOnlineCustomerService');
       goToCustomerService();
@@ -112,11 +111,6 @@ class MineController extends BaseController {
   clickTutorials() {
     debugPrint('clickTutorials');
     KeyboardTutorialUtil.start();
-  //   测试模isDebug式才生效
-  //   if (BuildConfig.isDebug) {
-  //     KeyboardAndroidPlatform.enableFloatingWindow(true);
-  //     KeyboardAndroidPlatform.openInputMethodSettings();
-  //   }
   }
 
 

+ 35 - 15
lib/module/new_user/new_user_controller.dart

@@ -17,26 +17,16 @@ import '../../base/base_controller.dart';
 import '../../data/api/response/keyboard_generate_response.dart';
 import '../../data/bean/default_avatar_info.dart';
 import '../../data/consts/constants.dart';
+import '../../data/consts/event_report.dart';
 import '../../data/repository/account_repository.dart';
 import 'package:get/get.dart';
 
 import '../../dialog/keyboard_generating_dialog.dart';
+import '../../handler/event_handler.dart';
 import '../../utils/error_handler.dart';
 import '../../utils/http_handler.dart';
 import '../../utils/toast_util.dart';
 
-enum NewUserStepType {
-  stepGenDer(0),
-  stepBirthday(1),
-  stepNickname(2),
-  stepIntimacyStages(3),
-  stepPartner(4);
-
-  final int value;
-
-  const NewUserStepType(this.value);
-}
-
 @injectable
 class NewUserController extends BaseController
     with
@@ -71,6 +61,27 @@ class NewUserController extends BaseController
     ever<DefaultAvatarInfo?>(currentDefaultAvatarInfo, (info) {
       updateAvatarListsAndSelectFirst(info);
     });
+
+  }
+
+  @override
+  void onReady() {
+    super.onReady();
+    if (currentStep == 1){
+      EventHandler.report(EventId.event_01003);
+    }
+    ever(_currentStep, (_) {
+      if (currentStep == 1) {
+        EventHandler.report(EventId.event_01003);
+      } else if (currentStep == 2) {
+        EventHandler.report(EventId.event_01007);
+      } else if (currentStep == 3) {
+        EventHandler.report(EventId.event_01009);
+      } else if (currentStep == 4) {
+        EventHandler.report(EventId.event_01011);
+      }
+    });
+
   }
 
   void clickBack() {
@@ -90,22 +101,31 @@ class NewUserController extends BaseController
       ToastUtil.show(currentStepValidationError ?? "请完成当前步骤");
       return;
     }
+    if(currentStep == 1) {
+      EventHandler.report(EventId.event_01006);
+    } else if (currentStep == 2) {
+      EventHandler.report(EventId.event_01008);
+    } else if (currentStep == 3) {
+      EventHandler.report(EventId.event_01010);
+    } else if (currentStep == 4) {
+      EventHandler.report(EventId.event_01012);
+    }
 
     if (currentStep == totalSteps) {
+      EventHandler.report(EventId.event_01013);
       _generateKeyboard();
     } else {
-
      await _settingUseInfo();
-
     }
   }
 
   void clickUseGeneralMode() {
-
+    EventHandler.report(EventId.event_01014);
     MainPage.start();
   }
 
   void clickSkip() {
+    EventHandler.report(EventId.event_01015);
     MainPage.start();
   }
 

+ 10 - 0
lib/module/new_user/step/gender/step_gender_logic.dart

@@ -1,5 +1,8 @@
 import 'package:get/get.dart';
 
+import '../../../../data/consts/event_report.dart';
+import '../../../../handler/event_handler.dart';
+
 mixin StepGenDerLogic {
   final tag = "StepGenDerLogic";
 
@@ -12,5 +15,12 @@ mixin StepGenDerLogic {
         _currentGender.value == genderValue
             ? (genderValue == 1 ? 2 : 1)
             : genderValue;
+
+    if (currentGender == 1) {
+      EventHandler.report(EventId.event_01004);
+    } else if (currentGender == 2) {
+      EventHandler.report(EventId.event_01005);
+    }
+
   }
 }

+ 3 - 1
lib/module/profile/profile_controller.dart

@@ -11,7 +11,9 @@ import 'package:get/get.dart';
 import '../../data/api/response/user_info_response.dart';
 import '../../data/bean/keyboard_info.dart';
 import '../../data/consts/error_code.dart';
+import '../../data/consts/event_report.dart';
 import '../../data/repository/keyboard_repository.dart';
+import '../../handler/event_handler.dart';
 import '../../utils/error_handler.dart';
 import '../../utils/http_handler.dart';
 import '../../utils/toast_util.dart';
@@ -50,7 +52,7 @@ class ProfileController extends BaseController {
   @override
   void onReady() {
     super.onReady();
-
+    EventHandler.report(EventId.event_06001);
     getCustomKeyboard();
   }
 

+ 5 - 0
lib/module/store/new_discount/new_discount_controller.dart

@@ -16,6 +16,7 @@ import '../../../data/bean/pay_way_info.dart';
 import '../../../data/bean/wechat_payment_sign_bean.dart';
 import '../../../data/consts/constants.dart';
 import '../../../data/consts/error_code.dart';
+import '../../../data/consts/event_report.dart';
 import '../../../data/consts/payment_type.dart';
 import '../../../data/repository/account_repository.dart';
 import '../../../data/repository/store_repository.dart';
@@ -26,6 +27,7 @@ import '../../../dialog/member_agreement_dialog.dart';
 import '../../../dialog/payment_fail_dialog.dart';
 import '../../../dialog/payment_success_dialog.dart';
 import '../../../dialog/wechat_qr_code_dialog.dart';
+import '../../../handler/event_handler.dart';
 import '../../../resource/assets.gen.dart';
 import '../../../resource/string.gen.dart';
 import '../../../utils/async_util.dart';
@@ -197,10 +199,12 @@ class NewDiscountController extends BaseController
   }
 
   void clickBack() {
+    EventHandler.report(EventId.event_02002);
     Get.back();
   }
 
   void clickPayNow() {
+    EventHandler.report(EventId.event_02001);
     if (selectedGoodsInfoItem == null) {
       ToastUtil.show(StringName.memberPleaseChoiceGoods);
       return;
@@ -450,6 +454,7 @@ class NewDiscountController extends BaseController
   @override
   void onReady() {
     super.onReady();
+    EventHandler.report(EventId.event_02000);
     // refreshStoreData();
   }
 

+ 27 - 17
lib/module/store/new_discount/new_discount_page.dart

@@ -36,7 +36,15 @@ class NewDiscountPage extends BasePage<NewDiscountController> {
 
   @override
   Widget buildBody(BuildContext context) {
-    return Stack(
+    return PopScope(
+        canPop: false,
+        onPopInvokedWithResult: (didPop, result) {
+          if (didPop) {
+            return;
+          }
+          controller.clickBack();
+        },
+        child: Stack(
       children: [
         Positioned(top: 0.w, child: _buildBanner()),
         Positioned(
@@ -73,7 +81,7 @@ class NewDiscountPage extends BasePage<NewDiscountController> {
 
         Positioned(bottom: 0, left: 0, right: 0, child: _buildBuyButtonCard()),
       ],
-    );
+    ));
   }
 
   _buildTitle() {
@@ -428,7 +436,6 @@ class NewDiscountPage extends BasePage<NewDiscountController> {
               ),
       child: Row(
         children: [
-
           Text(
             "¥",
             style: TextStyle(
@@ -441,7 +448,9 @@ class NewDiscountPage extends BasePage<NewDiscountController> {
             ),
           ),
           Text(
-          (item.code=="vip_permanent")? '${item.priceDescNumber}':'${item.amountText}',
+            (item.code == "vip_permanent")
+                ? '${item.priceDescNumber}'
+                : '${item.amountText}',
             textAlign: TextAlign.center,
             style: TextStyle(
               color:
@@ -452,9 +461,9 @@ class NewDiscountPage extends BasePage<NewDiscountController> {
               fontWeight: FontWeight.w700,
             ),
           ),
-          if (item.code=="vip_permanent")
+          if (item.code == "vip_permanent")
             Text(
-                item.priceDescUnit,
+              item.priceDescUnit,
               style: TextStyle(
                 color: Colors.black.withAlpha(153),
                 fontSize: 12.sp,
@@ -514,7 +523,9 @@ class NewDiscountPage extends BasePage<NewDiscountController> {
                 ],
               ),
               Text(
-                (item.code=="vip_permanent")? '${item.description}':'${item.priceDesc}',
+                (item.code == "vip_permanent")
+                    ? '${item.description}'
+                    : '${item.priceDesc}',
 
                 style: TextStyle(
                   color: Colors.black.withAlpha(153),
@@ -591,7 +602,7 @@ class NewDiscountPage extends BasePage<NewDiscountController> {
           ),
           SizedBox(height: 8.w),
           _buildMemberCardItem(),
-          SizedBox(height: 28.w,),
+          SizedBox(height: 28.w),
           _buildUserNotice(),
         ],
       ),
@@ -717,7 +728,10 @@ class NewDiscountPage extends BasePage<NewDiscountController> {
                   fontWeight: FontWeight.w400,
                 ),
               ),
-              ClickTextSpan(text: StringName.textSpanMembershipAgreement, url: WebUrl.memberServiceAgreement)
+              ClickTextSpan(
+                text: StringName.textSpanMembershipAgreement,
+                url: WebUrl.memberServiceAgreement,
+              ),
             ],
           ),
         ),
@@ -728,8 +742,6 @@ class NewDiscountPage extends BasePage<NewDiscountController> {
   //  用户须知
   Widget _buildUserNotice() {
     return Container(
-
-
       decoration: BoxDecoration(borderRadius: BorderRadius.circular(16.r)),
       child: Column(
         crossAxisAlignment: CrossAxisAlignment.start,
@@ -738,16 +750,14 @@ class NewDiscountPage extends BasePage<NewDiscountController> {
           SizedBox(height: 8.h),
           Text(
             "1.会员权益将在购买成功后自动生效,如遇延迟,请耐心等待5-10分钟。若长时间未生效,请联系客服处理;\n"
-                "2.本服务为虚拟商品,一经购买成功即视为使用,恕不支持退款或转让,感谢您的理解;\n"
-                "3.您的支持是我们持续优化与服务的动力,我们将竭诚为您提供更好的体验;\n"
-                "4.相关细则以《会员服务协议》为准,在法律允许范围内,我们保留最终解释权。开通即视为同意协议条款,请谨慎购买。\n"
-                "如有疑问,欢迎随时咨询在线客服!",
+            "2.本服务为虚拟商品,一经购买成功即视为使用,恕不支持退款或转让,感谢您的理解;\n"
+            "3.您的支持是我们持续优化与服务的动力,我们将竭诚为您提供更好的体验;\n"
+            "4.相关细则以《会员服务协议》为准,在法律允许范围内,我们保留最终解释权。开通即视为同意协议条款,请谨慎购买。\n"
+            "如有疑问,欢迎随时咨询在线客服!",
             style: Styles.getTextStyleBlack153W400(10.sp),
           ),
-
         ],
       ),
     );
   }
-
 }

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

@@ -27,11 +27,13 @@ import '../../data/api/response/user_info_response.dart';
 import '../../data/bean/member_info.dart';
 import '../../data/bean/wechat_payment_sign_bean.dart';
 import '../../data/consts/error_code.dart';
+import '../../data/consts/event_report.dart';
 import '../../data/consts/payment_type.dart';
 import '../../dialog/alipay_qr_code_dialog.dart';
 import '../../dialog/loading_dialog.dart';
 import '../../dialog/member_agreement_dialog.dart';
 import '../../dialog/wechat_qr_code_dialog.dart';
+import '../../handler/event_handler.dart';
 import '../../resource/assets.gen.dart';
 import '../../resource/string.gen.dart';
 import '../../utils/date_util.dart';
@@ -201,10 +203,12 @@ class StoreController extends BaseController implements PaymentStatusCallback {
   }
 
   void clickBack() {
+    EventHandler.report(EventId.event_02005);
     Get.back();
   }
 
   void clickPayNow() {
+    EventHandler.report(EventId.event_02004);
     if (selectedGoodsInfoItem == null) {
       ToastUtil.show(StringName.memberPleaseChoiceGoods);
       return;
@@ -454,6 +458,7 @@ class StoreController extends BaseController implements PaymentStatusCallback {
   @override
   void onReady() {
     super.onReady();
+    EventHandler.report(EventId.event_02003);
     refreshStoreData();
   }
 

+ 32 - 18
lib/module/store/store_page.dart

@@ -34,25 +34,39 @@ class StorePage extends BasePage<StoreController> {
 
   @override
   Widget buildBody(BuildContext context) {
-    return Stack(
-      children: [
-        SingleChildScrollView(
-          child: Column(
-            children: [
-              _buildBanner(context),
-              SizedBox(height: 12.h),
-              _buildGoodsCard(),
-              _buildVipDesc(),
-              SizedBox(height: 32.h),
-              _buildUserReviews(),
-              SizedBox(height: 20.h),
-              _buildUserNotice(),
-            ],
+    return PopScope(
+      canPop: false,
+      onPopInvokedWithResult: (didPop, result) {
+        if (didPop) {
+          return;
+        }
+        controller.clickBack();
+      },
+      child: Stack(
+        children: [
+          SingleChildScrollView(
+            child: Column(
+              children: [
+                _buildBanner(context),
+                SizedBox(height: 12.h),
+                _buildGoodsCard(),
+                _buildVipDesc(),
+                SizedBox(height: 32.h),
+                _buildUserReviews(),
+                SizedBox(height: 20.h),
+                _buildUserNotice(),
+              ],
+            ),
           ),
-        ),
-        Positioned(top: 0, left: 0, right: 0, child: _buildTitle()),
-        Positioned(bottom: 0, left: 0, right: 0, child: _buildBuyButtonCard()),
-      ],
+          Positioned(top: 0, left: 0, right: 0, child: _buildTitle()),
+          Positioned(
+            bottom: 0,
+            left: 0,
+            right: 0,
+            child: _buildBuyButtonCard(),
+          ),
+        ],
+      ),
     );
   }
 

+ 5 - 0
lib/module/store/suprise/surprise_dialog.dart

@@ -6,6 +6,8 @@ import 'package:keyboard/resource/string.gen.dart';
 import 'package:lottie/lottie.dart';
 
 import '../../../data/consts/constants.dart';
+import '../../../data/consts/event_report.dart';
+import '../../../handler/event_handler.dart';
 import '../../../resource/assets.gen.dart';
 import '../../../resource/colors.gen.dart';
 import '../../../utils/styles.dart';
@@ -18,6 +20,7 @@ class SurpriseDialog {
   static const String tag = 'SurpriseDialog';
 
   static void show({VoidCallback? clickConfirm,VoidCallback? clickCancel}) {
+    EventHandler.report(EventId.event_02009);
     SmartDialog.show(
       tag: tag,
       backType: SmartBackType.block,
@@ -97,6 +100,7 @@ class SurpriseDialog {
                             SizedBox(height: 16.h),
                             GestureDetector(
                               onTap: () {
+                                EventHandler.report(EventId.event_02010);
                                 clickConfirm?.call();
                                 SmartDialog.dismiss(tag: tag);
                               },
@@ -190,6 +194,7 @@ class SurpriseDialog {
                     margin: EdgeInsets.only(top: 24.h),
                     child: GestureDetector(
                       onTap: () {
+                        EventHandler.report(EventId.event_02011);
                         SmartDialog.dismiss(tag: tag);
                         clickCancel?.call();
                       },

+ 5 - 0
lib/module/store/ticket/discount_ticket_dialog.dart

@@ -5,6 +5,8 @@ import 'package:get/get.dart';
 import 'package:lottie/lottie.dart';
 
 import '../../../data/consts/constants.dart';
+import '../../../data/consts/event_report.dart';
+import '../../../handler/event_handler.dart';
 import '../../../resource/assets.gen.dart';
 import '../../../resource/colors.gen.dart';
 import '../../../utils/styles.dart';
@@ -15,6 +17,7 @@ class DiscountTicketDialog {
   static const String tag = 'DiscountTicketDialog';
 
   static void show({VoidCallback? clickConfirm, VoidCallback? clickCancel}) {
+    EventHandler.report(EventId.event_02006);
     SmartDialog.show(
       tag: tag,
       backType: SmartBackType.block,
@@ -181,6 +184,7 @@ class DiscountTicketDialog {
                                     SizedBox(height: 9.h),
                                     GestureDetector(
                                       onTap: () {
+                                        EventHandler.report(EventId.event_02007);
                                         clickConfirm?.call();
                                         SmartDialog.dismiss(tag: tag);
                                       },
@@ -261,6 +265,7 @@ class DiscountTicketDialog {
                     margin: EdgeInsets.only(top: 24.h),
                     child: GestureDetector(
                       onTap: () {
+                        EventHandler.report(EventId.event_02008);
                         SmartDialog.dismiss(tag: tag);
                         clickCancel?.call();
                       },

+ 10 - 0
lib/widget/heart_fill_view.dart

@@ -8,6 +8,7 @@ import '../resource/assets.gen.dart';
 class HeartFillAnimation extends StatefulWidget {
   const HeartFillAnimation({
     super.key,
+
     required this.fillProgress,
     this.width = 250.0,
   });
@@ -38,6 +39,14 @@ class _HeartFillAnimationState extends State<HeartFillAnimation>
     super.dispose();
   }
 
+  void start() {
+    _waveController.repeat();
+  }
+
+  void stop() {
+    _waveController.stop();
+  }
+
   @override
   Widget build(BuildContext context) {
     final height = widget.width * 208 / 250;
@@ -163,4 +172,5 @@ class HeartFillPainter extends CustomPainter {
     return fillProgress != oldDelegate.fillProgress ||
         waveOffset != oldDelegate.waveOffset;
   }
+
 }