common_point_detail_page.dart 8.5 KB

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