| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- import 'dart:async';
- import 'dart:io';
- import 'package:flutter/services.dart';
- import 'package:get/get_utils/src/platform/platform.dart';
- import 'package:injectable/injectable.dart';
- import 'package:location/base/base_controller.dart';
- import 'package:location/data/api/response/member_status_response.dart';
- import 'package:location/data/repositories/account_repository.dart';
- import 'package:location/dialog/agreement_dialog.dart';
- import 'package:location/module/main/main_page.dart';
- import 'package:location/module/member/activity/member_activity_page.dart';
- import 'package:location/sdk/umeng/umeng_helper.dart';
- import 'package:location/utils/date_util.dart';
- import '../../data/consts/error_code.dart';
- import '../../utils/async_util.dart';
- import '../../utils/http_handler.dart';
- import '../../utils/privacy_compliance.dart';
- @injectable
- class SplashController extends BaseController {
- final splashDelayedTime = 2;
- DateTime? splashStartTime;
- SplashController();
- @override
- void onReady() {
- final isAgreePrivacy = PrivacyCompliance.isAgreePrivacyPolicy();
- if (isAgreePrivacy) {
- _doSplashTask();
- } else {
- AgreementDialog.show(cancelClick: () {
- exitApp();
- }, sureClick: () async {
- await _agreePrivacy();
- _doSplashTask();
- });
- }
- }
- void _doSplashTask() async {
- //获取用户会员信息
- splashStartTime = DateUtil.getNow();
- AsyncUtil.retry(() => AccountRepository.getInstance().getMemberStatus(),
- Duration(seconds: 1), timeout: Duration(seconds: 6), maxRetry: 6,
- predicate: (error) {
- if (error is ServerErrorException) {
- return error.code != ErrorCode.noLoginError;
- }
- return true;
- }).then((info) {
- _memberCheckNextStep(response: info);
- }).catchError((error) {
- _memberCheckNextStep();
- });
- }
- void _memberCheckNextStep({MemberStatusResponse? response}) {
- final endTime = DateUtil.getNow();
- final duration = endTime.difference(splashStartTime!);
- final splashDelayedTime = this.splashDelayedTime * 1000;
- final int remainTimeMilliseconds =
- duration.inMilliseconds < splashDelayedTime
- ? splashDelayedTime - duration.inMilliseconds
- : 0;
- if (response != null && !response.expired) {
- _goMain(Duration(milliseconds: remainTimeMilliseconds));
- } else {
- _goMemberActivity(Duration(milliseconds: remainTimeMilliseconds));
- }
- }
- void _goMemberActivity(Duration delayTime) {
- Timer(delayTime, () {
- MemberActivityPage.start(isOffAll: true);
- });
- }
- void _goMain(Duration delayTime, {Map<String, dynamic>? arguments}) {
- Timer(delayTime, () {
- MainPage.start(arguments: arguments);
- });
- }
- void exitApp() {
- if (GetPlatform.isAndroid) {
- SystemNavigator.pop();
- } else {
- exit(0);
- }
- }
- _agreePrivacy() async {
- await UmengHelper.setPolicyGrantResult(true);
- await PrivacyCompliance.setPrivacyPolicy(true);
- }
- }
|