浏览代码

[new]首页增加冷启动自动选中功能

zk 10 月之前
父节点
当前提交
4f19bb2c11

+ 2 - 0
lib/data/consts/constants.dart

@@ -37,6 +37,8 @@ class Constants {
 
   static const double blurredX = 4.2;
   static const double blurredY = 4.2;
+
+  static const String keyLastSelectFriendId = 'key_last_select_friend_id';
 }
 
 String getBaseUrl() {

+ 1 - 0
lib/data/repositories/account_repository.dart

@@ -137,6 +137,7 @@ class AccountRepository {
     KVUtil.putString(keyAccountLoginPhoneNum, null);
     KVUtil.putString(keyAccountLoginToken, null);
     KVUtil.putString(keyAccountLoginUserId, null);
+    KVUtil.putString(Constants.keyLastSelectFriendId, null);
     loginPhoneNum.value = null;
     memberStatusInfo.value = null;
 

+ 31 - 6
lib/module/main/main_controller.dart

@@ -23,6 +23,7 @@ import 'package:location/module/urgent_contact/urgent_contact_page.dart';
 import 'package:location/resource/string.gen.dart';
 import 'package:location/sdk/map/map_helper.dart';
 import 'package:location/utils/base_expand.dart';
+import 'package:location/utils/mmkv_util.dart';
 import 'package:location/utils/toast_util.dart';
 import '../../data/repositories/config_repository.dart';
 import '../../data/repositories/urgent_contact_repository.dart';
@@ -69,6 +70,9 @@ class MainController extends BaseController {
 
   DateTime? _lastPressedAt;
 
+  String? lastCheckFriendId;
+  bool isExecuteAutoSelect = false;
+
   MainController(
       this.friendsRepository,
       this.accountRepository,
@@ -81,6 +85,7 @@ class MainController extends BaseController {
   void onReady() {
     super.onReady();
     integrateList.add(mineUserInfo);
+    initLastCheckFriendId();
 
     AddFriendDialog.show(
         onAddClick: () async {
@@ -106,6 +111,7 @@ class MainController extends BaseController {
             .firstWhereOrNull((element) => element.id == selectedFriend?.id);
         _selectedFriend.value = userInfo;
       }
+      _autoSelectFriend();
     });
     mineLocationSubscription =
         accountRepository.mineUserInfo.value.lastLocation.listen((location) {
@@ -135,7 +141,12 @@ class MainController extends BaseController {
     }
   }
 
-  void onSelectClick(UserInfo userInfo) {
+  void onSelectUserClick(UserInfo userInfo) {
+    KVUtil.putString(Constants.keyLastSelectFriendId, userInfo.id);
+    _setSelectUserInfo(userInfo);
+  }
+
+  void _setSelectUserInfo(UserInfo userInfo) {
     UserInfo? oldInfo = _selectedFriend.value;
     _selectedFriend.value = userInfo;
     //修改地图选中
@@ -175,16 +186,12 @@ class MainController extends BaseController {
 
   void onMarkerTap(Marker marker) {
     String id = marker.id;
-    if (id == Constants.mineLocationId) {
-      onSelectClick(mineUserInfo);
-      return;
-    }
     UserInfo? userInfo =
         integrateList.firstWhereOrNull((element) => element.id == id);
     if (userInfo == null) {
       return;
     }
-    onSelectClick(userInfo);
+    onSelectUserClick(userInfo);
   }
 
   void onCurrentLocationClick() async {
@@ -333,4 +340,22 @@ class MainController extends BaseController {
       SystemNavigator.pop();
     }
   }
+
+  void initLastCheckFriendId() {
+    lastCheckFriendId = KVUtil.getString(Constants.keyLastSelectFriendId, null);
+    _autoSelectFriend();
+  }
+
+  void _autoSelectFriend() {
+    if (lastCheckFriendId == null || isExecuteAutoSelect) {
+      return;
+    }
+    for (var value in integrateList) {
+      if (value.id == lastCheckFriendId) {
+        isExecuteAutoSelect = true;
+        _setSelectUserInfo(value);
+        return;
+      }
+    }
+  }
 }

+ 1 - 1
lib/module/main/main_page.dart

@@ -249,7 +249,7 @@ class MainPage extends BasePage<MainController> {
                 return mainFriendItem(
                     userInfo, controller.selectedFriend?.id == userInfo.id,
                     onTap: () {
-                  controller.onSelectClick(userInfo);
+                  controller.onSelectUserClick(userInfo);
                 });
               })
           ],