urgent_contact_page.dart 9.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271
  1. import 'package:flutter/material.dart';
  2. import 'package:flutter/src/widgets/framework.dart';
  3. import 'package:flutter_screenutil/flutter_screenutil.dart';
  4. import 'package:get/get.dart';
  5. import 'package:get/get_core/src/get_main.dart';
  6. import 'package:location/base/base_page.dart';
  7. import 'package:location/data/bean/contact_info.dart';
  8. import 'package:location/module/urgent_contact/urgent_contact_controller.dart';
  9. import 'package:location/resource/assets.gen.dart';
  10. import 'package:location/utils/common_expand.dart';
  11. import 'package:location/widget/common_view.dart';
  12. import '../../resource/colors.gen.dart';
  13. import '../../resource/string.gen.dart';
  14. import '../../router/app_pages.dart';
  15. class UrgentContactPage extends BasePage<UrgentContactController> {
  16. const UrgentContactPage({super.key});
  17. static void start() {
  18. Get.toNamed(RoutePath.urgentContact);
  19. }
  20. @override
  21. bool immersive() {
  22. return true;
  23. }
  24. @override
  25. Widget buildBody(BuildContext context) {
  26. return Obx(() {
  27. if (controller.contactList.isEmpty) {
  28. return urgentEmptyView();
  29. } else {
  30. return urgentListView();
  31. }
  32. });
  33. }
  34. Widget urgentListView() {
  35. return Container(
  36. decoration: BoxDecoration(
  37. gradient: LinearGradient(
  38. colors: [ColorName.white, '#F7F7F7'.color, '#F7F7F7'.color],
  39. begin: Alignment.topCenter,
  40. end: Alignment.bottomCenter),
  41. ),
  42. child: Stack(
  43. children: [
  44. Assets.images.bgPageBackground.image(width: 1.sw),
  45. Positioned(
  46. top: 0,
  47. right: 35.w,
  48. child: SafeArea(
  49. child: Assets.images.bgUrgentContactLogo
  50. .image(width: 145.w, height: 145.w)),
  51. ),
  52. SafeArea(
  53. child: Column(
  54. children: [
  55. CommonView.buildAppBar("", backOnTap: controller.back),
  56. Expanded(
  57. child: ListView(
  58. children: [
  59. SizedBox(height: 25.h),
  60. buildAddContact(),
  61. SizedBox(height: 20.w),
  62. Padding(
  63. padding: EdgeInsets.only(left: 17.w),
  64. child: Text(
  65. StringName.urgentContactSubtitle,
  66. style: TextStyle(
  67. fontSize: 16.sp,
  68. color: ColorName.black90,
  69. fontWeight: FontWeight.bold),
  70. ),
  71. ),
  72. SizedBox(height: 14.w),
  73. ...controller.contactList.map((e) => buildContactItem(e))
  74. ],
  75. )),
  76. Container(
  77. padding: EdgeInsets.only(
  78. left: 15.w, right: 15.w, top: 10.w, bottom: 15.w),
  79. width: double.infinity,
  80. decoration: BoxDecoration(
  81. color: ColorName.white,
  82. boxShadow: [
  83. BoxShadow(
  84. color: ColorName.black.withOpacity(0.1),
  85. offset: Offset(20, 20),
  86. blurRadius: 10)
  87. ],
  88. ),
  89. child: GestureDetector(
  90. onTap: () => controller.sendAllHelpClick(),
  91. child: Container(
  92. decoration: BoxDecoration(
  93. color: '#FF5555'.color,
  94. borderRadius: BorderRadius.circular(10.w),
  95. ),
  96. height: 46.w,
  97. child: Center(
  98. child: Text(StringName.urgentContactSendHelp,
  99. style: TextStyle(
  100. fontSize: 14.sp, color: ColorName.white)),
  101. ),
  102. ),
  103. ),
  104. )
  105. ],
  106. ),
  107. )
  108. ],
  109. ),
  110. );
  111. }
  112. Widget buildContactItem(ContactInfo e) {
  113. return Container(
  114. decoration: BoxDecoration(
  115. color: ColorName.white,
  116. borderRadius: BorderRadius.circular(11.w),
  117. boxShadow: [
  118. BoxShadow(
  119. color: ColorName.black.withOpacity(0.03),
  120. offset: Offset(2, 2),
  121. blurRadius: 2)
  122. ]),
  123. margin: EdgeInsets.only(left: 12.w, right: 12.w, bottom: 10.w),
  124. padding: EdgeInsets.symmetric(horizontal: 10.w, vertical: 16.w),
  125. child: Row(
  126. children: [
  127. Assets.images.iconDefaultFriendAvatar
  128. .image(width: 48.w, height: 48.w),
  129. SizedBox(width: 8.w),
  130. Text(e.remark ?? e.phone,
  131. style: TextStyle(
  132. fontSize: 14.sp,
  133. color: ColorName.black90,
  134. fontWeight: FontWeight.bold)),
  135. SizedBox(width: 8.w),
  136. Visibility(
  137. visible: e.favor == true,
  138. child: Container(
  139. decoration: BoxDecoration(
  140. color: '#1F969696'.color,
  141. borderRadius: BorderRadius.circular(4.w)),
  142. padding: EdgeInsets.symmetric(horizontal: 9.w, vertical: 3.w),
  143. child: Text(StringName.urgentContactDefaultSelected,
  144. style: TextStyle(fontSize: 12.sp, color: '#858585'.color))),
  145. ),
  146. Spacer(),
  147. GestureDetector(
  148. onTap: () => controller.sendHelpClick(e.phone),
  149. child: Assets.images.iconUrgentContactDialPhone
  150. .image(width: 40.w, height: 40.w),
  151. ),
  152. SizedBox(width: 16.w),
  153. Builder(builder: (context) {
  154. return GestureDetector(
  155. onTap: () => controller.moreClick(context, e),
  156. child: Assets.images.iconUrgentContactMore
  157. .image(width: 24.w, height: 24.w));
  158. })
  159. ],
  160. ),
  161. );
  162. }
  163. Widget urgentEmptyView() {
  164. return SafeArea(
  165. child: Column(
  166. children: [
  167. CommonView.buildAppBar(StringName.urgentContactTitle,
  168. backOnTap: controller.back),
  169. SizedBox(height: 40.h),
  170. Assets.images.bgUrgentContactEmpty.image(width: 268.w, height: 250.w),
  171. SizedBox(height: 37.h),
  172. Text(StringName.urgentContactOnceClickHelp,
  173. style: TextStyle(
  174. fontSize: 18.sp,
  175. color: '#FF4B34'.color,
  176. fontWeight: FontWeight.bold)),
  177. SizedBox(height: 21.h),
  178. SizedBox(
  179. width: 261.w,
  180. child: Text(StringName.urgentContactOnceClickHelpDesc,
  181. style: TextStyle(
  182. fontSize: 13.sp,
  183. color: ColorName.black90,
  184. )),
  185. ),
  186. SizedBox(height: 60.h),
  187. GestureDetector(
  188. onTap: controller.addContactClick,
  189. child: Container(
  190. decoration: BoxDecoration(
  191. color: ColorName.colorPrimary,
  192. borderRadius: BorderRadius.circular(10.w)),
  193. width: 320.w,
  194. height: 42.w,
  195. child: Row(
  196. mainAxisAlignment: MainAxisAlignment.center,
  197. children: [
  198. Assets.images.iconUrgentAdd.image(width: 12.w, height: 12.w),
  199. SizedBox(width: 5.w),
  200. Text(StringName.urgentContactBtnTxt,
  201. style:
  202. TextStyle(fontSize: 14.sp, color: ColorName.white)),
  203. ],
  204. ),
  205. ),
  206. ),
  207. ],
  208. ),
  209. );
  210. }
  211. Widget buildAddContact() {
  212. return GestureDetector(
  213. onTap: controller.addContactClick,
  214. child: Container(
  215. height: 66.w,
  216. decoration: BoxDecoration(boxShadow: [
  217. BoxShadow(
  218. color: ColorName.black.withOpacity(0.06),
  219. offset: Offset(0, 2),
  220. blurRadius: 10)
  221. ], color: ColorName.white, borderRadius: BorderRadius.circular(10.w)),
  222. margin: EdgeInsets.symmetric(horizontal: 12.w),
  223. child: Row(
  224. mainAxisAlignment: MainAxisAlignment.center,
  225. children: [
  226. SizedBox(
  227. width: 52.w,
  228. height: 52.w,
  229. child: Stack(
  230. children: [
  231. Assets.images.bgUrgentContactAdd
  232. .image(width: double.infinity, height: double.infinity),
  233. Center(
  234. child: Assets.images.iconUrgentContactAdd
  235. .image(width: 28.w, height: 28.w),
  236. ),
  237. ],
  238. ),
  239. ),
  240. SizedBox(width: 18.w),
  241. Column(
  242. mainAxisAlignment: MainAxisAlignment.center,
  243. crossAxisAlignment: CrossAxisAlignment.start,
  244. children: [
  245. Text(
  246. StringName.urgentContactTitle,
  247. style: TextStyle(
  248. fontSize: 14.sp,
  249. color: ColorName.black90,
  250. fontWeight: FontWeight.bold),
  251. ),
  252. SizedBox(height: 3.w),
  253. Text(StringName.urgentContactAddDesc,
  254. style:
  255. TextStyle(fontSize: 12.sp, color: ColorName.black70)),
  256. ],
  257. )
  258. ],
  259. ),
  260. ),
  261. );
  262. }
  263. }