signup_view.dart 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  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 '../../../base/base_view.dart';
  7. import '../../../routes/app_pages.dart';
  8. import '../../../widgets/ix_app_bar.dart';
  9. import '../../../widgets/ix_text_field.dart';
  10. import '../../../widgets/submit_btn.dart';
  11. import '../controllers/signup_controller.dart';
  12. class SignupView extends BaseView<SignupController> {
  13. const SignupView({super.key});
  14. @override
  15. PreferredSizeWidget? get appBar => IXAppBar(title: '');
  16. @override
  17. Widget buildContent(BuildContext context) {
  18. return SafeArea(
  19. child: Padding(
  20. padding: EdgeInsets.symmetric(horizontal: 14.w),
  21. child: SingleChildScrollView(
  22. child: Column(
  23. crossAxisAlignment: CrossAxisAlignment.start,
  24. children: [
  25. 10.verticalSpaceFromWidth,
  26. // 标题
  27. Text(
  28. 'Sign up to NOMO',
  29. style: TextStyle(
  30. fontSize: 28.sp,
  31. height: 1.2,
  32. color: Get.reactiveTheme.textTheme.bodyLarge!.color,
  33. ),
  34. ),
  35. 24.verticalSpaceFromWidth,
  36. // 描述文字
  37. Text(
  38. 'After registration, your free trial will be deducted, and other membership time shifts to your account for multi-device use.',
  39. style: TextStyle(
  40. fontSize: 16.sp,
  41. color: Get.reactiveTheme.hintColor,
  42. height: 1.4,
  43. ),
  44. ),
  45. 20.verticalSpaceFromWidth,
  46. IXTextField(
  47. hintText: 'Username',
  48. prefixIcon: Icons.person_outline,
  49. controller: controller.usernameController,
  50. focusNode: controller.usernameFocusNode,
  51. validator: controller.validatorInputValue,
  52. tipText: '6-20 characters (letters or numbers)',
  53. errorText: '6-20 characters (letters or numbers)',
  54. onChanged: (value) {
  55. controller.checkSignup();
  56. },
  57. ),
  58. 16.verticalSpaceFromWidth,
  59. IXTextField(
  60. hintText: 'Password',
  61. prefixIcon: Icons.lock_outline,
  62. controller: controller.passwordController,
  63. focusNode: controller.passwordFocusNode,
  64. validator: controller.validatorInputValue,
  65. isPassword: true,
  66. tipText: '6-20 characters (letters or numbers)',
  67. errorText: '6-20 characters (letters or numbers)',
  68. onChanged: (value) {
  69. controller.checkSignup();
  70. },
  71. ),
  72. 156.verticalSpaceFromWidth,
  73. SubmitButton(
  74. text: 'Sign Up',
  75. enabled: controller.isSignup,
  76. onPressed: () {},
  77. ),
  78. 10.verticalSpaceFromWidth,
  79. // 底部注册链接
  80. Center(
  81. child: RichText(
  82. text: TextSpan(
  83. children: [
  84. TextSpan(
  85. text: 'Already have an account? ',
  86. style: TextStyle(
  87. color: Colors.grey[500],
  88. fontSize: 14.sp,
  89. ),
  90. ),
  91. TextSpan(
  92. text: ' Login now',
  93. recognizer: TapGestureRecognizer()
  94. ..onTap = () {
  95. Get.toNamed(Routes.LOGIN);
  96. },
  97. style: TextStyle(
  98. color: Get.reactiveTheme.primaryColor,
  99. fontSize: 14.sp,
  100. fontWeight: FontWeight.w400,
  101. ),
  102. ),
  103. ],
  104. ),
  105. ),
  106. ),
  107. ],
  108. ),
  109. ),
  110. ),
  111. );
  112. }
  113. }