import 'package:ef/ef.dart'; import 'package:flutter/material.dart'; import 'package:vbvs_app/common/color/appConstants.dart'; import 'package:vbvs_app/common/color/appFontsize.dart'; import 'package:vbvs_app/common/util/CommonVariables.dart'; import 'package:vbvs_app/common/util/FitTool.dart'; import 'package:vbvs_app/common/util/MyUtils.dart'; import 'package:vbvs_app/component/tool/CustomCard.dart'; import 'package:vbvs_app/component/tool/TopSlideNotification.dart'; import 'package:vbvs_app/controller/time/countdown_controller.dart'; import 'package:vbvs_app/pages/common/selectDialog.dart'; import 'package:vbvs_app/pages/mh_page/user/controller/mht_register_controller.dart'; class RegisterPage extends GetView { final scaffoldKey = GlobalKey(); BoxConstraints? bodysize; final ScrollController _scrollController = ScrollController(); RegisterPage() { controller.model.pdshow = true; controller.model.cpdshow = true; } @override Widget build(BuildContext context) { return LayoutBuilder(builder: (context, cc) { bodysize = cc; return GestureDetector( child: Container( decoration: const BoxDecoration( image: DecorationImage( image: AssetImage('assets/images/new_background.png'), fit: BoxFit.fill, ), ), child: Scaffold( backgroundColor: Colors.transparent, appBar: AppBar( backgroundColor: Colors.transparent, automaticallyImplyLeading: false, iconTheme: IconThemeData(color: Colors.white), titleSpacing: 0, title: Container( width: double.infinity, height: 180.rpx, child: Stack( alignment: Alignment.center, children: [ Text( '用户注册'.tr, textAlign: TextAlign.center, style: TextStyle( color: Colors.white, fontSize: 30.rpx, ), ), Positioned( left: 0.rpx, child: returnIconButtomNew(), ), ], ), ), actions: [], centerTitle: false, ), body: SingleChildScrollView( controller: _scrollController, child: Container( width: bodysize!.maxWidth, height: bodysize!.maxHeight * 1, child: Column( mainAxisSize: MainAxisSize.max, children: [ Expanded( child: Padding( padding: EdgeInsetsDirectional.fromSTEB( 98.rpx, 0, 98.rpx, 0), child: Container( width: bodysize!.maxWidth, height: bodysize!.maxHeight * 0.886, child: Container( width: bodysize!.maxWidth, height: bodysize!.maxHeight * 1, child: Column( mainAxisSize: MainAxisSize.max, children: [ Align( alignment: AlignmentDirectional(-1, 0), child: Padding( padding: EdgeInsetsDirectional.fromSTEB( 0, 184.rpx, 0, 0), child: Container( width: double.infinity, height: 46, decoration: BoxDecoration( color: Color(0xFFF3F5F6), borderRadius: BorderRadius.circular(12), ), constraints: BoxConstraints( minHeight: 92.rpx, ), child: Padding( padding: EdgeInsetsDirectional.fromSTEB( 10, 0, 35.rpx, 0), child: Row( mainAxisSize: MainAxisSize.max, mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Expanded( child: Container( child: Align( alignment: AlignmentDirectional( -1, 0), child: TextFormField( onChanged: (value) { controller.model .register_phone = value; }, decoration: InputDecoration( isDense: true, hintText: '请输入手机号'.tr, hintStyle: TextStyle( fontFamily: 'Readex Pro', color: Color(0xFF929699), fontSize: 26.rpx, ), border: InputBorder.none, ), style: TextStyle( fontFamily: 'Readex Pro', fontSize: 26.rpx, color: Colors.black, ), ), ), ), ), ], ), ), ), ), ), Padding( padding: EdgeInsetsDirectional.fromSTEB( 0.rpx, 17, 0.rpx, 0), child: Container( width: bodysize!.maxWidth, height: 46, decoration: BoxDecoration(), child: Stack( children: [ Align( alignment: AlignmentDirectional(0, 0), child: Container( width: MediaQuery.sizeOf(context) .width, height: 46, decoration: BoxDecoration( color: Color(0xFFF3F5F6), borderRadius: BorderRadius.circular(12), ), child: Align( alignment: AlignmentDirectional(0, 0), child: Obx(() { return TextFormField( obscureText: controller .model.pdshow!, onChanged: (value) { controller.model .register_pd = value; }, initialValue: controller .model.register_pd, decoration: InputDecoration( labelStyle: TextStyle( fontFamily: 'Readex Pro', fontSize: AppFontsize .normal_text_size, letterSpacing: 0, ), hintText: '请输入密码'.tr, hintStyle: TextStyle( fontFamily: 'Readex Pro', color: Color(0xFF929699), fontSize: AppFontsize .normal_text_size, letterSpacing: 0, ), enabledBorder: InputBorder.none, focusedBorder: InputBorder.none, errorBorder: InputBorder.none, focusedErrorBorder: InputBorder.none, contentPadding: EdgeInsetsDirectional .fromSTEB( 10, 12, 0, 0), suffixIcon: IconButton( icon: Icon( // 根据 pdshow 控制图标 controller .model.pdshow! ? Icons .visibility_off : Icons .visibility, color: Color(0xFF333333), size: 16, ), onPressed: () { // 切换 pdshow 状态 controller.model .pdshow = !controller.model .pdshow!; controller .updateAll(); }, ), ), style: TextStyle( fontFamily: 'Readex Pro', fontSize: AppFontsize .normal_text_size, letterSpacing: 0, ), ); })), ), ), ], ), ), ), // Align( // alignment: AlignmentDirectional(-1, 0), // child: Padding( // padding: EdgeInsetsDirectional.fromSTEB( // 0, 32.rpx, 0, 0), // child: Container( // width: double.infinity, // height: bodysize!.maxHeight * 0.06, // decoration: BoxDecoration( // color: Color(0xFFF3F5F6), // borderRadius: BorderRadius.circular(12), // ), // constraints: BoxConstraints( // minHeight: 92.rpx, // ), // child: Padding( // padding: EdgeInsetsDirectional.fromSTEB( // 35.rpx, 0, 35.rpx, 0), // child: Row( // mainAxisSize: MainAxisSize.max, // mainAxisAlignment: // MainAxisAlignment.spaceBetween, // children: [ // Expanded( // child: Container( // child: Align( // alignment: // AlignmentDirectional( // -1, 0), // child: Obx(() => // TextFormField( // onChanged: (value) { // controller.model // .register_pd = // value; // }, // obscureText: controller // .model.pdshow!, // decoration: // InputDecoration( // isDense: true, // hintText: '请输入密码'.tr, // hintStyle: TextStyle( // fontFamily: // 'Readex Pro', // color: Color( // 0xFF929699), // fontSize: 26.rpx, // ), // border: // InputBorder.none, // suffixIcon: // IconButton( // icon: Icon( // controller.model // .pdshow! // ? Icons // .visibility_off // : Icons // .visibility, // color: Color( // 0xFF333333), // size: 16, // ), // onPressed: () { // controller.model // .pdshow = // !controller // .model // .pdshow!; // controller // .updateAll(); // }, // ), // ), // style: TextStyle( // fontFamily: // 'Readex Pro', // fontSize: 26.rpx, // color: Colors.black, // ), // )), // ), // ), // ), // ], // ), // ), // ), // ), // ), Padding( padding: EdgeInsetsDirectional.fromSTEB( 0.rpx, 17, 0.rpx, 0), child: Container( width: bodysize!.maxWidth, height: 46, decoration: BoxDecoration(), child: Stack( children: [ Align( alignment: AlignmentDirectional(0, 0), child: Container( width: MediaQuery.sizeOf(context) .width, height: 46, decoration: BoxDecoration( color: Color(0xFFF3F5F6), borderRadius: BorderRadius.circular(12), ), child: Align( alignment: AlignmentDirectional(0, 0), child: Obx(() { return TextFormField( obscureText: controller .model.cpdshow!, onChanged: (value) { controller.model .register_confirm_pd = value; }, initialValue: controller .model .register_confirm_pd, decoration: InputDecoration( labelStyle: TextStyle( fontFamily: 'Readex Pro', fontSize: AppFontsize .normal_text_size, letterSpacing: 0, ), hintText: '请确认密码'.tr, hintStyle: TextStyle( fontFamily: 'Readex Pro', color: Color(0xFF929699), fontSize: AppFontsize .normal_text_size, letterSpacing: 0, ), enabledBorder: InputBorder.none, focusedBorder: InputBorder.none, errorBorder: InputBorder.none, focusedErrorBorder: InputBorder.none, contentPadding: EdgeInsetsDirectional .fromSTEB( 10, 12, 0, 0), suffixIcon: IconButton( icon: Icon( // 根据 pdshow 控制图标 controller .model.cpdshow! ? Icons .visibility_off : Icons .visibility, color: Color(0xFF333333), size: 16, ), onPressed: () { // 切换 pdshow 状态 controller.model .cpdshow = !controller.model .cpdshow!; controller .updateAll(); }, ), ), style: TextStyle( fontFamily: 'Readex Pro', fontSize: AppFontsize .normal_text_size, letterSpacing: 0, ), ); })), ), ), ], ), ), ), // Align( // alignment: AlignmentDirectional(-1, 0), // child: Padding( // padding: EdgeInsetsDirectional.fromSTEB( // 0, 32.rpx, 0, 0), // child: Container( // width: double.infinity, // height: bodysize!.maxHeight * 0.06, // decoration: BoxDecoration( // color: Color(0xFFF3F5F6), // borderRadius: BorderRadius.circular(12), // ), // constraints: BoxConstraints( // minHeight: 92.rpx, // ), // child: Padding( // padding: EdgeInsetsDirectional.fromSTEB( // 35.rpx, 0, 35.rpx, 0), // child: Row( // mainAxisSize: MainAxisSize.max, // mainAxisAlignment: // MainAxisAlignment.spaceBetween, // children: [ // Expanded( // child: Container( // child: Align( // alignment: // AlignmentDirectional( // -1, 0), // child: Obx(() => // TextFormField( // onChanged: (value) { // controller.model // .register_confirm_pd = // value; // }, // obscureText: controller // .model.cpdshow!, // decoration: // InputDecoration( // isDense: true, // hintText: // '请输入确认密码'.tr, // hintStyle: TextStyle( // fontFamily: // 'Readex Pro', // color: Color( // 0xFF929699), // fontSize: 26.rpx, // ), // border: // InputBorder.none, // suffixIcon: // IconButton( // icon: Icon( // controller.model // .pdshow! // ? Icons // .visibility_off // : Icons // .visibility, // color: Color( // 0xFF333333), // size: 16, // ), // onPressed: () { // controller.model // .cpdshow = // !controller // .model // .cpdshow!; // controller // .updateAll(); // }, // ), // ), // style: TextStyle( // fontFamily: // 'Readex Pro', // fontSize: 26.rpx, // color: Colors.black, // ), // )), // ), // ), // ), // ], // ), // ), // ), // ), // ), // Align( // alignment: AlignmentDirectional(-1, 0), // child: Padding( // padding: EdgeInsetsDirectional.fromSTEB( // 0, 32.rpx, 0, 0), // child: Container( // width: double.infinity, // height: bodysize!.maxHeight * 0.06, // decoration: BoxDecoration( // color: Color(0xFFF3F5F6), // borderRadius: BorderRadius.circular(12), // ), // constraints: BoxConstraints( // minHeight: 92.rpx, // ), // child: Padding( // padding: EdgeInsetsDirectional.fromSTEB( // 10, 0, 35.rpx, 0), // child: Row( // mainAxisSize: MainAxisSize.max, // mainAxisAlignment: // MainAxisAlignment.spaceBetween, // children: [ // Expanded( // child: Container( // child: Align( // alignment: // AlignmentDirectional( // -1, 0), // child: TextFormField( // onChanged: (value) { // controller.model // .register_code = // value; // }, // decoration: InputDecoration( // isDense: true, // hintText: '请输入验证码', // hintStyle: TextStyle( // fontFamily: // 'Readex Pro', // color: // Color(0xFF929699), // fontSize: 26.rpx, // ), // border: InputBorder.none, // ), // style: TextStyle( // fontFamily: 'Readex Pro', // fontSize: 26.rpx, // color: Colors.black, // ), // ), // ), // ), // ), // Container( // width: 1.rpx, // height: 38.rpx, // color: Color(0xFF929699), // ), // Obx(() { // final countdownController = Get // .find(); // return InkWell( // onTap: () async { // if (countdownController // .countdown.value != // 0) return; // String msg = await controller // .getCode(context); // if (msg.isEmpty) { // countdownController // .startCountdown( // AppConstants // .code_time); // } // }, // child: Text( // countdownController.countdown // .value == // 0 // ? '获取验证码'.tr // : '${countdownController.countdown.value}秒' // .tr, // style: TextStyle( // fontFamily: 'Readex Pro', // color: Color(0xFF333333), // fontSize: 20.rpx, // ), // ), // ); // }), // ], // ), // ), // ), // ), // ), // 其他部分保持不变... Padding( padding: EdgeInsetsDirectional.fromSTEB( 0.rpx, 17, 0.rpx, 0), child: Container( width: bodysize!.maxWidth, height: 46, decoration: BoxDecoration(), child: Stack( children: [ Align( alignment: AlignmentDirectional(0, 0), child: Container( width: MediaQuery.sizeOf(context) .width, height: 46, decoration: BoxDecoration( color: Color(0xFFF3F5F6), borderRadius: BorderRadius.circular(12), ), child: Align( alignment: AlignmentDirectional(0, 0), child: TextFormField( // focusNode: _focusNode4, onChanged: (value) { controller.model .register_code = value; }, obscureText: false, decoration: InputDecoration( labelStyle: TextStyle( fontFamily: 'Readex Pro', fontSize: AppFontsize .normal_text_size, letterSpacing: 0, ), hintText: '请输入验证码'.tr, hintStyle: TextStyle( fontFamily: 'Readex Pro', color: Color(0xFF929699), fontSize: AppFontsize .normal_text_size, letterSpacing: 0, ), enabledBorder: InputBorder.none, focusedBorder: InputBorder.none, errorBorder: InputBorder.none, focusedErrorBorder: InputBorder.none, contentPadding: EdgeInsetsDirectional .fromSTEB( 10, 0, 0, 5), ), style: TextStyle( fontFamily: 'Readex Pro', fontSize: AppFontsize .normal_text_size, letterSpacing: 0, ), ), ), ), ), Align( alignment: AlignmentDirectional(0.2, 0.1), child: Container( width: 1.rpx, height: 38.rpx, decoration: BoxDecoration( color: stringToColor("#929699"), ), ), ), Align( alignment: AlignmentDirectional(0.9, 0), child: Container( width: MediaQuery.sizeOf(context) .width * 0.157, height: MediaQuery.sizeOf(context) .height * 0.014, constraints: BoxConstraints( minWidth: 118, minHeight: 30, ), decoration: BoxDecoration(), child: Align( alignment: AlignmentDirectional(0, 0), child: Obx(() { final CountdownController countdownController = Get.find< CountdownController>(); return InkWell( onTap: () async { if (countdownController .countdown.value != 0) { return; } if (CommonVariables .isNetWorkOn == false) { TopSlideNotification.show( context, text: "网络未连接,请开启设备网络后重试" .tr, textColor: themeController .currentColor .sc9); return; } String msg = await controller .getCode(context); if (msg.isNotEmpty) { return; } countdownController .countdown .value == 0 ? countdownController .startCountdown( AppConstants .code_time) : null; }, child: Text( countdownController .countdown .value == 0 ? '获取验证码'.tr : '${countdownController.countdown.value}' + '秒'.tr, style: TextStyle( fontFamily: 'Readex Pro', color: Color(0xFF333333), fontSize: AppFontsize .normal_text_size, letterSpacing: 0, ), ), ); }), ), ), ), ], ), ), ), Padding( padding: EdgeInsetsDirectional.fromSTEB( 0, 19, 0, 0), child: Container( width: bodysize!.maxWidth, height: bodysize!.maxHeight * 0.022, constraints: BoxConstraints( minWidth: 466, minHeight: 30, ), decoration: BoxDecoration(), child: Container( width: bodysize!.maxWidth, height: bodysize!.maxHeight * 0.022, constraints: BoxConstraints( minWidth: 466, minHeight: 30, ), decoration: BoxDecoration(), child: Row( mainAxisSize: MainAxisSize.max, mainAxisAlignment: MainAxisAlignment.start, children: [ Align( alignment: AlignmentDirectional(0, 0), child: Padding( padding: EdgeInsetsDirectional .fromSTEB(0, 3, 0, 0), child: Container( width: 36, height: 36, decoration: BoxDecoration(), child: Align( alignment: AlignmentDirectional( 0, 0), child: Theme( data: ThemeData( checkboxTheme: CheckboxThemeData( visualDensity: VisualDensity .compact, materialTapTargetSize: MaterialTapTargetSize .shrinkWrap, shape: RoundedRectangleBorder( borderRadius: BorderRadius .circular( 64), ), ), unselectedWidgetColor: Color(0xFFD3D3D3), ), child: Obx( () => Checkbox( value: controller .model .register_agree ?? false, onChanged: (newValue) async { controller.model .register_agree = newValue; controller .updateAll(); }, side: BorderSide( width: 1.5, color: Colors.white, ), activeColor: const Color( 0xFF84F5FF), checkColor: Color(0xFF003058), visualDensity: VisualDensity( horizontal: -4.0, vertical: -4.0), ), )), ), ), ), ), Flexible( child: Padding( padding: EdgeInsetsDirectional .fromSTEB(0, 0, 0, 0), child: Container( width: MediaQuery.sizeOf(context) .width * 0.622, height: MediaQuery.sizeOf(context) .height * 1, constraints: BoxConstraints( minWidth: 466, minHeight: 30, ), decoration: BoxDecoration(), child: Container( width: 100, height: 100, decoration: BoxDecoration(), child: Row( mainAxisSize: MainAxisSize.max, children: [ Align( alignment: AlignmentDirectional( 0, 0), child: Text( '我已阅读并同意'.tr, style: TextStyle( fontFamily: 'Readex Pro', color: Colors.white, fontSize: 12, letterSpacing: 0, ), ), ), Align( alignment: AlignmentDirectional( 0, 0), child: InkWell( onTap: () { Get.toNamed( "/userPolicyPageNew", arguments: getPrivacy( 2)); }, child: Text( '《用户协议》'.tr, style: TextStyle( fontFamily: 'Readex Pro', color: stringToColor( "FF9F66"), fontSize: 12, letterSpacing: 0, ), ), ), ), Align( alignment: AlignmentDirectional( 0, 0), child: Text( '与'.tr, style: TextStyle( fontFamily: 'Readex Pro', color: Colors.white, fontSize: 12, letterSpacing: 0, ), ), ), Align( alignment: AlignmentDirectional( 0, 0), child: InkWell( onTap: () { Get.toNamed( "/privacyPolicyPageNew", arguments: getPrivacy( 1)); }, child: Text( '《隐私协议》'.tr, style: TextStyle( fontFamily: 'Readex Pro', color: stringToColor( "FF9F66"), fontSize: 12, letterSpacing: 0, ), ), ), ), ], ), ), ), ), ), ], ), ), ), ), Padding( padding: EdgeInsetsDirectional.fromSTEB( 0, 29, 0, 0), child: Container( width: bodysize!.maxWidth, height: bodysize!.maxHeight * 0.056, decoration: BoxDecoration(), child: CustomCard( borderRadius: 16.rpx, gradientDirection: GradientDirection.vertical, onTap: () async { if (CommonVariables.isNetWorkOn == false) { TopSlideNotification.show(context, text: "网络未连接,请开启设备网络后重试".tr, textColor: themeController .currentColor.sc9); return; } String msg = await controller .registerUser(context); if (msg == null || msg.isEmpty) { Get.toNamed("/loginPage"); } }, colors: const [ Color(0xFFFCFCFC), Color(0xFFF8FAF9), Color(0XFFECF6F3), Color(0XFFD9F0E9), Color(0xFFCEECE3) ], child: Container( width: double.infinity, height: 90.rpx, alignment: Alignment.center, decoration: BoxDecoration( borderRadius: BorderRadius.circular(16.rpx), ), child: Text( "提交".tr, style: TextStyle( fontFamily: 'Readex Pro', color: stringToColor("#011D33"), letterSpacing: 0, fontSize: 30.rpx, ), ), ), )), ), ], ), ), ), ), ), ], ), ), )), )); }); } }