Browse Source

[new]增加首页好友位置刷新功能

zk 10 months ago
parent
commit
6d208bbd0e

+ 1 - 0
assets/string/base/string.xml

@@ -108,5 +108,6 @@
     <string name="dialog_record_location_has_permission">开启定位权限</string>
     <string name="dialog_record_location_not_request">暂不开启</string>
     <string name="dialog_record_location_request">立即开启</string>
+    <string name="refresh_friend_data_success">好友位置刷新成功</string>
 
 </resources>

+ 2 - 2
lib/data/repositories/friends_repository.dart

@@ -47,12 +47,12 @@ class FriendsRepository {
     friendsList.clear();
   }
 
-  void refreshFriends() {
+  Future refreshFriends() async {
     if (refreshFriendsFlag) {
       return;
     }
     refreshFriendsFlag = true;
-    friendList(0, 300).then((value) {
+    return friendList(0, 300).then((value) {
       friendsList.value = value.friends;
     }).whenComplete(() {
       refreshFriendsFlag = false;

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

@@ -10,8 +10,11 @@ import 'package:location/data/consts/constants.dart';
 import 'package:location/data/repositories/account_repository.dart';
 import 'package:location/data/repositories/friends_repository.dart';
 import 'package:flutter_map/flutter_map.dart';
+import 'package:location/handler/error_handler.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/toast_util.dart';
 import '../../socket/atmob_location_client.dart';
 import '../../dialog/add_friend_dialog.dart';
 import '../../dialog/check_loation_permission_dialog.dart';
@@ -44,6 +47,7 @@ class MainController extends BaseController {
   StreamSubscription? loginSubscription;
 
   bool isFirstShowMineLocation = true;
+  DateTime _lastRefreshTime = DateTime.fromMillisecondsSinceEpoch(0);
 
   @override
   void onReady() {
@@ -155,6 +159,26 @@ class MainController extends BaseController {
     }
   }
 
+  void onRefreshFriendLocationClick() {
+    final now = DateTime.now();
+    final secondsSinceLastRefresh = now.difference(_lastRefreshTime).inSeconds;
+
+    if (secondsSinceLastRefresh < 10) {
+      final remainingSeconds = 10 - secondsSinceLastRefresh;
+      ToastUtil.show('请等待 $remainingSeconds 秒后重试');
+      return;
+    }
+
+    _lastRefreshTime = now;
+
+    friendsRepository.refreshFriends().then((_) {
+      ToastUtil.show(StringName.refreshFriendDataSuccess);
+    }).catchError((error) {
+      ErrorHandler.toastError(error);
+      _lastRefreshTime = DateTime.fromMillisecondsSinceEpoch(0);
+    });
+  }
+
   void _requestLocationPermission() async {
     bool isGranted = await LocationPermissionUtil.requestLocationPermission();
     _showLocationAlways();

+ 8 - 4
lib/module/main/main_page.dart

@@ -61,10 +61,14 @@ class MainPage extends BasePage<MainController> {
                       alignment: Alignment.bottomRight,
                       child: Column(
                         children: [
-                          Container(
-                              margin: EdgeInsets.only(right: 12.w),
-                              child: Assets.images.iconMainRefreshFriendLocation
-                                  .image(width: 42.w, height: 42.w)),
+                          GestureDetector(
+                            onTap: controller.onRefreshFriendLocationClick,
+                            child: Container(
+                                margin: EdgeInsets.only(right: 12.w),
+                                child: Assets
+                                    .images.iconMainRefreshFriendLocation
+                                    .image(width: 42.w, height: 42.w)),
+                          ),
                           SizedBox(height: 14.w),
                           GestureDetector(
                             onTap: controller.onCurrentLocationClick,

+ 3 - 1
lib/resource/string.gen.dart

@@ -2,7 +2,6 @@ import 'package:get/get.dart';
 
 class StringName {
   StringName._();
-
   static final String appName = 'app_name'.tr; // 手机实时定位
   static final String mainTabHome = 'main_tab_home'.tr; // 首页
   static final String mainTabCamera = 'main_tab_camera'.tr; // 扫一扫
@@ -123,6 +122,8 @@ class StringName {
       'dialog_record_location_not_request'.tr; // 暂不开启
   static final String dialogRecordLocationRequest =
       'dialog_record_location_request'.tr; // 立即开启
+  static final String refreshFriendDataSuccess =
+      'refresh_friend_data_success'.tr; // 好友位置刷新成功
 }
 class StringMultiSource {
   StringMultiSource._();
@@ -216,6 +217,7 @@ class StringMultiSource {
       'dialog_record_location_has_permission': '开启定位权限',
       'dialog_record_location_not_request': '暂不开启',
       'dialog_record_location_request': '立即开启',
+      'refresh_friend_data_success': '好友位置刷新成功',
     },
   };
 }