| 062f0df2  liangchengyou
 
feat:登录模块代码提交 | 1 |   import 'dart:async';
 | 
| cc3b183a  liangchengyou
 
feat:ios启动图/logo | 2 |   import 'dart:io';
 | 
| a4d8eaa2  Key
 
feat: 登录时账户有效性校验 | 3 |   import 'dart:math';
 | 
| 062f0df2  liangchengyou
 
feat:登录模块代码提交 | 4 |   
 | 
| 1892df31  Key
 
优化接口调用 | 5 |   import 'package:flutter/foundation.dart';
 | 
| 2a29701f  liangchengyou
 
feat:提交代码 | 6 |   import 'package:flutter/material.dart';
 | 
| a4d8eaa2  Key
 
feat: 登录时账户有效性校验 | 7
8 |   import 'package:flutter/services.dart';
  import 'package:limiting_direction_csx/limiting_direction_csx.dart';
 | 
| 27dad3d1  吴启风
 
feat:集成友盟统计 | 9 |   import 'package:umeng_common_sdk/umeng_common_sdk.dart';
 | 
| 28f20da9  吴启风
 
feat:针对apple审核对支付... | 10 |   import 'package:wow_english/common/core/app_config_helper.dart';
 | 
| 94342c3f  Key
 
feat: user util | 11 |   import 'package:wow_english/common/core/user_util.dart';
 | 
| 062f0df2  liangchengyou
 
feat:登录模块代码提交 | 12 |   import 'package:wow_english/common/extension/string_extension.dart';
 | 
| a4d8eaa2  Key
 
feat: 登录时账户有效性校验 | 13 |   import 'package:wow_english/common/request/config.dart';
 | 
| e55bbdf3  Key
 
fixed: aliyun oss... | 14 |   import 'package:wow_english/common/request/dao/user_dao.dart';
 | 
| 94342c3f  Key
 
feat: user util | 15 |   import 'package:wow_english/models/user_entity.dart';
 | 
| 2a29701f  liangchengyou
 
feat:提交代码 | 16 |   import 'package:wow_english/route/route.dart';
 | 
| 0e314ad5  吴启风
 
feat:开屏页播放背景音乐wel... | 17 |   import 'package:wow_english/utils/audio_player_util.dart';
 | 
| a4d8eaa2  Key
 
feat: 登录时账户有效性校验 | 18 |   import 'package:wow_english/utils/log_util.dart';
 | 
| 94342c3f  Key
 
feat: user util | 19 |   import 'package:wow_english/utils/sp_util.dart';
 | 
| 062f0df2  liangchengyou
 
feat:登录模块代码提交 | 20 |   
 | 
| 2a9895f6  吴启风
 
feat:首次启动隐私协议弹窗 | 21 |   import '../common/core/app_consts.dart';
 | 
| 42f15f6c  吴启风
 
feat:模块选择持久化&模块主题... | 22 |   import '../common/core/module_cache.dart';
 | 
| 2a9895f6  吴启风
 
feat:首次启动隐私协议弹窗 | 23
24 |   import '../common/widgets/webview_dialog.dart';
  
 | 
| a117a5a3  liangchengyou
 
