Blame view

lib/app/splash_page.dart 5.64 KB
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';
28f20da9   吴启风   feat:针对apple审核对支付...
9
  import 'package:wow_english/common/core/app_config_helper.dart';
94342c3f   Key   feat: user util
10
  import 'package:wow_english/common/core/user_util.dart';
062f0df2   liangchengyou   feat:登录模块代码提交
11
  import 'package:wow_english/common/extension/string_extension.dart';
a4d8eaa2   Key   feat: 登录时账户有效性校验
12
  import 'package:wow_english/common/request/config.dart';
e55bbdf3   Key   fixed: aliyun oss...
13
  import 'package:wow_english/common/request/dao/user_dao.dart';
94342c3f   Key   feat: user util
14
  import 'package:wow_english/models/user_entity.dart';
2a29701f   liangchengyou   feat:提交代码
15
  import 'package:wow_english/route/route.dart';
a4d8eaa2   Key   feat: 登录时账户有效性校验
16
  import 'package:wow_english/utils/log_util.dart';
94342c3f   Key   feat: user util
17
  import 'package:wow_english/utils/sp_util.dart';
062f0df2   liangchengyou   feat:登录模块代码提交
18
  
2a9895f6   吴启风   feat:首次启动隐私协议弹窗
19
20
21
  import '../common/core/app_consts.dart';
  import '../common/widgets/webview_dialog.dart';
  
a117a5a3   liangchengyou   feat:更新代码
22
23
  class SplashPage extends StatelessWidget {
    const SplashPage({super.key});
2a29701f   liangchengyou   feat:提交代码
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
  
    @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:登录模块代码提交
41
    Future startTime() async {
94342c3f   Key   feat: user util
42
43
      // 判断是否登录
      UserEntity? userEntity = UserUtil.getUser();
a4d8eaa2   Key   feat: 登录时账户有效性校验
44
45
      Log.d('当前模式:kDebugMode=$kDebugMode, kProfileMode=$kProfileMode, kReleaseMode=$kReleaseMode');
      Log.d('当前API地址:${RequestConfig.baseUrl}');
e55bbdf3   Key   fixed: aliyun oss...
46
47
48
49
      //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: 登录时账户有效性校验
50
      int apartInMilliseconds = 0;
28f20da9   吴启风   feat:针对apple审核对支付...
51
      // 阻塞获取系统配置信息
c4458dc6   吴启风   feat:启动页必要接口增加失败重试
52
      AppConfigHelper.getAppConfig();
a4d8eaa2   Key   feat: 登录时账户有效性校验
53
      // 调一下接口判断一下有效性再往下
278208b8   吴启风   feat:1、用户访问权限调整;2...
54
55
      if (userEntity != null && userEntity.token != null) {
        String token = userEntity.token!;
a4d8eaa2   Key   feat: 登录时账户有效性校验
56
        DateTime startTime = DateTime.now();
c4458dc6   吴启风   feat:启动页必要接口增加失败重试
57
        await fetchNecessaryData(token);
a4d8eaa2   Key   feat: 登录时账户有效性校验
58
        apartInMilliseconds = DateTime.now().difference(startTime).inMilliseconds;
1892df31   Key   优化接口调用
59
      }
a4d8eaa2   Key   feat: 登录时账户有效性校验
60
      int duration = max(2000 - apartInMilliseconds, 0);
e55bbdf3   Key   fixed: aliyun oss...
61
      Log.d('Splash getUserInfo 耗时:${apartInMilliseconds}ms, 最终duration=$duration');
a4d8eaa2   Key   feat: 登录时账户有效性校验
62
      Timer(Duration(milliseconds: duration), () {
210d15e0   Key   fixed: 账户注销接口
63
        /*if (userEntity != null) {
08a0f5a8   liangchengyou   feat:路由方式更新
64
          pushNamedAndRemoveUntil(AppRouteName.home, (route) => false);
062f0df2   liangchengyou   feat:登录模块代码提交
65
        } else {
08a0f5a8   liangchengyou   feat:路由方式更新
66
          pushNamedAndRemoveUntil(AppRouteName.login, (route) => false);
210d15e0   Key   fixed: 账户注销接口
67
        }*/
2a9895f6   吴启风   feat:首次启动隐私协议弹窗
68
69
        bool isAggreementAccepted = AppConfigHelper.getAgreementAccepted();
        if (isAggreementAccepted) {
2187c85f   吴启风   feat:课程结构调整
70
          pushNamedAndRemoveUntil(AppRouteName.home, (route) => false);
2a9895f6   吴启风   feat:首次启动隐私协议弹窗
71
72
73
74
75
76
77
78
79
80
81
82
83
        } else {
          showDialog(
            context: context,
            barrierDismissible: false,
            builder: (BuildContext context) {
              return WillPopScope(
                onWillPop: () => Future.value(false),
                child: WebviewDialog(
                  title: "服务条款及隐私政策",
                  webUrl: AppConsts.userPrivacyPolicyUrl,
                  leftTap: () {
                    AppConfigHelper.saveAgreementAccepted(true);
                    pushNamedAndRemoveUntil(
2187c85f   吴启风   feat:课程结构调整
84
                        AppRouteName.home, (route) => false);
2a9895f6   吴启风   feat:首次启动隐私协议弹窗
85
86
87
                  },
                  rightTap: () {
                    // 退出应用
258578de   吴启风   feat:修复ios上退出应用失效问题
88
                    AppConfigHelper.exitApp();
2a9895f6   吴启风   feat:首次启动隐私协议弹窗
89
90
91
92
93
94
                  },
                ),
              );
            },
          );
        }
062f0df2   liangchengyou   feat:登录模块代码提交
95
96
97
      });
    }
  
c4458dc6   吴启风   feat:启动页必要接口增加失败重试
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
    Future<void> fetchNecessaryData(String userToken) async {
      // 获取用户信息
      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);
        }
      } catch (e) {
        //异常的话弹窗提示重试
        showDialog(
          context: context,
          barrierDismissible: false,
          builder: (BuildContext context) {
            return WillPopScope(
              onWillPop: () => Future.value(false),
              child: AlertDialog(
                title: const Text('温馨提示'),
                content: const Text('网络异常,请检查网络后重试'),
                actions: <Widget>[
                  TextButton(
                    child: const Text('退出'),
                    onPressed: () => AppConfigHelper.exitApp()
                  ),
                  TextButton(
                    child: const Text('重试'),
                    onPressed: () async {
                      fetchNecessaryData(userToken);
                    },
                  ),
                ],
              ),
            );
          },
        );
        e.logE();
      }
    }
  
