common_point_detail_page.dart 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272
  1. import 'package:flutter/cupertino.dart';
  2. import 'package:flutter/material.dart';
  3. import 'package:flutter/src/widgets/framework.dart';
  4. import 'package:flutter_screenutil/flutter_screenutil.dart';
  5. import 'package:get/get.dart';
  6. import 'package:get/get_core/src/get_main.dart';
  7. import 'package:location/base/base_page.dart';
  8. import 'package:location/dialog/select_message_reminder_date_dialog.dart';
  9. import 'package:location/resource/colors.gen.dart';
  10. import 'package:location/utils/common_expand.dart';
  11. import '../../../resource/assets.gen.dart';
  12. import '../../../resource/string.gen.dart';
  13. import '../../../router/app_pages.dart';
  14. import '../../../utils/common_style.dart';
  15. import '../../../widget/common_view.dart';
  16. import 'common_point_detail_controller.dart';
  17. class CommonPointDetailPage extends BasePage<CommonPointDetailController> {
  18. const CommonPointDetailPage({super.key});
  19. static void start() {
  20. Get.toNamed(RoutePath.commonPointDetail);
  21. }
  22. @override
  23. bool immersive() {
  24. return true;
  25. }
  26. @override
  27. Color backgroundColor() {
  28. return '#F6F6F6'.color;
  29. }
  30. @override
  31. Widget buildBody(BuildContext context) {
  32. return Stack(
  33. children: [
  34. Assets.images.bgPageBackground.image(width: double.infinity),
  35. SafeArea(
  36. child: Column(
  37. children: [
  38. buildHeaderView(),
  39. Expanded(child: buildContentView()),
  40. buildBottomView()
  41. ],
  42. ),
  43. ),
  44. ],
  45. );
  46. }
  47. Widget buildHeaderView() {
  48. return CommonView.buildAppBar(StringName.commonPointAdd,
  49. backOnTap: controller.onBack);
  50. }
  51. Widget buildContentView() {
  52. return Column(
  53. children: [
  54. buildCommonPointAddressSettingView(),
  55. buildCommonPointRemindSettingView()
  56. ],
  57. );
  58. }
  59. Widget buildCommonPointRemindSettingView() {
  60. return Container(
  61. width: 336.w,
  62. margin: EdgeInsets.only(bottom: 12.w),
  63. padding: EdgeInsets.symmetric(horizontal: 12.w),
  64. decoration: BoxDecoration(
  65. color: ColorName.white,
  66. borderRadius: BorderRadius.circular(12.r),
  67. ),
  68. child: Column(
  69. crossAxisAlignment: CrossAxisAlignment.start,
  70. children: [
  71. SizedBox(height: 16.w),
  72. Text(
  73. StringName.commonPointAddRemind,
  74. style: TextStyle(
  75. fontSize: 14.sp,
  76. color: ColorName.black90,
  77. fontWeight: FontWeight.bold),
  78. ),
  79. SizedBox(height: 6.w),
  80. buildAddItem(StringName.commonPointAddGuardTimePeriod,
  81. contentWidget: Obx(() {
  82. return Text(
  83. controller.guardTimePeriod == null
  84. ? StringName.commonPointAddGuardTimePeriodHint
  85. : controller.guardTimePeriod!,
  86. style: TextStyle(
  87. fontSize: 13.sp,
  88. color: controller.guardTimePeriod == null
  89. ? ColorName.black30
  90. : ColorName.black60),
  91. );
  92. }), onClick: controller.onGuardTimePeriodClick),
  93. buildAddItem(StringName.commonPointAddMessageReminder,
  94. contentWidget: Obx(() {
  95. if (controller.selectedWeekDays.isNotEmpty) {
  96. return Text(
  97. SelectMessageReminderDateDialog.convertString(
  98. controller.selectedWeekDays),
  99. style: TextStyle(fontSize: 13.sp, color: ColorName.black60));
  100. }
  101. return Text(
  102. StringName.commonPointAddMessageReminderHint,
  103. style: TextStyle(fontSize: 13.sp, color: ColorName.black30),
  104. );
  105. }),
  106. isShowBottomLine: false,
  107. onClick: controller.onSelectMessageReminderClick),
  108. ],
  109. ),
  110. );
  111. }
  112. Widget buildCommonPointAddressSettingView() {
  113. return Container(
  114. width: 336.w,
  115. margin: EdgeInsets.only(bottom: 12.w),
  116. padding: EdgeInsets.symmetric(horizontal: 12.w),
  117. decoration: BoxDecoration(
  118. color: ColorName.white,
  119. borderRadius: BorderRadius.circular(12.r),
  120. ),
  121. child: Column(
  122. crossAxisAlignment: CrossAxisAlignment.start,
  123. children: [
  124. SizedBox(height: 16.w),
  125. Text(
  126. StringName.commonPointAddTitle,
  127. style: TextStyle(
  128. fontSize: 14.sp,
  129. color: ColorName.black90,
  130. fontWeight: FontWeight.bold),
  131. ),
  132. SizedBox(height: 6.w),
  133. buildAddItem(StringName.commonPointAddName,
  134. contentWidget: TextField(
  135. controller: controller.titleController,
  136. style: TextStyle(fontSize: 14.sp, color: '#99000000'.color),
  137. maxLines: 1,
  138. maxLength: 30,
  139. keyboardType: TextInputType.text,
  140. textAlignVertical: TextAlignVertical.center,
  141. textInputAction: TextInputAction.next,
  142. decoration: InputDecoration(
  143. hintText: StringName.commonPointAddNameHint,
  144. counterText: '',
  145. hintStyle:
  146. TextStyle(fontSize: 13.sp, color: "#4D000000".toColor()),
  147. labelStyle: TextStyle(
  148. fontSize: 13.sp,
  149. color: ColorName.primaryTextColor,
  150. ),
  151. contentPadding: EdgeInsets.only(right: 10.w),
  152. border: const OutlineInputBorder(borderSide: BorderSide.none),
  153. ),
  154. ), titleDescWidget: Obx(() {
  155. if (controller.isShowDuplicateName) {
  156. return Text(
  157. StringName.commonPointAddRepeat,
  158. style: TextStyle(fontSize: 10.sp, color: '#FF7272'.color),
  159. );
  160. } else {
  161. return SizedBox.shrink();
  162. }
  163. }), isShowArrow: false),
  164. buildAddItem(StringName.commonPointAddSelectAAddress,
  165. contentWidget: Obx(() {
  166. final String? address = controller.selectedAddressMap?['address'];
  167. if (address == null || address.isEmpty) {
  168. return Text(
  169. StringName.commonPointAddSelectAAddressHint,
  170. style:
  171. TextStyle(fontSize: 13.sp, color: ColorName.colorPrimary),
  172. );
  173. }
  174. return Text(
  175. address,
  176. maxLines: 1,
  177. overflow: TextOverflow.ellipsis,
  178. style: TextStyle(fontSize: 13.sp, color: ColorName.black60),
  179. );
  180. }),
  181. isShowBottomLine: false,
  182. onClick: controller.onSelectAddressClick),
  183. ],
  184. ),
  185. );
  186. }
  187. Widget buildAddItem(String title,
  188. {required Widget contentWidget,
  189. Widget? titleDescWidget,
  190. bool isShowArrow = true,
  191. bool isShowBottomLine = true,
  192. VoidCallback? onClick}) {
  193. return SizedBox(
  194. height: 52.w,
  195. child: Row(
  196. children: [
  197. SizedBox(
  198. width: 85.w,
  199. child: Column(
  200. crossAxisAlignment: CrossAxisAlignment.start,
  201. mainAxisAlignment: MainAxisAlignment.center,
  202. children: [
  203. Text(title,
  204. style:
  205. TextStyle(fontSize: 14.sp, color: ColorName.black90)),
  206. if (titleDescWidget != null) titleDescWidget
  207. ],
  208. )),
  209. Expanded(
  210. child: GestureDetector(
  211. behavior: HitTestBehavior.translucent,
  212. onTap: onClick,
  213. child: Row(
  214. children: [
  215. Expanded(
  216. child: Column(
  217. children: [
  218. Expanded(
  219. child: Container(
  220. margin: EdgeInsets.only(right: 16.w),
  221. child: Align(
  222. alignment: Alignment.centerLeft,
  223. child: contentWidget,
  224. ))),
  225. if (isShowBottomLine)
  226. Container(
  227. width: double.infinity,
  228. height: 0.5.w,
  229. color: '#14000000'.color)
  230. ],
  231. )),
  232. if (isShowArrow)
  233. Assets.images.iconCommonPointAddArrow
  234. .image(width: 10.w, height: 10.w)
  235. ],
  236. ),
  237. ),
  238. )
  239. ],
  240. ),
  241. );
  242. }
  243. Widget buildBottomView() {
  244. return GestureDetector(
  245. onTap: controller.onPointSaveClick,
  246. child: Container(
  247. width: 330.w,
  248. height: 46.w,
  249. decoration: getPrimaryBtnDecoration(10.r),
  250. margin: EdgeInsets.symmetric(vertical: 12.w),
  251. child: Center(
  252. child: Text(
  253. StringName.commonPointSettingBtnAddTxt,
  254. style: TextStyle(fontSize: 14.sp, color: ColorName.white),
  255. ),
  256. ),
  257. ),
  258. );
  259. }
  260. }