permission_setting_page.dart 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. import 'package:flutter/cupertino.dart';
  2. import 'package:flutter_screenutil/flutter_screenutil.dart';
  3. import 'package:get/get.dart';
  4. import 'package:location/base/base_page.dart';
  5. import 'package:location/module/permission/permission_setting_controller.dart';
  6. import 'package:location/resource/colors.gen.dart';
  7. import 'package:location/resource/string.gen.dart';
  8. import 'package:location/utils/common_expand.dart';
  9. import 'package:location/widget/common_view.dart';
  10. import '../../router/app_pages.dart';
  11. class PermissionSettingPage extends BasePage<PermissionSettingController> {
  12. const PermissionSettingPage({super.key});
  13. static void start() {
  14. Get.toNamed(RoutePath.permissionSetting);
  15. }
  16. @override
  17. Widget buildBody(BuildContext context) {
  18. return Column(
  19. children: [
  20. CommonView.buildAppBar(StringName.mineFunPermissionSetting,
  21. backOnTap: () => Get.back(), titleCenter: false),
  22. SizedBox(height: 12.w),
  23. Expanded(
  24. child: ListView(
  25. children: [
  26. buildPermissionItem(StringName.permissionLocationSetting,
  27. StringName.permissionLocationSettingSubtitle, () {
  28. controller.openLocationSetting();
  29. }),
  30. buildPermissionItem(StringName.permissionPhoneScreenSetting,
  31. StringName.permissionPhoneScreenSettingSubtitle, () {
  32. controller.openPhoneScreenSetting();
  33. }),
  34. buildPermissionItem(StringName.permissionNotificationSetting,
  35. StringName.permissionNotificationSettingSubtitle, () {
  36. controller.openNotificationSetting();
  37. }),
  38. Obx(() {
  39. return Visibility(
  40. visible: controller.permissionShowBattery,
  41. child: buildPermissionItem(
  42. StringName.permissionBatteryOptimization,
  43. StringName.permissionBatteryOptimizationSubtitle, () {
  44. controller.openBatterySetting();
  45. }),
  46. );
  47. }),
  48. Obx(() {
  49. return Visibility(
  50. visible: controller.permissionShowBackgroundRun,
  51. child: buildPermissionItem(
  52. StringName.permissionBackgroundOperation,
  53. StringName.permissionBackgroundOperationSubtitle, () {
  54. controller.openBackgroundRunSetting();
  55. }),
  56. );
  57. }),
  58. Obx(() {
  59. return Visibility(
  60. visible: controller.permissionShowTip,
  61. child: buildPermissionTips());
  62. })
  63. ],
  64. ))
  65. ],
  66. );
  67. }
  68. Widget buildPermissionItem(
  69. String title, String subTitle, VoidCallback onTap) {
  70. return Container(
  71. margin: EdgeInsets.only(bottom: 12.w, left: 12.w, right: 12.w),
  72. decoration: BoxDecoration(
  73. color: '#FAFAFA'.color,
  74. borderRadius: BorderRadius.circular(6.w),
  75. ),
  76. padding: EdgeInsets.symmetric(horizontal: 12.w, vertical: 22.w),
  77. child: Column(
  78. crossAxisAlignment: CrossAxisAlignment.start,
  79. children: [
  80. Row(
  81. children: [
  82. Text(
  83. title,
  84. style: TextStyle(
  85. fontSize: 16.sp,
  86. color: '#202020'.color,
  87. fontWeight: FontWeight.bold),
  88. ),
  89. Spacer(),
  90. GestureDetector(
  91. onTap: onTap,
  92. child: Container(
  93. decoration: BoxDecoration(
  94. color: ColorName.colorPrimary,
  95. borderRadius: BorderRadius.circular(100.w)),
  96. padding:
  97. EdgeInsets.symmetric(horizontal: 15.w, vertical: 5.w),
  98. child: Text(StringName.permissionSetting,
  99. style:
  100. TextStyle(fontSize: 14.sp, color: ColorName.white)),
  101. ),
  102. )
  103. ],
  104. ),
  105. SizedBox(height: 8.w),
  106. Text(subTitle,
  107. style: TextStyle(fontSize: 14.sp, color: '#404040'.color))
  108. ],
  109. ),
  110. );
  111. }
  112. Widget buildPermissionTips() {
  113. return Container(
  114. decoration: BoxDecoration(
  115. color: '#FAFAFA'.color,
  116. borderRadius: BorderRadius.circular(6.w),
  117. ),
  118. padding: EdgeInsets.symmetric(vertical: 24.w, horizontal: 12.w),
  119. margin: EdgeInsets.only(left: 12.w, right: 12.w),
  120. child: Column(
  121. crossAxisAlignment: CrossAxisAlignment.start,
  122. children: [
  123. RichText(
  124. text: TextSpan(
  125. style: TextStyle(fontSize: 14.sp, color: '#404040'.color),
  126. children: [
  127. TextSpan(text: '温馨提示:'),
  128. TextSpan(
  129. text: '请勿开启【省电模式】\n\n',
  130. style: TextStyle(fontSize: 14.sp, color: '#EC5050'.color)),
  131. TextSpan(text: '在省电模式下,可能会导致轨迹异常等问题,建议您关闭省电模式')
  132. ])),
  133. ],
  134. ),
  135. );
  136. }
  137. }