Преглед на файлове

add:添加没有会员添加朋友后跳转到会员界面。

zhoukun преди 5 месеца
родител
ревизия
1ed6c9f870

BIN
assets/images/icon_add_friend_back_ground.webp


+ 10 - 10
lib/di/get_it.config.dart

@@ -56,29 +56,29 @@ extension GetItInjectableX on _i174.GetIt {
       environmentFilter,
     );
     final networkModule = _$NetworkModule();
+    gh.factory<_i973.SplashController>(() => _i973.SplashController());
+    gh.factory<_i756.TrackDetailController>(
+        () => _i756.TrackDetailController());
     gh.factory<_i256.AboutController>(() => _i256.AboutController());
-    gh.factory<_i923.BrowserController>(() => _i923.BrowserController());
     gh.factory<_i769.FeedBackController>(() => _i769.FeedBackController());
+    gh.factory<_i923.BrowserController>(() => _i923.BrowserController());
     gh.factory<_i108.PermissionSettingController>(
         () => _i108.PermissionSettingController());
-    gh.factory<_i973.SplashController>(() => _i973.SplashController());
-    gh.factory<_i756.TrackDetailController>(
-        () => _i756.TrackDetailController());
     gh.singleton<_i361.Dio>(() => networkModule.createDefaultDio());
     gh.lazySingleton<_i220.AtmobLocationClient>(
         () => _i220.AtmobLocationClient());
     gh.singleton<_i243.AtmobApi>(
         () => networkModule.provideAtmobApi(gh<_i361.Dio>()));
+    gh.lazySingleton<_i240.TrackRepository>(
+        () => _i240.TrackRepository(gh<_i243.AtmobApi>()));
     gh.lazySingleton<_i20.AccountRepository>(
         () => _i20.AccountRepository(gh<_i243.AtmobApi>()));
-    gh.lazySingleton<_i850.ContactRepository>(
-        () => _i850.ContactRepository(gh<_i243.AtmobApi>()));
     gh.lazySingleton<_i1053.FriendsRepository>(
         () => _i1053.FriendsRepository(gh<_i243.AtmobApi>()));
+    gh.lazySingleton<_i850.ContactRepository>(
+        () => _i850.ContactRepository(gh<_i243.AtmobApi>()));
     gh.lazySingleton<_i791.MessageRepository>(
         () => _i791.MessageRepository(gh<_i243.AtmobApi>()));
-    gh.lazySingleton<_i240.TrackRepository>(
-        () => _i240.TrackRepository(gh<_i243.AtmobApi>()));
     gh.lazySingleton<_i983.UrgentContactRepository>(
         () => _i983.UrgentContactRepository(gh<_i243.AtmobApi>()));
     gh.factory<_i1008.LoginController>(
@@ -121,10 +121,10 @@ extension GetItInjectableX on _i174.GetIt {
               gh<_i983.UrgentContactRepository>(),
               gh<_i20.AccountRepository>(),
             ));
-    gh.factory<_i897.AddFriendDialogController>(
-        () => _i897.AddFriendDialogController(gh<_i1053.FriendsRepository>()));
     gh.factory<_i492.FriendSettingController>(
         () => _i492.FriendSettingController(gh<_i1053.FriendsRepository>()));
