signup_view.dart 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. import 'package:flutter/gestures.dart';
  2. import 'package:flutter/material.dart';
  3. import 'package:flutter_screenutil/flutter_screenutil.dart';
  4. import 'package:get/get.dart';
  5. import 'package:nomo/config/theme/theme_extensions/theme_extension.dart';
  6. import '../../../../config/translations/strings_enum.dart';
  7. import '../../../base/base_view.dart';
  8. import '../../../constants/iconfont/iconfont.dart';
  9. import '../../../routes/app_pages.dart';
  10. import '../../../widgets/ix_app_bar.dart';
  11. import '../../../widgets/ix_text_field.dart';
  12. import '../../../widgets/submit_btn.dart';
  13. import '../controllers/signup_controller.dart';
  14. class SignupView extends BaseView<SignupController> {
  15. const SignupView({super.key});
  16. @override
  17. PreferredSizeWidget? get appBar => IXAppBar(title: '');
  18. @override
  19. Widget buildContent(BuildContext context) {
  20. return SafeArea(
  21. child: Padding(
  22. padding: EdgeInsets.symmetric(horizontal: 14.w),
  23. child: SingleChildScrollView(
  24. child: Column(
  25. crossAxisAlignment: CrossAxisAlignment.start,
  26. children: [
  27. 10.verticalSpaceFromWidth,
  28. // 标题
  29. Text(
  30. Strings.signup.tr,
  31. style: TextStyle(
  32. fontSize: 28.sp,
  33. height: 1.2,
  34. color: Get.reactiveTheme.textTheme.bodyLarge!.color,
  35. ),
  36. ),
  37. 24.verticalSpaceFromWidth,
  38. // 描述文字
  39. Text(
  40. Strings.signupDescription.tr,
  41. style: TextStyle(
  42. fontSize: 16.sp,
  43. color: Get.reactiveTheme.hintColor,
  44. height: 1.4,
  45. ),
  46. ),
  47. 20.verticalSpaceFromWidth,
  48. IXTextField(
  49. hintText: Strings.username.tr,
  50. prefixIcon: IconFont.icon10,
  51. controller: controller.usernameController,
  52. focusNode: controller.usernameFocusNode,
  53. validator: controller.validatorInputValue,
  54. tipText: Strings.usernamePasswordRule.tr,
  55. errorText: Strings.usernamePasswordRule.tr,
  56. onChanged: (value) {
  57. controller.checkSignup();
  58. },
  59. ),
  60. 16.verticalSpaceFromWidth,
  61. IXTextField(
  62. hintText: Strings.password.tr,
  63. prefixIcon: IconFont.icon11,
  64. controller: controller.passwordController,
  65. focusNode: controller.passwordFocusNode,
  66. validator: controller.validatorInputValue,
  67. isPassword: true,
  68. tipText: Strings.usernamePasswordRule.tr,
  69. errorText: Strings.usernamePasswordRule.tr,
  70. onChanged: (value) {
  71. controller.checkSignup();
  72. },
  73. ),
  74. 156.verticalSpaceFromWidth,
  75. SubmitButton(
  76. text: Strings.signupButton.tr,
  77. enabled: controller.isSignup,
  78. onPressed: () {},
  79. ),
  80. 10.verticalSpaceFromWidth,
  81. // 底部注册链接
  82. Center(
  83. child: RichText(
  84. text: TextSpan(
  85. children: [
  86. TextSpan(
  87. text: Strings.alreadyHaveAccount.tr,
  88. style: TextStyle(
  89. color: Colors.grey[500],
  90. fontSize: 14.sp,
  91. ),
  92. ),
  93. TextSpan(
  94. text: Strings.loginNow.tr,
  95. recognizer: TapGestureRecognizer()
  96. ..onTap = () {
  97. Get.toNamed(Routes.LOGIN);
  98. },
  99. style: TextStyle(
  100. color: Get.reactiveTheme.primaryColor,
  101. fontSize: 14.sp,
  102. fontWeight: FontWeight.w400,
  103. ),
  104. ),
  105. ],
  106. ),
  107. ),
  108. ),
  109. ],
  110. ),
  111. ),
  112. ),
  113. );
  114. }
  115. }