splash_page.dart 3.56 KB
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/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';

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<StatefulWidget> createState() {
    return _TransitionViewState();
  }
}

class _TransitionViewState extends State<TransitionView> {
  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;
    // 调一下接口判断一下有效性再往下
    if (userEntity != 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);
      }*/
      pushNamedAndRemoveUntil(AppRouteName.home, (route) => false);
    });
  }

  @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)),
        ),
      ),
    );
  }
}