+    gh.factory<_i897.AddFriendDialogController>(
+        () => _i897.AddFriendDialogController(gh<_i1053.FriendsRepository>()));
     gh.lazySingleton<_i814.MemberRepository>(() => _i814.MemberRepository(
           gh<_i243.AtmobApi>(),
           gh<_i20.AccountRepository>(),

+ 36 - 15
lib/module/add_friend/add_friend_dialog_controller.dart

@@ -1,10 +1,14 @@
+import 'dart:async';
+
 import 'package:flutter/cupertino.dart';
 import 'package:flutter_contacts/flutter_contacts.dart';
 import 'package:get/get.dart';
 import 'package:injectable/injectable.dart';
 import 'package:location/data/consts/error_code.dart';
 import 'package:location/data/repositories/friends_repository.dart';
+import 'package:location/module/add_friend/add_friend_locate_result_dialog.dart';
 import 'package:location/module/login/login_page.dart';
+import 'package:location/module/member/member_page.dart';
 import 'package:location/resource/string.gen.dart';
 import 'package:location/utils/common_expand.dart';
 import 'package:location/utils/http_handler.dart';
@@ -13,6 +17,7 @@ import 'package:location/utils/toast_util.dart';
 import 'package:permission_handler/permission_handler.dart';
 
 import '../../../base/base_controller.dart';
+import '../../data/repositories/account_repository.dart';
 import '../../dialog/common_confirm_dialog_impl.dart';
 import '../../sdk/wechat/wechat_share_util.dart';
 import '../../utils/de_bounce.dart';
@@ -53,26 +58,42 @@ class AddFriendDialogController extends BaseController {
   }
 
   void _requestAddFriend() {
+
+    AccountRepository accountRepository = AccountRepository.getInstance();
     friendsRepository.addFriendRequest(phone).then((_) {
-      ToastUtil.show(StringName.requestSuccess);
-      Get.back();
+      if (accountRepository.memberIsExpired()) {
+        AddFriendLocateResultDialog.show(confirmOnTap: () {
+          FocusScope.of(Get.context!).unfocus();
+          MemberPage.start();
+        });
+      } else {
+        ToastUtil.show(StringName.requestSuccess);
+        Get.back();
+      }
     }).catchError((error) {
-      if (error is ServerErrorException) {
-        if (error.code == ErrorCode.noLoginError) {
-          _showNoLoginDialog();
-        } else if (error.code == ErrorCode.friendNotRegistered) {
-          _showNotRegisteredDialog();
-        } else if (error.code == ErrorCode.alreadyInFriendList) {
-          ToastUtil.show(StringName.addFriendAdded);
-        } else if (error.code == ErrorCode.friendRequestSent) {
-          ToastUtil.show(StringName.sendAddFriendSuccess);
-        } else if (error.code == ErrorCode.cannotAddSelf) {
-          ToastUtil.show(StringName.addFriendOwn);
+      if (accountRepository.memberIsExpired()) {
+        AddFriendLocateResultDialog.show(confirmOnTap: () {
+          FocusScope.of(Get.context!).unfocus();
+          MemberPage.start();
+        });
+      } else {
+        if (error is ServerErrorException) {
+          if (error.code == ErrorCode.noLoginError) {
+            _showNoLoginDialog();
+          } else if (error.code == ErrorCode.friendNotRegistered) {
+            _showNotRegisteredDialog();
+          } else if (error.code == ErrorCode.alreadyInFriendList) {
+            ToastUtil.show(StringName.addFriendAdded);
+          } else if (error.code == ErrorCode.friendRequestSent) {
+            ToastUtil.show(StringName.sendAddFriendSuccess);
+          } else if (error.code == ErrorCode.cannotAddSelf) {
+            ToastUtil.show(StringName.addFriendOwn);
+          } else {
+            ToastUtil.show(StringName.requestFail);
+          }
         } else {
           ToastUtil.show(StringName.requestFail);
         }
-      } else {
-        ToastUtil.show(StringName.requestFail);
       }
     });
   }

+ 140 - 0
lib/module/add_friend/add_friend_locate_result_dialog.dart

@@ -0,0 +1,140 @@
+
+import 'package:flutter/cupertino.dart';
+import 'package:flutter/material.dart';
+import 'package:flutter_screenutil/flutter_screenutil.dart';
+import 'package:get/get.dart';
+import 'package:get/get_core/src/get_main.dart';
+import 'package:location/resource/colors.gen.dart';
+import 'package:location/utils/common_expand.dart';
+
+import '../../resource/assets.gen.dart';
+
+class AddFriendLocateResultDialog {
+  static void show({
+    VoidCallback? cancelOnTap,
+    VoidCallback? confirmOnTap,}) {
+    Get.dialog(
+        SimpleDialog(
+          titlePadding: EdgeInsets.zero,
+          contentPadding: EdgeInsets.zero,
+          insetPadding: EdgeInsets.zero,
+          backgroundColor:Colors.transparent,
+          children: [
+            AddFriendLocateResultTipView(
+                cancelOnTap: () {
+                  Get.back();
+                },
+                confirmOnTap: confirmOnTap)
+          ],
+        )
+    );
+  }
+}
+
+
+class AddFriendLocateResultTipView extends StatefulWidget {
+  final VoidCallback? cancelOnTap;
+  final VoidCallback? confirmOnTap;
+
+
+  const AddFriendLocateResultTipView({
+    super.key,
+    this.cancelOnTap,
+    required this.confirmOnTap,
+  });
+
+  @override
+  State<AddFriendLocateResultTipView> createState() => _AddFriendLocateResultTipViewState();
+}
+
+
+class _AddFriendLocateResultTipViewState extends State<AddFriendLocateResultTipView> {
+  @override
+  Widget build(BuildContext context) {
+    // TODO: implement build
+    return Container(
+      width: 1.sw,
+      margin: EdgeInsets.symmetric(horizontal: 42.w),
+      child: IntrinsicHeight(
+        child: Column(
+          children: [
+            SizedBox(
+              height: 35.w,
+            ),
+            Container(
+              decoration: BoxDecoration(
+                  color: Colors.transparent,
+                  image: DecorationImage(
+                    image: Assets.images.iconAddFriendBackGround.provider(),
+                    fit: BoxFit.fill,
+                  )
+              ),
+              child: Column(
+                children: [
+                  SizedBox(
+                    height: 152.w,
+                  ),
+                  Text("您已成功定位到好友!",
+                      style: TextStyle(
+                          fontSize: 20.sp,
+                          color: "#333333".color,
+                          fontWeight: FontWeight.bold)),
+                  SizedBox(height: 32.w,),
+                  GestureDetector(
+                    onTap: () {
+                      Get.back();
+                      widget.confirmOnTap!();
+                    },
+                    child: Container(
+                      decoration: BoxDecoration(
+                        gradient: LinearGradient(
+                          begin: Alignment.centerLeft, // 90度相当于从左到右
+                          end: Alignment.centerRight,
+                          colors: [
+                            Color(0xFF7B7DFF), // #7B7DFF
+                            Color(0xFF6365FF), // #6365FF
+                          ],
+                          stops: [0.0, 1.0],
+                          // 从0%到100%
+                        ),
+                        borderRadius: BorderRadius.circular(40.w / 2.0),
+                      ),
+                      margin: EdgeInsets.symmetric(horizontal: 20.w),
+                      height: 40.w,
+                      alignment: Alignment.center,
+                      child: Text("立即查看",
+                          style: TextStyle(
+                              fontSize: 14.sp,
+                              color: '#FFFFFF'.color,
+                              fontWeight: FontWeight.w500)
+                      ),
+                    ),
+                  ),
+                  SizedBox(
+                    height: 10.w,
+                  ),
+                  GestureDetector(
+                    onTap: widget.cancelOnTap,
+                    child: Container(
+                      height: 20.w,
+                      child: Text("下次再说",
+                          style: TextStyle(
+                              fontSize: 11.sp,
+                              color: '#898996'.color,
+                              fontWeight: FontWeight.w500)
+                      ),
+                    ),
+                  ),
+
+                  SizedBox(
+                    height: 12.w,
+                  ),
+                ],
+              ),
+            )
+          ],
+        ),
+      ),
+    );
+  }
+}

+ 26 - 26
lib/module/mine/mine_expiration_reminder_dialog.dart

@@ -55,7 +55,7 @@ class MineExpirationReminderTipView extends StatefulWidget {
   State<MineExpirationReminderTipView> createState() => _MineExpirationReminderTipViewState();
 }
 
-class _MineExpirationReminderTipViewState extends State<MineExpirationReminderTipView> {
+  class _MineExpirationReminderTipViewState extends State<MineExpirationReminderTipView> {
   @override
   Widget build(BuildContext context) {
     return Container(
@@ -177,27 +177,27 @@ class _MineExpirationReminderTipViewState extends State<MineExpirationReminderTi
               ],
             ),
             SizedBox(height: 16.w,),
-            Container(
-              decoration: BoxDecoration(
-                gradient: LinearGradient(
-                  begin: Alignment.centerLeft, // 90度相当于从左到右
-                  end: Alignment.centerRight,
-                  colors: [
-                    Color(0xFF7B7DFF), // #7B7DFF
-                    Color(0xFF6365FF), // #6365FF
-                  ],
-                  stops: [0.0, 1.0],
-                  // 从0%到100%
+            GestureDetector(
+              onTap: () {
+                Get.back();
+                widget.confirmOnTap!();
+              },
+              child: Container(
+                decoration: BoxDecoration(
+                  gradient: LinearGradient(
+                    begin: Alignment.centerLeft, // 90度相当于从左到右
+                    end: Alignment.centerRight,
+                    colors: [
+                      Color(0xFF7B7DFF), // #7B7DFF
+                      Color(0xFF6365FF), // #6365FF
+                    ],
+                    stops: [0.0, 1.0],
+                    // 从0%到100%
+                  ),
+                  borderRadius: BorderRadius.circular(43.w / 2.0),
                 ),
-                borderRadius: BorderRadius.circular(43.w / 2.0),
-              ),
-              height: 43.w,
-              alignment: Alignment.center,
-              child: GestureDetector(
-                onTap: () {
-                  Get.back();
-                  widget.confirmOnTap!();
-                },
+                height: 43.w,
+                alignment: Alignment.center,
                 child: Text(StringName.memberVipRenew,
                     style: TextStyle(
                         fontSize: 14.sp,
@@ -209,10 +209,10 @@ class _MineExpirationReminderTipViewState extends State<MineExpirationReminderTi
             SizedBox(
               height: 12.w,
             ),
-            Container(
-              height: 20.w,
-              child: GestureDetector(
-                onTap: widget.cancelOnTap,
+            GestureDetector(
+              onTap: widget.cancelOnTap,
+              child: Container(
+                height: 20.w,
                 child: Text("下次再说",
                     style: TextStyle(
                         fontSize: 14.sp,
@@ -220,7 +220,7 @@ class _MineExpirationReminderTipViewState extends State<MineExpirationReminderTi
                         fontWeight: FontWeight.w500)
                 ),
               ),
-            )
+            ),
           ],
         ),
       ),

+ 5 - 0
lib/resource/assets.gen.dart

@@ -68,6 +68,10 @@ class $AssetsImagesGen {
   AssetGenImage get iconAccountReplaceLogo =>
       const AssetGenImage('assets/images/icon_account_replace_logo.webp');
 
+  /// File path: assets/images/icon_add_friend_back_ground.webp
+  AssetGenImage get iconAddFriendBackGround =>
+      const AssetGenImage('assets/images/icon_add_friend_back_ground.webp');
+
   /// File path: assets/images/icon_agreement_close.webp
   AssetGenImage get iconAgreementClose =>
       const AssetGenImage('assets/images/icon_agreement_close.webp');
@@ -476,6 +480,7 @@ class $AssetsImagesGen {
         bgUrgentContactLogo,
         bgUrgentContactPopup,
         iconAccountReplaceLogo,
+        iconAddFriendBackGround,
         iconAgreementClose,
         iconAlipayPayment,
         iconAlipayScanPayment,

+ 7 - 14
lib/resource/string.gen.dart

@@ -257,20 +257,13 @@ class StringName {
   static String get dialogNetErrorAgain => 'dialog_net_error_again'.tr; // 重试
   static String get mineUpdateAvatarSuccess => 'mine_update_avatar_success'.tr; // 设置成功
   static String get todaySimpleTrack => 'today_simple_track'.tr; // 当日行动轨迹
-  static String get todaySimpleTrackStart =>
-      'today_simple_track_start'.tr; // 起点
-  static String get todaySimpleTrackError =>
-      'today_simple_track_error'.tr; // 异常
-  static String get accountReplaceTitle =>
-      'account_replace_title'.tr; // 您的账号已在另一台设备登录
-  static String get accountReplaceDesc =>
-      'account_replace_desc'.tr; // 建议重新登录或切换其他账号
-  static String get accountReplaceBtnTxt =>
-      'account_replace_btn_txt'.tr; // 我知道了
-  static String get accountPleaseSelectAvatar =>
-      'account_please_select_avatar'.tr; // 请选择头像
-  static String get accountSelectAvatarBtnTxt =>
-      'account_select_avatar_btn_txt'.tr; // 立即更换
+  static String get todaySimpleTrackStart => 'today_simple_track_start'.tr; // 起点
+  static String get todaySimpleTrackError => 'today_simple_track_error'.tr; // 异常
+  static String get accountReplaceTitle => 'account_replace_title'.tr; // 您的账号已在另一台设备登录
+  static String get accountReplaceDesc => 'account_replace_desc'.tr; // 建议重新登录或切换其他账号
+  static String get accountReplaceBtnTxt => 'account_replace_btn_txt'.tr; // 我知道了
+  static String get accountPleaseSelectAvatar => 'account_please_select_avatar'.tr; // 请选择头像
+  static String get accountSelectAvatarBtnTxt => 'account_select_avatar_btn_txt'.tr; // 立即更换
 }
 class StringMultiSource {
   StringMultiSource._();