urgent_contact_page.dart 8.9 KB

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