import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:wow_english/common/extension/string_extension.dart'; import 'package:wow_english/login/blocs/login_bloc.dart'; class LoginPage extends StatelessWidget { const LoginPage({super.key}); @override Widget build(BuildContext context) { return BlocProvider( create: (context) => LoginBloc(), child: _buildLoginViewWidget(), ); } Widget _buildLoginViewWidget() => BlocBuilder ( builder: (context, state) { final bloc = BlocProvider.of(context); return Scaffold( body: SafeArea( child: ListView( children: [ Container( padding: EdgeInsets.only(top: 25.h), child: Stack( children: [ Positioned( right: 29.w, child: GestureDetector( onTap: () => bloc.add(ChangeLoginTypeEvent()), child: Container( decoration: BoxDecoration( image: DecorationImage( image: AssetImage( 'login_logo'.assetPng ), fit: BoxFit.fill ), ), padding: const EdgeInsets.symmetric(horizontal: 18.0), child: Text( bloc.loginType == LoginType.sms?'密码登陆':'验证码密码' ), ), ) ), Center( child: Column( children: [ Image.asset( 'wow_logo'.assetPng, height: 81.h, width: 139.w,), Offstage( offstage: bloc.loginType == LoginType.pwd, child: _buildSmsViewWidget(), ), Offstage( offstage: bloc.loginType == LoginType.sms, child: _buildPwdViewWidget(), ), 20.verticalSpace, Row( mainAxisAlignment: MainAxisAlignment.center, children: [ GestureDetector( onTap: () => bloc.add(AgreementChangeEvent()), child: Icon( bloc.agreement ? Icons.check_circle_outlined:Icons.circle_outlined, color:bloc.agreement ? Colors.green:Colors.black), ), 6.horizontalSpace, const Text('我已阅读并同意《用户隐私协议》,《儿童隐私策略》') ], ), 14.5.verticalSpace, GestureDetector( onTap: () => bloc.add(ChangeLoginTypeEvent()), child: Container( decoration: BoxDecoration( image: DecorationImage( image: AssetImage( bloc.canLogin?'login_enter'.assetPng:'login_enter_dis'.assetPng ), fit: BoxFit.fill ), ), padding: const EdgeInsets.symmetric( horizontal: 36.0, vertical: 20.0 ), child: const Text( '登录' ), ), ) ], ), ) ], ), ) ], ), ), ); }, ); Widget _buildSmsViewWidget()=> BlocBuilder( builder: (context,state){ final bloc = BlocProvider.of(context); return Column( children: [ 15.verticalSpace, Container( padding: EdgeInsets.symmetric(horizontal: 135.w), width: double.infinity, height: 55, alignment: Alignment.center, decoration: BoxDecoration( image: DecorationImage( image: AssetImage( 'Input_layer_up'.assetPng ) ) ), child: TextField( controller: bloc.phoneNumController, textAlign: TextAlign.center, textInputAction: TextInputAction.done, keyboardType: TextInputType.phone, decoration: const InputDecoration( hintText: '请输入手机号', border: InputBorder.none, ), onChanged: (String value) { bloc.add(PhoneNumChangeEvent()); }, ) ), 6.5.verticalSpace, const Text('未注册用户登录默认注册'), 4.5.verticalSpace, Container( padding: EdgeInsets.symmetric(horizontal: 205.w), child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Container( width: 257, height: 50, alignment: Alignment.center, decoration: BoxDecoration( image: DecorationImage( image: AssetImage( 'Input_layer_down'.assetPng ) ) ), child: TextField( controller: bloc.checkNumController, textAlign: TextAlign.center, textInputAction: TextInputAction.done, keyboardType: TextInputType.number, decoration: const InputDecoration( hintText: '请输入验证码', border: InputBorder.none, ), onChanged: (String value) { bloc.add(CheckFieldChangeEvent()); }, ) ), GestureDetector( onTap: () { if (bloc.canSendSms) { bloc.add(ChangeLoginTypeEvent()); } }, child: Container( decoration: BoxDecoration( image: DecorationImage( image: AssetImage( bloc.canSendSms?'securitycode'.assetPng:'securitycode_dis'.assetPng ), fit: BoxFit.fill ), ), padding: const EdgeInsets.symmetric(horizontal:12.0,vertical: 15.0), child: const Text( '获取验证码' ), ), ) ], ), ) ], ); }); Widget _buildPwdViewWidget()=> BlocBuilder( builder: (context,state){ final bloc = BlocProvider.of(context); return Container( padding: EdgeInsets.symmetric(horizontal: 135.w), child: Column( children: [ 15.verticalSpace, Row( mainAxisAlignment: MainAxisAlignment.center, children: [ Image.asset( 'phone'.assetPng, height: 45, width: 35, ), 10.5.horizontalSpace, Container( width: 397.5, height: 55, alignment: Alignment.center, decoration: BoxDecoration( image: DecorationImage( image: AssetImage( 'Input_layer_up'.assetPng ), fit: BoxFit.fill, ) ), child: TextField( controller: bloc.phoneNumController, textAlign: TextAlign.center, textInputAction: TextInputAction.done, decoration: const InputDecoration( hintText: '请输入手机号', border: InputBorder.none, ), keyboardType: TextInputType.phone, onChanged: (String value) { bloc.add(PhoneNumChangeEvent()); }, ) ), 5.horizontalSpace, const SizedBox( width: 100, height: 55.0, ) ], ), 12.verticalSpace, Row( mainAxisAlignment: MainAxisAlignment.center, children: [ Image.asset( 'lock'.assetPng, height: 34, width: 31, ), 10.5.horizontalSpace, Container( width: 397.5, height: 55, alignment: Alignment.center, decoration: BoxDecoration( image: DecorationImage( image: AssetImage( 'Input_layer_down'.assetPng ), fit: BoxFit.fill, ) ), child: TextField( controller: bloc.checkNumController, textAlign: TextAlign.center, textInputAction: TextInputAction.done, decoration: const InputDecoration( hintText: '请输入密码', border: InputBorder.none, ), onChanged: (String value) { bloc.add(CheckFieldChangeEvent()); }, ) ), 5.horizontalSpace, GestureDetector( onTap: () => bloc.add(ForgetPasswordEvent()), child: Container( width: 100, height: 55.0, alignment: Alignment.centerLeft, child: const Text( '忘记密码 ?' ), ), ) ], ) ], ), ); }); }