precode_view.dart 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245
  1. import 'package:flutter/material.dart';
  2. import 'package:flutter_screenutil/flutter_screenutil.dart';
  3. import 'package:get/get.dart';
  4. import 'package:nomo/app/base/base_view.dart';
  5. import 'package:nomo/app/widgets/click_opacity.dart';
  6. import 'package:nomo/app/widgets/ix_image.dart';
  7. import 'package:nomo/config/theme/theme_extensions/theme_extension.dart';
  8. import '../../../../config/theme/dark_theme_colors.dart';
  9. import '../../../../config/translations/strings_enum.dart';
  10. import '../../../constants/assets.dart';
  11. import '../../../constants/iconfont/iconfont.dart';
  12. import '../../../widgets/ix_app_bar.dart';
  13. import '../../../widgets/submit_btn.dart';
  14. import '../controllers/precode_controller.dart';
  15. class PrecodeView extends BaseView<PrecodeController> {
  16. const PrecodeView({super.key});
  17. @override
  18. PreferredSizeWidget? get appBar => IXAppBar(title: Strings.myPreCode.tr);
  19. @override
  20. Widget buildContent(BuildContext context) {
  21. return Padding(
  22. padding: EdgeInsets.symmetric(horizontal: 14.w),
  23. child: Column(
  24. children: [
  25. 10.verticalSpaceFromWidth,
  26. // 说明卡片
  27. _buildInfoCard(),
  28. 30.verticalSpaceFromWidth,
  29. // Pre Code 显示
  30. _buildPreCodeDisplay(),
  31. 10.verticalSpaceFromWidth,
  32. // Preview/Hide 和 Copy 按钮
  33. _buildActionButtons(),
  34. 40.verticalSpaceFromWidth,
  35. // Send to Email 按钮
  36. _buildEmailButton(),
  37. 10.verticalSpaceFromWidth,
  38. // 说明文字
  39. Text(
  40. Strings.sendPreCodeEmailDesc.tr,
  41. textAlign: TextAlign.center,
  42. style: TextStyle(
  43. fontSize: 13.sp,
  44. height: 1.4,
  45. color: Get.reactiveTheme.hintColor,
  46. ),
  47. ),
  48. 10.verticalSpaceFromWidth,
  49. // Save Local Copy 按钮
  50. _buildSaveButton(),
  51. 12.verticalSpaceFromWidth,
  52. // 说明文字
  53. Text(
  54. Strings.storeLocalCopyDesc.tr,
  55. textAlign: TextAlign.center,
  56. style: TextStyle(
  57. fontSize: 13.sp,
  58. height: 1.4,
  59. color: Get.reactiveTheme.hintColor,
  60. ),
  61. ),
  62. ],
  63. ),
  64. );
  65. }
  66. /// 说明卡片
  67. Widget _buildInfoCard() {
  68. return Container(
  69. width: double.infinity,
  70. padding: EdgeInsets.all(10.w),
  71. decoration: BoxDecoration(
  72. color: Get.reactiveTheme.highlightColor,
  73. borderRadius: BorderRadius.circular(8.r),
  74. ),
  75. child: Column(
  76. children: [
  77. // 铃铛图标
  78. Icon(
  79. IconFont.icon67,
  80. color: DarkThemeColors.validTermColor,
  81. size: 30.w,
  82. ),
  83. 10.verticalSpaceFromWidth,
  84. // 说明文字
  85. Text(
  86. Strings.preCodeInfoMessage.tr,
  87. textAlign: TextAlign.center,
  88. style: TextStyle(
  89. fontSize: 14.sp,
  90. color: Get.reactiveTheme.textTheme.bodyLarge!.color,
  91. height: 1.5,
  92. ),
  93. ),
  94. 20.verticalSpaceFromWidth,
  95. // 安全提示
  96. Text(
  97. Strings.pleaseStoreSecurely.tr,
  98. textAlign: TextAlign.center,
  99. style: TextStyle(
  100. fontSize: 14.sp,
  101. color: Get.reactiveTheme.textTheme.bodyLarge!.color,
  102. height: 1.5,
  103. ),
  104. ),
  105. ],
  106. ),
  107. );
  108. }
  109. /// Pre Code 显示
  110. Widget _buildPreCodeDisplay() {
  111. return Obx(
  112. () => Text(
  113. controller.displayCode,
  114. style: TextStyle(
  115. fontSize: 34.sp,
  116. height: 1.2,
  117. color: Get.reactiveTheme.textTheme.bodyLarge!.color,
  118. fontWeight: FontWeight.w500,
  119. ),
  120. ),
  121. );
  122. }
  123. /// Preview/Hide 和 Copy 按钮
  124. Widget _buildActionButtons() {
  125. return Row(
  126. mainAxisAlignment: MainAxisAlignment.center,
  127. children: [
  128. // Preview/Hide 按钮
  129. Obx(
  130. () => ClickOpacity(
  131. onTap: controller.togglePreview,
  132. child: Row(
  133. mainAxisSize: MainAxisSize.min,
  134. children: [
  135. Text(
  136. controller.isPreviewMode.value ? Strings.hide.tr : Strings.preview.tr,
  137. style: TextStyle(
  138. fontSize: 12.sp,
  139. height: 1.7,
  140. color: Get.reactiveTheme.hintColor,
  141. ),
  142. ),
  143. 8.horizontalSpace,
  144. Icon(
  145. controller.isPreviewMode.value
  146. ? IconFont.icon12
  147. : IconFont.icon13,
  148. color: Get.reactiveTheme.hintColor,
  149. size: 20.w,
  150. ),
  151. ],
  152. ),
  153. ),
  154. ),
  155. 20.horizontalSpace,
  156. Container(
  157. width: 1.w,
  158. height: 20.w,
  159. color: Get.reactiveTheme.dividerColor,
  160. ),
  161. 20.horizontalSpace,
  162. // Copy 按钮
  163. ClickOpacity(
  164. onTap: controller.copyCode,
  165. child: Row(
  166. mainAxisSize: MainAxisSize.min,
  167. children: [
  168. Text(
  169. Strings.copy.tr,
  170. style: TextStyle(
  171. fontSize: 12.sp,
  172. height: 1.7,
  173. color: Get.reactiveTheme.hintColor,
  174. ),
  175. ),
  176. 8.horizontalSpace,
  177. Icon(
  178. IconFont.icon57,
  179. color: Get.reactiveTheme.hintColor,
  180. size: 20.w,
  181. ),
  182. ],
  183. ),
  184. ),
  185. ],
  186. );
  187. }
  188. /// Send to Email 按钮
  189. Widget _buildEmailButton() {
  190. return SubmitButton(
  191. prefixIcon: IXImage(
  192. source: Assets.preCodeEmail,
  193. width: 20.w,
  194. height: 20.w,
  195. sourceType: ImageSourceType.asset,
  196. ),
  197. text: Strings.sendToEmail.tr,
  198. bgColor: Get.reactiveTheme.highlightColor,
  199. onPressed: controller.sendToEmail,
  200. );
  201. }
  202. /// Save Local Copy 按钮
  203. Widget _buildSaveButton() {
  204. return SubmitButton(
  205. prefixIcon: IXImage(
  206. source: Assets.preCodeSaveLocal,
  207. width: 20.w,
  208. height: 20.w,
  209. sourceType: ImageSourceType.asset,
  210. ),
  211. text: Strings.saveLocalCopy.tr,
  212. bgColor: Get.reactiveTheme.highlightColor,
  213. onPressed: controller.saveLocalCopy,
  214. );
  215. }
  216. }