062f0df2   liangchengyou   feat:登录模块代码提交
139
140
141
    @override
    void initState() {
      super.initState();
089ccd5c   Key   fixed: user util ...
142
143
144
145
146
      init();
    }
  
    void init() async {
      await SpUtil.preInit();
062f0df2   liangchengyou   feat:登录模块代码提交
147
      startTime();
cc3b183a   liangchengyou   feat:ios启动图/logo
148
149
150
151
152
153
154
155
156
      changeDevice();
    }
  
    void changeDevice() async {
      ///设置设备默认方向
      WidgetsFlutterBinding.ensureInitialized();
      if (Platform.isIOS) {
        await LimitingDirectionCsx.setScreenDirection(DeviceDirectionMask.Landscape);
      } else {
a4d8eaa2   Key   feat: 登录时账户有效性校验
157
        await SystemChrome.setPreferredOrientations([DeviceOrientation.landscapeLeft, DeviceOrientation.landscapeRight]);
cc3b183a   liangchengyou   feat:ios启动图/logo
158
      }
062f0df2   liangchengyou   feat:登录模块代码提交
159
160
    }
  
2a29701f   liangchengyou   feat:提交代码
161
162
163
    @override
    Widget build(BuildContext context) {
      return Scaffold(
2a29701f   liangchengyou   feat:提交代码
164
        body: Center(
062f0df2   liangchengyou   feat:登录模块代码提交
165
166
167
168
          child: Container(
            decoration: BoxDecoration(
                image: DecorationImage(
                    image: AssetImage(
1d5315dd   liangchengyou   feat:添加字体,调整文件结构
169
                      'splash'.assetGif,
062f0df2   liangchengyou   feat:登录模块代码提交
170
                    ),
94342c3f   Key   feat: user util
171
                    fit: BoxFit.fill)),
2a29701f   liangchengyou   feat:提交代码
172
173
174
175
          ),
        ),
      );
    }
056970d8   Key   feat: api
176
  }