common_point_setting_page.dart 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  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/user_info.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 '../../../widget/gradient_switch.dart';
  16. import 'common_point_setting_controller.dart';
  17. class CommonPointSettingPage extends BasePage<CommonPointSettingController> {
  18. const CommonPointSettingPage({super.key});
  19. static void start() {
  20. Get.toNamed(RoutePath.commonPointSetting);
  21. }
  22. @override
  23. bool immersive() {
  24. return true;
  25. }
  26. @override
  27. Widget buildBody(BuildContext context) {
  28. return Stack(
  29. children: [
  30. Assets.images.bgPageBackground.image(width: double.infinity),
  31. SafeArea(
  32. child: Column(
  33. children: [buildHeaderView(), Expanded(child: buildContentView())],
  34. ),
  35. ),
  36. ],
  37. );
  38. }
  39. Widget buildHeaderView() {
  40. return CommonView.buildAppBar(StringName.commonPointSettingTitle,
  41. backOnTap: controller.onBack);
  42. }
  43. Widget buildContentView() {
  44. return CustomScrollView(
  45. slivers: [
  46. SliverToBoxAdapter(child: Obx(() {
  47. return Column(
  48. children: [
  49. buildZoneSettingView(),
  50. Container(width: 328.w, height: 1.w, color: ColorName.black10),
  51. SizedBox(height: 10.w),
  52. if (controller.isZoneAlert)
  53. buildOpenSettingItem(StringName.commonPointSettingAllFriends,
  54. controller.isNotificationAllFriends,
  55. onTap: controller.onSettingAllFriendsClick),
  56. if (controller.isZoneAlert)
  57. buildOpenSettingItem(
  58. StringName.commonPointSettingSomeGoodFriends,
  59. !controller.isNotificationAllFriends,
  60. desc: controller.friendsList.isEmpty
  61. ? StringName.commonPointSettingSomeGoodFriendsDesc
  62. : null,
  63. onTap: controller.onSettingSomeGoodFriendsClick),
  64. SizedBox(height: 20.w),
  65. ],
  66. );
  67. })),
  68. Obx(() {
  69. if (!controller.isZoneAlert || controller.isNotificationAllFriends) {
  70. return SliverToBoxAdapter();
  71. }
  72. return SliverList.builder(
  73. itemBuilder: (ctx, index) =>
  74. buildSomeGoodFriendsItem(controller.friendsList[index]),
  75. itemCount: controller.friendsList.length);
  76. }),
  77. ],
  78. );
  79. }
  80. Widget buildSomeGoodFriendsItem(UserInfo info) {
  81. return Container(
  82. height: 52.w,
  83. decoration: BoxDecoration(
  84. color: '#F6F6F8'.color, borderRadius: BorderRadius.circular(10.w)),
  85. padding: EdgeInsets.symmetric(horizontal: 10.w),
  86. margin: EdgeInsets.only(left: 16.w, right: 16.w, bottom: 12.w),
  87. child: Row(
  88. children: [
  89. buildCustomAvatarOrDefaultAvatarView(
  90. size: 36.w, avatar: info.avatar, isMine: false),
  91. SizedBox(width: 8.w),
  92. Text((info.getUserNickName()),
  93. style: TextStyle(fontSize: 13.sp, color: ColorName.black90)),
  94. Spacer(),
  95. Assets.images.iconAvatarSelected.image(width: 18.w, height: 18.w)
  96. ],
  97. ));
  98. }
  99. Widget buildOpenSettingItem(String title, bool isChecked,
  100. {String? desc, VoidCallback? onTap}) {
  101. return GestureDetector(
  102. behavior: HitTestBehavior.translucent,
  103. onTap: onTap,
  104. child: Container(
  105. padding: EdgeInsets.symmetric(horizontal: 16.w, vertical: 12.w),
  106. child: Column(
  107. crossAxisAlignment: CrossAxisAlignment.start,
  108. children: [
  109. Row(
  110. children: [
  111. Text(title,
  112. style:
  113. TextStyle(fontSize: 12.sp, color: ColorName.black60)),
  114. Spacer(),
  115. isChecked
  116. ? Assets.images.iconAvatarSelected
  117. .image(width: 18.w, height: 18.w)
  118. : Assets.images.iconCbUnCheck
  119. .image(width: 18.w, height: 18.w)
  120. ],
  121. ),
  122. if (desc != null) SizedBox(height: 6.h),
  123. if (desc != null)
  124. Text(
  125. desc,
  126. style: TextStyle(fontSize: 10.sp, color: '#FF7272'.color),
  127. ),
  128. ],
  129. ),
  130. ),
  131. );
  132. }
  133. Widget buildZoneSettingView() {
  134. return Container(
  135. padding: EdgeInsets.symmetric(horizontal: 16.w, vertical: 20.w),
  136. child: Row(
  137. children: [
  138. Column(
  139. crossAxisAlignment: CrossAxisAlignment.start,
  140. children: [
  141. Text(StringName.commonPointSettingNotificationTitle,
  142. style: TextStyle(
  143. fontSize: 15.sp,
  144. color: Colors.black,
  145. fontWeight: FontWeight.bold)),
  146. SizedBox(height: 6.h),
  147. Text(StringName.commonPointSettingNotificationDesc,
  148. style: TextStyle(fontSize: 11.sp, color: ColorName.black30)),
  149. ],
  150. ),
  151. Spacer(),
  152. Obx(() {
  153. return GradientSwitch(
  154. unselectedGradient:
  155. LinearGradient(colors: ['#D4D8EB'.color, '#D4D8EB'.color]),
  156. selectedGradient: LinearGradient(
  157. colors: [ColorName.colorPrimary, ColorName.colorPrimary]),
  158. indicatorSize: 20.w,
  159. width: 46.w,
  160. height: 25.w,
  161. value: controller.isZoneAlert,
  162. onChanged: controller.zoneSettingFuture);
  163. })
  164. ],
  165. ),
  166. );
  167. }
  168. }