import 'dart:async'; import 'dart:io'; import 'dart:math'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:limiting_direction_csx/limiting_direction_csx.dart'; import 'package:wow_english/common/core/app_config_helper.dart'; import 'package:wow_english/common/core/user_util.dart'; import 'package:wow_english/common/extension/string_extension.dart'; import 'package:wow_english/common/request/config.dart'; import 'package:wow_english/common/request/dao/user_dao.dart'; import 'package:wow_english/models/user_entity.dart'; import 'package:wow_english/route/route.dart'; import 'package:wow_english/utils/log_util.dart'; import 'package:wow_english/utils/sp_util.dart'; import '../common/core/app_consts.dart'; import '../common/widgets/webview_dialog.dart'; class SplashPage extends StatelessWidget { const SplashPage({super.key}); @override Widget build(BuildContext context) { return const TransitionView(); } } class TransitionView extends StatefulWidget { const TransitionView({super.key}); @override State createState() { return _TransitionViewState(); } } class _TransitionViewState extends State { Future startTime() async { // 判断是否登录 UserEntity? userEntity = UserUtil.getUser(); Log.d('当前模式:kDebugMode=$kDebugMode, kProfileMode=$kProfileMode, kReleaseMode=$kReleaseMode'); Log.d('当前API地址:${RequestConfig.baseUrl}'); //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'); int apartInMilliseconds = 0; // 阻塞获取系统配置信息 await AppConfigHelper.getAppConfig(); // 调一下接口判断一下有效性再往下 if (userEntity != null && userEntity.token != null) { String token = userEntity.token!; DateTime startTime = DateTime.now(); try { userEntity = await UserDao.getUserInfo(); Log.d('Splash在线更新, userEntity: $userEntity'); if (userEntity != null) { userEntity.token = token; Log.d('Splash重设token, userEntity: $userEntity'); UserUtil.saveUser(userEntity); } } catch (e) { e.logE(); } apartInMilliseconds = DateTime.now().difference(startTime).inMilliseconds; } int duration = max(2000 - apartInMilliseconds, 0); Log.d('Splash getUserInfo 耗时:${apartInMilliseconds}ms, 最终duration=$duration'); Timer(Duration(milliseconds: duration), () { /*if (userEntity != null) { pushNamedAndRemoveUntil(AppRouteName.home, (route) => false); } else { pushNamedAndRemoveUntil(AppRouteName.login, (route) => false); }*/ bool isAggreementAccepted = AppConfigHelper.getAgreementAccepted(); if (isAggreementAccepted) { pushNamedAndRemoveUntil(AppRouteName.home, (route) => false); } 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( AppRouteName.home, (route) => false); }, rightTap: () { // 退出应用 AppConfigHelper.exitApp(); }, ), ); }, ); } }); } @override void initState() { super.initState(); init(); } void init() async { await SpUtil.preInit(); startTime(); changeDevice(); } void changeDevice() async { ///设置设备默认方向 WidgetsFlutterBinding.ensureInitialized(); if (Platform.isIOS) { await LimitingDirectionCsx.setScreenDirection(DeviceDirectionMask.Landscape); } else { await SystemChrome.setPreferredOrientations([DeviceOrientation.landscapeLeft, DeviceOrientation.landscapeRight]); } } @override Widget build(BuildContext context) { return Scaffold( body: Center( child: Container( decoration: BoxDecoration( image: DecorationImage( image: AssetImage( 'splash'.assetGif, ), fit: BoxFit.fill)), ), ), ); } }