import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter/src/widgets/framework.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/base/base_page.dart'; import 'package:location/resource/colors.gen.dart'; import 'package:location/utils/common_expand.dart'; import '../../../resource/assets.gen.dart'; import '../../../resource/string.gen.dart'; import '../../../router/app_pages.dart'; import '../../../utils/common_style.dart'; import '../../../widget/common_view.dart'; import 'common_point_detail_controller.dart'; class CommonPointDetailPage extends BasePage { const CommonPointDetailPage({super.key}); static void start() { Get.toNamed(RoutePath.commonPointDetail); } @override bool immersive() { return true; } @override Color backgroundColor() { return '#F6F6F6'.color; } @override Widget buildBody(BuildContext context) { return Stack( children: [ Assets.images.bgPageBackground.image(width: double.infinity), SafeArea( child: Column( children: [ buildHeaderView(), Expanded(child: buildContentView()), buildBottomView() ], ), ), ], ); } Widget buildHeaderView() { return CommonView.buildAppBar(StringName.commonPointAdd, backOnTap: controller.onBack); } Widget buildContentView() { return Column( children: [ buildCommonPointAddressSettingView(), buildCommonPointRemindSettingView() ], ); } Widget buildCommonPointRemindSettingView() { return Container( width: 336.w, margin: EdgeInsets.only(bottom: 12.w), padding: EdgeInsets.symmetric(horizontal: 12.w), decoration: BoxDecoration( color: ColorName.white, borderRadius: BorderRadius.circular(12.r), ), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ SizedBox(height: 16.w), Text( StringName.commonPointAddRemind, style: TextStyle( fontSize: 14.sp, color: ColorName.black90, fontWeight: FontWeight.bold), ), SizedBox(height: 6.w), buildAddItem(StringName.commonPointAddGuardTimePeriod, contentWidget: Obx(() { return Text( controller.guardTimePeriod == null ? StringName.commonPointAddGuardTimePeriodHint : controller.guardTimePeriod!, style: TextStyle( fontSize: 13.sp, color: controller.guardTimePeriod == null ? ColorName.black30 : ColorName.black60), ); }), onClick: controller.onGuardTimePeriodClick), buildAddItem(StringName.commonPointAddMessageReminder, contentWidget: Text( StringName.commonPointAddMessageReminderHint, style: TextStyle(fontSize: 13.sp, color: ColorName.black30), ), isShowBottomLine: false, onClick: controller.onSelectMessageReminderClick), ], ), ); } Widget buildCommonPointAddressSettingView() { return Container( width: 336.w, margin: EdgeInsets.only(bottom: 12.w), padding: EdgeInsets.symmetric(horizontal: 12.w), decoration: BoxDecoration( color: ColorName.white, borderRadius: BorderRadius.circular(12.r), ), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ SizedBox(height: 16.w), Text( StringName.commonPointAddTitle, style: TextStyle( fontSize: 14.sp, color: ColorName.black90, fontWeight: FontWeight.bold), ), SizedBox(height: 6.w), buildAddItem(StringName.commonPointAddName, contentWidget: TextField( controller: controller.titleController, style: TextStyle(fontSize: 14.sp, color: '#99000000'.color), maxLines: 1, maxLength: 30, keyboardType: TextInputType.text, textAlignVertical: TextAlignVertical.center, textInputAction: TextInputAction.next, decoration: InputDecoration( hintText: StringName.commonPointAddNameHint, counterText: '', hintStyle: TextStyle(fontSize: 13.sp, color: "#4D000000".toColor()), labelStyle: TextStyle( fontSize: 13.sp, color: ColorName.primaryTextColor, ), contentPadding: EdgeInsets.only(right: 10.w), border: const OutlineInputBorder(borderSide: BorderSide.none), ), ), titleDescWidget: Obx(() { if (controller.isShowDuplicateName) { return Text( StringName.commonPointAddRepeat, style: TextStyle(fontSize: 10.sp, color: '#FF7272'.color), ); } else { return SizedBox.shrink(); } }), isShowArrow: false), buildAddItem(StringName.commonPointAddSelectAAddress, 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), ], ), ); } Widget buildAddItem(String title, {required Widget contentWidget, Widget? titleDescWidget, bool isShowArrow = true, bool isShowBottomLine = true, VoidCallback? onClick}) { return SizedBox( height: 52.w, child: Row( children: [ SizedBox( width: 85.w, child: Column( crossAxisAlignment: CrossAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.center, children: [ Text(title, style: TextStyle(fontSize: 14.sp, color: ColorName.black90)), if (titleDescWidget != null) titleDescWidget ], )), Expanded( child: GestureDetector( behavior: HitTestBehavior.translucent, onTap: onClick, child: Row( children: [ Expanded( child: Column( children: [ Expanded( child: Container( margin: EdgeInsets.only(right: 16.w), child: Align( alignment: Alignment.centerLeft, child: contentWidget, ))), if (isShowBottomLine) Container( width: double.infinity, height: 0.5.w, color: '#14000000'.color) ], )), if (isShowArrow) Assets.images.iconCommonPointAddArrow .image(width: 10.w, height: 10.w) ], ), ), ) ], ), ); } Widget buildBottomView() { 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), ), ), ), ); } }