浏览代码

[new]增加常用点部分逻辑

zk 2 月之前
父节点
当前提交
b60cf9c345

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

@@ -425,6 +425,7 @@
     <string name="common_point_add_name_hint">请输入常用地名称</string>
     <string name="common_point_add_select_a_address">选取地址</string>
     <string name="common_point_add_select_a_address_hint">+设置常用点地址</string>
+    <string name="common_point_add_please_select_a_address_hint">请选择常用点地址</string>
     <string name="common_point_add_repeat">*当前名称重复</string>
     <string name="common_point_add_remind">提醒设置</string>
     <string name="common_point_add_guard_time_period">守护时间段</string>

+ 7 - 0
lib/data/api/atmob_api.dart

@@ -15,6 +15,7 @@ import 'package:location/data/api/request/notification_report_request.dart';
 import 'package:location/data/api/request/one_click_login_request.dart';
 import 'package:location/data/api/request/operation_friend_request.dart';
 import 'package:location/data/api/request/order_status_request.dart';
+import 'package:location/data/api/request/point_info_request.dart';
 import 'package:location/data/api/request/query_track_request.dart';
 import 'package:location/data/api/request/request_friendlist_request.dart';
 import 'package:location/data/api/request/send_code_request.dart';
@@ -274,4 +275,10 @@ abstract class AtmobApi {
   @POST("/s/v1/frequent/point/info/list")
   Future<BaseResponse<CommonPointResponse>> commonPointList(
       @Body() AppBaseRequest request);
+
+  @POST("/s/v1/frequent/point/info/create")
+  Future<BaseResponse> pointInfoCreate(@Body() PointInfoRequest request);
+
+  @POST("/s/v1/frequent/point/info/update")
+  Future<BaseResponse> pointInfoUpdate(@Body() PointInfoRequest request);
 }

+ 52 - 0
lib/data/api/request/point_info_request.dart

@@ -0,0 +1,52 @@
+import 'package:json_annotation/json_annotation.dart';
+import 'package:location/base/app_base_request.dart';
+
+part 'point_info_request.g.dart';
+
+@JsonSerializable()
+class PointInfoRequest extends AppBaseRequest {
+  @JsonKey(name: 'id')
+  int? id;
+
+  @JsonKey(name: 'title')
+  final String title;
+
+  @JsonKey(name: 'radius')
+  final int radius;
+
+  @JsonKey(name: 'lng')
+  final double lng;
+
+  @JsonKey(name: 'lat')
+  final double lat;
+
+  @JsonKey(name: 'addr')
+  final String addr;
+
+  @JsonKey(name: 'startTime')
+  final String? startTime;
+
+  @JsonKey(name: 'endTime')
+  final String? endTime;
+
+  @JsonKey(name: 'weeks')
+  List<int>? weeks;
+
+  PointInfoRequest({
+    this.id,
+    required this.title,
+    required this.radius,
+    required this.lng,
+    required this.lat,
+    required this.addr,
+    this.startTime,
+    this.endTime,
+    this.weeks,
+  });
+
+  factory PointInfoRequest.fromJson(Map<String, dynamic> json) =>
+      _$PointInfoRequestFromJson(json);
+
+  @override
+  Map<String, dynamic> toJson() => _$PointInfoRequestToJson(this);
+}

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

