precode_sendemail_view.dart 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  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/submit_btn.dart';
  6. import 'package:nomo/config/theme/theme_extensions/theme_extension.dart';
  7. import '../../../../../config/theme/dark_theme_colors.dart';
  8. import '../../../../constants/assets.dart';
  9. import '../../../../constants/iconfont/iconfont.dart';
  10. import '../../../../widgets/info_card.dart';
  11. import '../../../../widgets/ix_app_bar.dart';
  12. import '../../../../widgets/ix_image.dart';
  13. import '../../../../widgets/ix_text_field.dart';
  14. import '../controllers/precode_sendemail_controller.dart';
  15. class PrecodeSendemailView extends BaseView<PrecodeSendemailController> {
  16. const PrecodeSendemailView({super.key});
  17. @override
  18. PreferredSizeWidget? get appBar => IXAppBar(title: 'Send Pre Code to Email');
  19. @override
  20. Widget buildContent(BuildContext context) {
  21. return Padding(
  22. padding: EdgeInsets.symmetric(horizontal: 14.w),
  23. child: SingleChildScrollView(
  24. child: Column(
  25. children: [
  26. 10.verticalSpaceFromWidth,
  27. // 邮箱输入框
  28. _buildEmailInput(),
  29. 20.verticalSpaceFromWidth,
  30. // 发送按钮
  31. _buildSendButton(),
  32. 12.verticalSpaceFromWidth,
  33. // 说明文字
  34. Text(
  35. 'Your code will be backed up to this email.',
  36. textAlign: TextAlign.center,
  37. style: TextStyle(
  38. fontSize: 14.sp,
  39. color: Get.reactiveTheme.hintColor.withOpacity(0.6),
  40. ),
  41. ),
  42. // 信息卡片列表
  43. _buildInfoCardList(),
  44. ],
  45. ),
  46. ),
  47. );
  48. }
  49. /// 邮箱输入框
  50. Widget _buildEmailInput() {
  51. return IXTextField(
  52. hintText: 'Enter your email',
  53. controller: controller.emailController,
  54. focusNode: controller.emailFocusNode,
  55. keyboardType: TextInputType.emailAddress,
  56. textInputAction: TextInputAction.done,
  57. onChanged: (value) => controller.email.value = value,
  58. );
  59. }
  60. /// 发送按钮
  61. Widget _buildSendButton() {
  62. return Obx(() {
  63. final canSend = controller.canSend;
  64. final isSending = controller.isSending.value;
  65. return SubmitButton(
  66. prefixIcon: IXImage(
  67. source: Assets.preCodeEmailTipWhite,
  68. width: 20.w,
  69. height: 20.w,
  70. sourceType: ImageSourceType.asset,
  71. ),
  72. enabled: canSend,
  73. isLoading: isSending,
  74. text: 'Send your Email',
  75. onPressed: controller.sendEmail,
  76. );
  77. });
  78. }
  79. /// 信息卡片列表(带连接线)
  80. Widget _buildInfoCardList() {
  81. return InfoCard(
  82. title: '',
  83. items: [
  84. InfoItem(
  85. icon: IconFont.icon23,
  86. title: 'Your Pre Credential',
  87. description:
  88. 'This is your VIP credential. Please store it securely and do not share it with anyone.',
  89. iconColor: DarkThemeColors.primaryColor,
  90. ),
  91. InfoItem(
  92. imageSource: Assets.preCodeEmailTipBlue,
  93. title: 'Secure Email Backup',
  94. description:
  95. 'We will send an email containing this credential to your specified email address for safekeeping.',
  96. iconColor: DarkThemeColors.primaryColor,
  97. ),
  98. InfoItem(
  99. icon: IconFont.icon43,
  100. title: 'Send and Save',
  101. description:
  102. 'After the email is sent, we recommend you also save this credential to a secure location on your device.',
  103. iconColor: DarkThemeColors.primaryColor,
  104. ),
  105. ],
  106. );
  107. }
  108. }