فهرست منبع

[new]调整先跳会员页再跳首页

zk 3 ماه پیش
والد
کامیت
d291eafb52

+ 0 - 14
lib/module/main/main_controller.dart

@@ -93,7 +93,6 @@ class MainController extends BaseController {
 
   DateTime? _lastPressedAt;
   DateTime? _lastRequestFavor;
-  bool isFirstShowMemberPage = true;
   String? lastCheckFriendId;
   bool isExecuteAutoSelect = false;
 
@@ -160,11 +159,9 @@ class MainController extends BaseController {
       _updateMineLocation(location);
     });
 
-    _isShowAppStartMemberPage(accountRepository.memberStatusInfo.value);
     //根据会员状态刷新好友列表
     memberStatusInfoSubscription =
         accountRepository.memberStatusInfo.listen((memberStatus) {
-      _isShowAppStartMemberPage(memberStatus);
       if (memberStatus != null) {
         _updateFriendList(_friendsList);
       }
@@ -174,17 +171,6 @@ class MainController extends BaseController {
     _refreshTrackDailyDialogs();
   }
 
-  void _isShowAppStartMemberPage(MemberStatusInfo? memberInfo) async {
-    if (memberInfo == null) {
-      return;
-    }
-    if (memberInfo.expired && isFirstShowMemberPage == true ||
-        !accountRepository.isLogin.value) {
-      isFirstShowMemberPage = false;
-      await Future.delayed(Duration(milliseconds: 300));
-      MemberPage.start(enterTyp: MemberPageType.activity);
-    }
-  }
 
   void _updateMineLocation(LocationInfo? location) {
     final mineInfo = accountRepository.mineUserInfo.value;

+ 6 - 1
lib/module/member/activity/member_activity_controller.dart

@@ -21,6 +21,7 @@ import '../../../resource/string.gen.dart';
 import '../../../utils/async_util.dart';
 import '../../../utils/toast_util.dart';
 import '../../browser/browser_view.dart';
+import '../../main/main_page.dart';
 
 @injectable
 class MemberActivityController extends BaseController {
@@ -94,7 +95,11 @@ class MemberActivityController extends BaseController {
   }
 
   void onBack() {
-    Get.back();
+    if (Get.key.currentState?.canPop() == true) {
+      Get.back();
+    } else {
+      MainPage.start();
+    }
   }
 
   void onBuyClick() {

+ 21 - 8
lib/module/member/activity/member_activity_page.dart

@@ -25,8 +25,12 @@ import 'member_activity_controller.dart';
 class MemberActivityPage extends BasePage<MemberActivityController> {
   const MemberActivityPage({super.key});
 
-  static void start() {
-    Get.toNamed(RoutePath.memberActivity);
+  static void start({bool isOffAll = false}) {
+    if (isOffAll) {
+      Get.offAllNamed(RoutePath.memberActivity);
+    } else {
+      Get.toNamed(RoutePath.memberActivity);
+    }
   }
 
   @override
@@ -41,12 +45,21 @@ class MemberActivityPage extends BasePage<MemberActivityController> {
 
   @override
   Widget buildBody(BuildContext context) {
-    return Stack(
-      children: [
-        buildActivityContent(),
-        buildToolbar(),
-        buildMemberBottomView()
-      ],
+    return PopScope(
+      canPop: false,
+      onPopInvokedWithResult: (bool didPop, dynamic result) {
+        if (didPop) {
+          return;
+        }
+        controller.onBack();
+      },
+      child: Stack(
+        children: [
+          buildActivityContent(),
+          buildToolbar(),
+          buildMemberBottomView()
+        ],
+      ),
     );
   }
 

+ 50 - 4
lib/module/splash/splash_controller.dart

@@ -5,33 +5,79 @@ 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) {
-      isAgreePrivacyNextStep(splashDelayedTime);
+      _doSplashTask();
     } else {
       AgreementDialog.show(cancelClick: () {
         exitApp();
       }, sureClick: () async {
         await _agreePrivacy();
-        isAgreePrivacyNextStep(0);
+        _doSplashTask();
       });
     }
   }
 
-  void isAgreePrivacyNextStep(int splashDelayedTime) {
-    _goMain(Duration(seconds: splashDelayedTime));
+  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}) {

+ 1 - 1
pubspec.yaml

@@ -16,7 +16,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev
 # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
 # In Windows, build-name is used as the major, minor, and patch parts
 # of the product and file versions while build-number is used as the build suffix.
-version: 1.1.2+112
+version: 1.1.3+113
 
 environment:
   sdk: ^3.5.0