feat:更新代码 | 25
26 |   class SplashPage extends StatelessWidget {
    const SplashPage({super.key});
 | 
| 2a29701f  liangchengyou
 
feat:提交代码 | 27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43 |   
    @override
    Widget build(BuildContext context) {
      return const TransitionView();
    }
  }
  
  class TransitionView extends StatefulWidget {
    const TransitionView({super.key});
  
    @override
    State<StatefulWidget> createState() {
      return _TransitionViewState();
    }
  }
  
  class _TransitionViewState extends State<TransitionView> {
 | 
| 062f0df2  liangchengyou
 
feat:登录模块代码提交 | 44 |     Future startTime() async {
 | 
| 94342c3f  Key
 
feat: user util | 45
46 |       // 判断是否登录
      UserEntity? userEntity = UserUtil.getUser();
 | 
| a4d8eaa2  Key
 
feat: 登录时账户有效性校验 | 47
48 |       Log.d('当前模式:kDebugMode=$kDebugMode, kProfileMode=$kProfileMode, kReleaseMode=$kReleaseMode');
      Log.d('当前API地址:${RequestConfig.baseUrl}');
 | 
| e55bbdf3  Key
 
fixed: aliyun oss... | 49
50
51
52 |       //BuildContext context = Navigator.of(context).context;
      //var currentPageName = ModalRoute.of(Navigator.of(AppRouter.context))?.settings.name;
      //Log.d('Splash读当前页面:$currentPageName');
      Log.d('Splash读本地, userEntity: $userEntity');
 | 
| a4d8eaa2  Key
 
feat: 登录时账户有效性校验 | 53 |       int apartInMilliseconds = 0;
 | 
| 8fec4713  吴启风
 
feat:启动请求失败阻塞优化 | 54 |       // 获取系统配置信息
 | 
| c4458dc6  吴启风
 
feat:启动页必要接口增加失败重试 | 55 |       AppConfigHelper.getAppConfig();
 | 
| a4d8eaa2  Key
 
feat: 登录时账户有效性校验 | 56 |       // 调一下接口判断一下有效性再往下
 | 
| 278208b8  吴启风
 
feat:1、用户访问权限调整;2... | 57
58 |       if (userEntity != null && userEntity.token != null) {
        String token = userEntity.token!;
 | 
| a4d8eaa2  Key
 
feat: 登录时账户有效性校验 | 59 |         DateTime startTime = DateTime.now();
 | 
| c4458dc6  吴启风
 
feat:启动页必要接口增加失败重试 | 60 |         await fetchNecessaryData(token);
 | 
| a4d8eaa2  Key
 
feat: 登录时账户有效性校验 | 61 |         apartInMilliseconds = DateTime.now().difference(startTime).inMilliseconds;
 | 
| 1892df31  Key
 
优化接口调用 | 62 |       }
 | 
| 9e14f47a  吴启风
 
feat:解决开场音乐前点击(带音... | 63 |       int duration = max(1500 - apartInMilliseconds, 0);
 | 
| e55bbdf3  Key
 
fixed: aliyun oss... | 64 |       Log.d('Splash getUserInfo 耗时:${apartInMilliseconds}ms, 最终duration=$duration');
 | 
| a4d8eaa2  Key
 
feat: 登录时账户有效性校验 | 65 |       Timer(Duration(milliseconds: duration), () {
 | 
| 210d15e0  Key
 
fixed: 账户注销接口 | 66 |         /*if (userEntity != null) {
 | 
| 08a0f5a8  liangchengyou
 
feat:路由方式更新 | 67 |           pushNamedAndRemoveUntil(AppRouteName.home, (route) => false);
 | 
| 062f0df2  liangchengyou
 
feat:登录模块代码提交 | 68 |         } else {
 | 
| 08a0f5a8  liangchengyou
 
feat:路由方式更新 | 69 |           pushNamedAndRemoveUntil(AppRouteName.login, (route) => false);
 | 
| 210d15e0  Key
 
fixed: 账户注销接口 | 70 |         }*/
 | 
| 2a9895f6  吴启风
 
feat:首次启动隐私协议弹窗 | 71
72 |         bool isAggreementAccepted = AppConfigHelper.getAgreementAccepted();
        if (isAggreementAccepted) {
 | 
| 27dad3d1  吴启风
 
feat:集成友盟统计 | 73 |           _initData();
 | 
| 2a9895f6  吴启风
 
feat:首次启动隐私协议弹窗 | 74
75
76
77
78 |         } else {
          showDialog(
            context: context,
            barrierDismissible: false,
            builder: (BuildContext context) {
 | 
| 9e14f47a  吴启风
 
feat:解决开场音乐前点击(带音... | 79
80
81
82
83 |               return PopScope(
                canPop: false,
                onPopInvoked: (didPop) {
                  Log.d('WQF isAggreementAccepted onPopInvoked didPop=$didPop');
                },
 | 
| 2a9895f6  吴启风
 
feat:首次启动隐私协议弹窗 | 84
85
86 |                 child: WebviewDialog(
                  title: "服务条款及隐私政策",
                  webUrl: AppConsts.userPrivacyPolicyUrl,
 | 
| 09fb1af9  吴启风
 
feat:flutter_inap... | 87
88 |                   leftButtonText: '同意并继续',
                  rightButtonText: '不同意,退出应用',
 | 
| 2a9895f6  吴启风
 
feat:首次启动隐私协议弹窗 | 89
90 |                   leftTap: () {
                    AppConfigHelper.saveAgreementAccepted(true);
 | 
| 27dad3d1  吴启风
 
feat:集成友盟统计 | 91 |                     _initData();
 | 
| 2a9895f6  吴启风
 
feat:首次启动隐私协议弹窗 | 92
93
94 |                   },
                  rightTap: () {
                    // 退出应用
 | 
| 258578de  吴启风
 
feat:修复ios上退出应用失效问题 | 95 |                     AppConfigHelper.exitApp();
 | 
| 2a9895f6  吴启风
 
feat:首次启动隐私协议弹窗 | 96
97
98
99
100
101 |                   },
                ),
              );
            },
          );
        }
 | 
| 062f0df2  liangchengyou
 
feat:登录模块代码提交 | 102
103
104 |       });
    }
  
 | 
| 27dad3d1  吴启风
 
feat:集成友盟统计 | 105
106
107
108
109
110 |     ///初始化数据
    void _initData() {
      UmengCommonSdk.initCommon("663b66b0b3362515012f4ea5", "663b66ecf32cc41105ae74b7", "official");
      pushNamedAndRemoveUntil(AppRouteName.home, (route) => false);
    }
  
 | 
| 8fec4713  吴启风
 
feat:启动请求失败阻塞优化 | 111
112
113 |     Future<void> fetchNecessaryData(String userToken,
        {Completer<void>? completer}) async {
      completer ??= Completer<void>();
 | 
| c4458dc6  吴启风
 
feat:启动页必要接口增加失败重试 | 114
115
116
117
118
119
120
121
122 |       // 获取用户信息
      try {
        UserEntity? userEntity = await UserDao.getUserInfo();
        Log.d('Splash在线更新, userEntity: $userEntity');
        if (userEntity != null) {
          userEntity.token = userToken;
          Log.d('Splash重设token, userEntity: $userEntity');
          UserUtil.saveUser(userEntity);
        }
 | 
| 8fec4713  吴启风
 
feat:启动请求失败阻塞优化 | 123
124 |         //todo 如果为null是否需要清除用户信息?
        completer.complete();
 | 
| c4458dc6  吴启风
 
feat:启动页必要接口增加失败重试 | 125 |       } catch (e) {
 | 
| 8fec4713  吴启风
 
feat:启动请求失败阻塞优化 | 126 |         debugPrint('Splash获取用户信息异常:$e');
 | 
| c4458dc6  吴启风
 
feat:启动页必要接口增加失败重试 | 127
128
129
130
131 |         //异常的话弹窗提示重试
        showDialog(
          context: context,
          barrierDismissible: false,
          builder: (BuildContext context) {
 | 
| 9e14f47a  吴启风
 
feat:解决开场音乐前点击(带音... | 132
133
134
135
136 |             return PopScope(
              canPop: false,
              onPopInvoked: (didPop) {
                Log.d('WQF fetchNecessaryData onPopInvoked didPop=$didPop');
              },
 | 
| c4458dc6  吴启风
 
feat:启动页必要接口增加失败重试 | 137
138
139
140
141 |               child: AlertDialog(
                title: const Text('温馨提示'),
                content: const Text('网络异常,请检查网络后重试'),
                actions: <Widget>[
                  TextButton(
 | 
| 8fec4713  吴启风
 
feat:启动请求失败阻塞优化 | 142
143
144
145
146
147
148 |                       child: const Text('退出'),
                      onPressed: () => {
                            // 关闭对话框并重试
                            Navigator.of(context).pop(),
                            AppConfigHelper.exitApp(),
                            completer?.complete(),
                          }),
 | 
| c4458dc6  吴启风
 
feat:启动页必要接口增加失败重试 | 149
150
151 |                   TextButton(
                    child: const Text('重试'),
                    onPressed: () async {
 | 
| 8fec4713  吴启风
 
feat:启动请求失败阻塞优化 | 152
153
154
155 |                       // 关闭对话框并重试
                      Navigator.of(context).pop();
                      await fetchNecessaryData(userToken, completer: completer);
                      completer?.complete();
 | 
| c4458dc6  吴启风
 
feat:启动页必要接口增加失败重试 | 156
157
158
159
160
161
162
163
164 |                     },
                  ),
                ],
              ),
            );
          },
        );
        e.logE();
      }
 | 
| 8fec4713  吴启风
 
feat:启动请求失败阻塞优化 | 165
166 |       // 等待completer完成,这会阻塞后续代码的执行,直到用户做出选择
      await completer.future;
 | 
| c4458dc6  吴启风
 
feat:启动页必要接口增加失败重试 | 167
168 |     }
  
 | 
| 062f0df2  liangchengyou
 
feat:登录模块代码提交 | 169
170
171 |     @override
    void initState() {
      super.initState();
 | 
| 089ccd5c  Key
 
fixed: user util ... | 172
173
174
175 |       init();
    }
  
    void init() async {
 | 
| 0e314ad5  吴启风
 
feat:开屏页播放背景音乐wel... | 176 |       changeDevice();
 | 
| 089ccd5c  Key
 
fixed: user util ... | 177 |       await SpUtil.preInit();
 | 
| 42f15f6c  吴启风
 
feat:模块选择持久化&模块主题... | 178 |       ModuleCache.instance.init();
 | 
| 9e14f47a  吴启风
 
feat:解决开场音乐前点击(带音... | 179 |       await AudioPlayerUtil.getInstance().playAudio(AudioPlayerUtilType.welcomeToWow);
 | 
| 062f0df2  liangchengyou
 
feat:登录模块代码提交 | 180 |       startTime();
 | 
| cc3b183a  liangchengyou
 
feat:ios启动图/logo | 181
182
183
184
185
186
187
188 |     }
  
    void changeDevice() async {
      ///设置设备默认方向
      WidgetsFlutterBinding.ensureInitialized();
      if (Platform.isIOS) {
        await LimitingDirectionCsx.setScreenDirection(DeviceDirectionMask.Landscape);
      } else {
 | 
| a4d8eaa2  Key
 
feat: 登录时账户有效性校验 | 189 |         await SystemChrome.setPreferredOrientations([DeviceOrientation.landscapeLeft, DeviceOrientation.landscapeRight]);
 | 
| cc3b183a  liangchengyou
 
feat:ios启动图/logo | 190 |       }
 | 
| 1f01c7f0  吴启风
 
fix:修复部分设备(比如华为p3... | 191 |       await SystemChrome.setEnabledSystemUIMode(SystemUiMode.immersiveSticky);
 | 
| 062f0df2  liangchengyou
 
feat:登录模块代码提交 | 192
193 |     }
  
 | 
| 2a29701f  liangchengyou
 
feat:提交代码 | 194
195
196 |     @override
    Widget build(BuildContext context) {
      return Scaffold(
 | 
| 2a29701f  liangchengyou
 
feat:提交代码 | 197 |         body: Center(
 | 
| 062f0df2  liangchengyou
 
feat:登录模块代码提交 | 198
199
200
201 |           child: Container(
            decoration: BoxDecoration(
                image: DecorationImage(
                    image: AssetImage(
 | 
| 1d5315dd  liangchengyou
 
feat:添加字体,调整文件结构 | 202 |                       'splash'.assetGif,
 | 
| 062f0df2  liangchengyou
 
feat:登录模块代码提交 | 203 |                     ),
 | 
| 94342c3f  Key
 
feat: user util | 204 |                     fit: BoxFit.fill)),
 | 
| 2a29701f  liangchengyou
 
feat:提交代码 | 205
206
207
208 |           ),
        ),
      );
    }
 | 
| 056970d8  Key
 
feat: api | 209 |   }
 |