@@ -1,7 +1,7 @@
 class Constants {
   Constants._();
 
-  static const String env = envProd;
+  static const String env = envDev;
 
   static const String envDev = 'dev';
 
@@ -9,7 +9,8 @@ class Constants {
 
   static const String envProd = 'prod';
 
-  static const String _devBaseUrl = "https://ws00.by.takin.cc";//"http://192.168.10.230:8880";
+  static const String _devBaseUrl =
+      "http://192.168.10.230:8880"; //"http://192.168.10.230:8880";
 
   static const String _testBaseUrl = "https://central-test.atmob.com";
 

+ 49 - 0
lib/data/repositories/range_point_repository.dart

@@ -3,6 +3,7 @@ import 'package:location/data/api/atmob_api.dart';
 
 import '../../base/app_base_request.dart';
 import '../../utils/http_handler.dart';
+import '../api/request/point_info_request.dart';
 import '../api/response/common_point_response.dart';
 
 @lazySingleton
@@ -16,4 +17,52 @@ class RangePointRepository {
         .commonPointList(AppBaseRequest())
         .then(HttpHandler.handle(true));
   }
+
+  Future<void> pointInfoCreate({
+    required String title,
+    required int radius,
+    required double lng,
+    required double lat,
+    required String addr,
+    required String startTime,
+    required String endTime,
+    required List<int>? weeks,
+  }) {
+    return atmobApi
+        .pointInfoCreate(PointInfoRequest(
+            title: title,
+            radius: radius,
+            lng: lng,
+            lat: lat,
+            addr: addr,
+            startTime: startTime,
+            endTime: endTime,
+            weeks: weeks))
+        .then(HttpHandler.handle(false));
+  }
+
+  Future<void> pointInfoUpdate({
+    required int id,
+    required String title,
+    required int radius,
+    required double lng,
+    required double lat,
+    required String addr,
+    required String startTime,
+    required String endTime,
+    required List<int>? weeks,
+  }) {
+    return atmobApi
+        .pointInfoUpdate(PointInfoRequest(
+            id: id,
+            title: title,
+            radius: radius,
+            lng: lng,
+            lat: lat,
+            addr: addr,
+            startTime: startTime,
+            endTime: endTime,
+            weeks: weeks))
+        .then(HttpHandler.handle(false));
+  }
 }

+ 5 - 2
lib/dialog/loading_dialog.dart

@@ -19,11 +19,14 @@ class LoadingDialog {
 class CustomLoadingDialog {
   static String tag = "CustomLoadingDialog";
 
-  static void show({String? loadingTxt, bool backDismiss = false}) {
+  static void show(
+      {String? loadingTxt,
+      bool backDismiss = true,
+      bool clickMaskDismiss = false}) {
     SmartDialog.show(
         tag: tag,
         backDismiss: backDismiss,
-        clickMaskDismiss: false,
+        clickMaskDismiss: clickMaskDismiss,
         builder: (_) {
           return Container(
               padding: EdgeInsets.all(20.w),

+ 4 - 3
lib/dialog/select_guard_time_dialog.dart

@@ -24,8 +24,9 @@ class SelectGuardTimeDialog {
         alignment: Alignment.bottomCenter,
         keepSingle: true,
         builder: (_) {
-          return _SelectGuardTimeView(startDate ?? DateTime.now(),
-              endDate ?? DateTime.now(), sureCallback);
+          final now = DateTime.now();
+          return _SelectGuardTimeView(
+              startDate ?? now, endDate ?? now, sureCallback);
         });
   }
 
@@ -122,7 +123,7 @@ class _SelectGuardTimeView extends StatelessWidget {
 
   onSureClick() {
     //endDate 必须要大于 startDate
-    if (endDate.isBefore(startDate)) {
+    if (!endDate.isAfter(startDate)) {
       ToastUtil.show(StringName.dialogMustThanStartDate);
       return;
     }

+ 5 - 3
lib/dialog/select_message_reminder_date_dialog.dart

@@ -11,14 +11,14 @@ import '../resource/colors.gen.dart';
 class SelectMessageReminderDateDialog {
   static const String _tag = 'SelectMessageReminderDateDialog';
 
-  static void show() {
+  static void show({List<int>? selectWeekDays}) {
     SmartDialog.show(
         tag: _tag,
         animationType: SmartAnimationType.centerFade_otherSlide,
         alignment: Alignment.bottomCenter,
         keepSingle: true,
         builder: (_) {
-          return SelectMessageReminderDateView();
+          return SelectMessageReminderDateView(selectWeekDays);
         });
   }
 
@@ -28,7 +28,9 @@ class SelectMessageReminderDateDialog {
 }
 
 class SelectMessageReminderDateView extends StatelessWidget {
-  const SelectMessageReminderDateView({super.key});
+  final List<int>? selectWeekDays;
+
+  const SelectMessageReminderDateView(this.selectWeekDays, {super.key});
 
   @override
   Widget build(BuildContext context) {

+ 0 - 50
lib/module/commonpoint/add/common_point_add_controller.dart

@@ -1,50 +0,0 @@
-import 'package:flutter/cupertino.dart';
-import 'package:get/get.dart';
-import 'package:get/get_core/src/get_main.dart';
-import 'package:injectable/injectable.dart';
-import 'package:location/base/base_controller.dart';
-import 'package:location/dialog/select_message_reminder_date_dialog.dart';
-import '../../../dialog/select_guard_time_dialog.dart';
-import '../select_address/common_point_select_address_page.dart';
-
-@injectable
-class CommonPointAddController extends BaseController {
-  final TextEditingController titleController = TextEditingController();
-  final RxBool _isShowDuplicateName = RxBool(true);
-
-  bool get isShowDuplicateName => _isShowDuplicateName.value;
-
-  final RxnString _guardTimePeriod = RxnString();
-
-  String? get guardTimePeriod => _guardTimePeriod.value;
-
-  DateTime? guardStartTime;
-  DateTime? guardEndTime;
-
-  void onBack() {
-    Get.back();
-  }
-
-  void onGuardTimePeriodClick() {
-    hideKeyboard(Get.context!);
-    SelectGuardTimeDialog.show(
-        startDate: guardStartTime,
-        endDate: guardEndTime,
-        sureCallback: (DateTime startDate, DateTime endDate) {
-          guardStartTime = startDate;
-          guardEndTime = endDate;
-          _guardTimePeriod.value =
-              '${startDate.hour.toString().padLeft(2, '0')}:${startDate.minute.toString().padLeft(2, '0')}-${endDate.hour.toString().padLeft(2, '0')}:${endDate.minute.toString().padLeft(2, '0')}';
-        });
-  }
-
-  void onSelectMessageReminderClick() {
-    hideKeyboard(Get.context!);
-    SelectMessageReminderDateDialog.show();
-  }
-
-  void onSelectAddressClick() {
-    hideKeyboard(Get.context!);
-    CommonPointSelectAddressPage.start();
-  }
-}

+ 2 - 3
lib/module/commonpoint/common_point_controller.dart

@@ -4,10 +4,9 @@ import 'package:injectable/injectable.dart';
 import 'package:location/base/base_controller.dart';
 import 'package:location/data/bean/common_point_bean.dart';
 import 'package:location/handler/error_handler.dart';
-import 'package:location/module/commonpoint/add/common_point_add_page.dart';
 import 'package:location/module/commonpoint/setting/common_point_setting_page.dart';
-
 import '../../data/repositories/range_point_repository.dart';
+import 'detail/common_point_detail_page.dart';
 
 @injectable
 class CommonPointController extends BaseController {
@@ -40,6 +39,6 @@ class CommonPointController extends BaseController {
   }
 
   void onAddCommonPointClick() {
-    CommonPointAddPage.start();
+    CommonPointDetailPage.start();
   }
 }

+ 4 - 2
lib/module/commonpoint/common_point_page.dart

@@ -112,11 +112,13 @@ class CommonPointPage extends BasePage<CommonPointController> {
   }
 
   Widget buildCommonPointEmptyView() {
-    return Center(
+    return Align(
+      alignment: Alignment(0.0, -0.4),
       child: IntrinsicHeight(
         child: Column(
           children: [
-            Assets.images.iconCommonPointNoData.image(width: 157.w),
+            Assets.images.iconCommonPointNoData
+                .image(width: 157.w, height: 103.w),
             SizedBox(height: 12.8.w),
             Text(StringName.commonPointNoData,
                 style: TextStyle(fontSize: 13.sp, color: ColorName.black60)),

+ 89 - 0
lib/module/commonpoint/detail/common_point_detail_controller.dart

@@ -0,0 +1,89 @@
+import 'package:flutter/cupertino.dart';
+import 'package:get/get.dart';
+import 'package:get/get_core/src/get_main.dart';
+import 'package:injectable/injectable.dart';
+import 'package:location/base/base_controller.dart';
+import 'package:location/data/repositories/range_point_repository.dart';
+import 'package:location/dialog/loading_dialog.dart';
+import 'package:location/dialog/select_message_reminder_date_dialog.dart';
+import 'package:location/resource/string.gen.dart';
+import 'package:location/utils/toast_util.dart';
+import '../../../dialog/select_guard_time_dialog.dart';
+import '../select_address/common_point_select_address_page.dart';
+
+@injectable
+class CommonPointDetailController extends BaseController {
+  final TextEditingController titleController = TextEditingController();
+  final RxBool _isShowDuplicateName = RxBool(false);
+  final Rxn<Map<String, dynamic>> _selectedAddressMap =
+      Rxn<Map<String, dynamic>>();
+
+  Map<String, dynamic>? get selectedAddressMap => _selectedAddressMap.value;
+
+  bool get isShowDuplicateName => _isShowDuplicateName.value;
+
+  final RxnString _guardTimePeriod = RxnString();
+
+  String? get guardTimePeriod => _guardTimePeriod.value;
+
+  DateTime? guardStartTime;
+  DateTime? guardEndTime;
+
+  final RxList<int> selectedWeekDays = RxList<int>();
+
+  final RangePointRepository rangePointRepository;
+
+  CommonPointDetailController(this.rangePointRepository);
+
+  void onBack() {
+    Get.back();
+  }
+
+  void onGuardTimePeriodClick() {
+    hideKeyboard(Get.context!);
+    SelectGuardTimeDialog.show(
+        startDate: guardStartTime,
+        endDate: guardEndTime,
+        sureCallback: (DateTime startDate, DateTime endDate) {
+          guardStartTime = startDate;
+          guardEndTime = endDate;
+          _guardTimePeriod.value =
+              '${startDate.hour.toString().padLeft(2, '0')}:${startDate.minute.toString().padLeft(2, '0')}-${endDate.hour.toString().padLeft(2, '0')}:${endDate.minute.toString().padLeft(2, '0')}';
+        });
+  }
+
+  void onSelectMessageReminderClick() {
+    hideKeyboard(Get.context!);
+    SelectMessageReminderDateDialog.show(selectWeekDays: selectedWeekDays);
+  }
+
+  void onSelectAddressClick() async {
+    hideKeyboard(Get.context!);
+    final selectAddressMap = await CommonPointSelectAddressPage.start();
+    if (selectAddressMap == null || selectAddressMap.isEmpty) {
+      return;
+    }
+    _selectedAddressMap.value = selectAddressMap;
+  }
+
+  void onPointSaveClick() {
+    final title = titleController.text.trim();
+    if (title.isEmpty) {
+      ToastUtil.show(StringName.commonPointAddNameHint);
+      return;
+    }
+    final String address = selectedAddressMap?['address'] ?? '';
+    if (address.isEmpty) {
+      ToastUtil.show(StringName.commonPointAddPleaseSelectAAddressHint);
+      return;
+    }
+    if (guardStartTime == null || guardEndTime == null) {
+      ToastUtil.show(StringName.commonPointAddGuardTimePeriodHint);
+      return;
+    }
+    _isShowDuplicateName.value = false;
+    CustomLoadingDialog.show();
+
+    // rangePointRepository.pointInfoCreate(title:);
+  }
+}

+ 29 - 15
lib/module/commonpoint/add/common_point_add_page.dart

@@ -13,13 +13,13 @@ import '../../../resource/string.gen.dart';
 import '../../../router/app_pages.dart';
 import '../../../utils/common_style.dart';
 import '../../../widget/common_view.dart';
-import 'common_point_add_controller.dart';
+import 'common_point_detail_controller.dart';
 
-class CommonPointAddPage extends BasePage<CommonPointAddController> {
-  const CommonPointAddPage({super.key});
+class CommonPointDetailPage extends BasePage<CommonPointDetailController> {
+  const CommonPointDetailPage({super.key});
 
   static void start() {
-    Get.toNamed(RoutePath.commonPointAdd);
+    Get.toNamed(RoutePath.commonPointDetail);
   }
 
   @override
@@ -163,11 +163,22 @@ class CommonPointAddPage extends BasePage<CommonPointAddController> {
             }
           }), isShowArrow: false),
           buildAddItem(StringName.commonPointAddSelectAAddress,
-              contentWidget: Text(
+              contentWidget: Obx(() {
+            final String? address = controller.selectedAddressMap?['address'];
+            if (address == null || address.isEmpty) {
+              return Text(
                 StringName.commonPointAddSelectAAddressHint,
                 style:
                     TextStyle(fontSize: 13.sp, color: ColorName.colorPrimary),
-              ),
+              );
+            }
+            return Text(
+              address,
+              maxLines: 1,
+              overflow: TextOverflow.ellipsis,
+              style: TextStyle(fontSize: 13.sp, color: ColorName.black60),
+            );
+          }),
               isShowBottomLine: false,
               onClick: controller.onSelectAddressClick),
         ],
@@ -233,15 +244,18 @@ class CommonPointAddPage extends BasePage<CommonPointAddController> {
   }
 
   Widget buildBottomView() {
-    return Container(
-      width: 330.w,
-      height: 46.w,
-      decoration: getPrimaryBtnDecoration(10.r),
-      margin: EdgeInsets.symmetric(vertical: 12.w),
-      child: Center(
-        child: Text(
-          StringName.commonPointSettingBtnAddTxt,
-          style: TextStyle(fontSize: 14.sp, color: ColorName.white),
+    return GestureDetector(
+      onTap: controller.onPointSaveClick,
+      child: Container(
+        width: 330.w,
+        height: 46.w,
+        decoration: getPrimaryBtnDecoration(10.r),
+        margin: EdgeInsets.symmetric(vertical: 12.w),
+        child: Center(
+          child: Text(
+            StringName.commonPointSettingBtnAddTxt,
+            style: TextStyle(fontSize: 14.sp, color: ColorName.white),
+          ),
         ),
       ),
     );

+ 3 - 1
lib/module/commonpoint/select_address/common_point_select_address_controller.dart

@@ -309,6 +309,8 @@ class CommonPointSelectAddressController extends BaseController {
       ToastUtil.show(StringName.selectAddressPlease);
       return;
     }
-    Get.back(result: currentRangeCenterLocation);
+    Map<String, dynamic> backData = currentRangeCenterLocation!.toJson();
+    backData['radius'] = commonPointRange;
+    Get.back(result: backData);
   }
 }

+ 6 - 2
lib/module/commonpoint/select_address/common_point_select_address_page.dart

@@ -22,8 +22,12 @@ class CommonPointSelectAddressPage
     extends BasePage<CommonPointSelectAddressController> {
   const CommonPointSelectAddressPage({super.key});
 
-  static start() {
-    Get.toNamed(RoutePath.commonPointSelectAddress);
+  static Future<Map<String, dynamic>?> start() async {
+    final result = await Get.toNamed(RoutePath.commonPointSelectAddress);
+    if (result is Map<String, dynamic>) {
+      return result;
+    }
+    return null;
   }
 
   @override

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

@@ -351,6 +351,8 @@ class StringName {
   static String get commonPointAddNameHint => 'common_point_add_name_hint'.tr; // 请输入常用地名称
   static String get commonPointAddSelectAAddress => 'common_point_add_select_a_address'.tr; // 选取地址
   static String get commonPointAddSelectAAddressHint => 'common_point_add_select_a_address_hint'.tr; // +设置常用点地址
+  static String get commonPointAddPleaseSelectAAddressHint =>
+      'common_point_add_please_select_a_address_hint'.tr; // 请选择常用点地址
   static String get commonPointAddRepeat => 'common_point_add_repeat'.tr; // *当前名称重复
   static String get commonPointAddRemind => 'common_point_add_remind'.tr; // 提醒设置
   static String get commonPointAddGuardTimePeriod => 'common_point_add_guard_time_period'.tr; // 守护时间段
@@ -733,6 +735,7 @@ class StringMultiSource {
       'common_point_add_name_hint': '请输入常用地名称',
       'common_point_add_select_a_address': '选取地址',
       'common_point_add_select_a_address_hint': '+设置常用点地址',
+      'common_point_add_please_select_a_address_hint': '请选择常用点地址',
       'common_point_add_repeat': '*当前名称重复',
       'common_point_add_remind': '提醒设置',
       'common_point_add_guard_time_period': '守护时间段',

+ 6 - 5
lib/router/app_pages.dart

@@ -5,10 +5,10 @@ import 'package:location/module/about/about_page.dart';
 import 'package:location/module/analyse/location_analyse_page.dart';
 import 'package:location/module/browser/browser_controller.dart';
 import 'package:location/module/browser/browser_view.dart';
-import 'package:location/module/commonpoint/add/common_point_add_controller.dart';
-import 'package:location/module/commonpoint/add/common_point_add_page.dart';
 import 'package:location/module/commonpoint/common_point_controller.dart';
 import 'package:location/module/commonpoint/common_point_page.dart';
+import 'package:location/module/commonpoint/detail/common_point_detail_controller.dart';
+import 'package:location/module/commonpoint/detail/common_point_detail_page.dart';
 import 'package:location/module/commonpoint/select_address/common_point_select_address_page.dart';
 import 'package:location/module/commonpoint/setting/common_point_setting_controller.dart';
 import 'package:location/module/commonpoint/setting/common_point_setting_page.dart';
@@ -75,7 +75,7 @@ abstract class RoutePath {
   static const locationAnalyse = '/locationAnalyse';
   static const commonPoint = '/commonPoint';
   static const commonPointSetting = '/commonPointSetting';
-  static const commonPointAdd = '/commonPointAdd';
+  static const commonPointDetail = '/commonPointDetail';
   static const commonPointSelectAddress = '/commonPointSelectAddress';
 }
 
@@ -104,7 +104,7 @@ class AppBinding extends Bindings {
     lazyPut(() => getIt.get<MemberActivityController>());
     lazyPut(() => getIt.get<CommonPointController>());
     lazyPut(() => getIt.get<CommonPointSettingController>());
-    lazyPut(() => getIt.get<CommonPointAddController>());
+    lazyPut(() => getIt.get<CommonPointDetailController>());
     lazyPut(() => getIt.get<CommonPointSelectAddressController>());
   }
 
@@ -137,7 +137,8 @@ final generalPages = [
   GetPage(name: RoutePath.commonPoint, page: () => CommonPointPage()),
   GetPage(
       name: RoutePath.commonPointSetting, page: () => CommonPointSettingPage()),
-  GetPage(name: RoutePath.commonPointAdd, page: () => CommonPointAddPage()),
+  GetPage(
+      name: RoutePath.commonPointDetail, page: () => CommonPointDetailPage()),
   GetPage(
       name: RoutePath.commonPointSelectAddress,
       page: () => CommonPointSelectAddressPage()),