import 'package:flutter/cupertino.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; part 'login_event.dart'; part 'login_state.dart'; enum LoginType { ///密码登陆 pwd, ///验证码登陆 sms, } class LoginBloc extends Bloc { bool _canLogin = false; ///是否可以发送验证码 bool _canSendSms = false; ///是否阅读协议 bool _agreement = false; ///登陆方式 LoginType _loginType = LoginType.sms; final TextEditingController phoneNumController = TextEditingController(); final TextEditingController checkNumController = TextEditingController(); bool get canLogin => _canLogin; bool get agreement => _agreement; LoginType get loginType => _loginType; bool get canSendSms => _canSendSms; LoginBloc() : super(LoginInitial()) { on(_requestLoginApi); on(_changeLoginType); on(_changePhoneNumber); on(_agreementTypeChange); on(_forgetPassword); on(_checkFiledChange); } ///请求登陆 void _requestLoginApi(RequestLoginEvent event, Emitter emitter) async { } ///切换登陆方式 void _changeLoginType(ChangeLoginTypeEvent event, Emitter emitter) async { if (_loginType == LoginType.sms) { _loginType = LoginType.pwd; } else { _loginType = LoginType.sms; } checkNumController.clear(); if (_loginStateChange()) { emitter(LoginEventChangeState()); } emitter(LoginTypeChangeState()); } ///手机号输入 void _changePhoneNumber(PhoneNumChangeEvent event, Emitter emitter) async { if(phoneNumController.text.isNotEmpty) { if (!_canSendSms) { _canSendSms = true; emitter(SmsSendTypeChangeState()); } if (_loginStateChange()) { emitter(LoginEventChangeState()); } } else { if (_canSendSms) { _canSendSms = false; emitter(SmsSendTypeChangeState()); } if (_loginStateChange()) { emitter(LoginEventChangeState()); } } } ///验证码/密码输入变化 void _checkFiledChange(CheckFieldChangeEvent event,Emitter emitter) async { if (_loginStateChange()) { emitter(LoginEventChangeState()); } } ///是否阅读协议 void _agreementTypeChange(AgreementChangeEvent event, Emitter emitter) async { _agreement = !_agreement; emitter(AgreementTypeChangeState()); if (_loginStateChange()) { emitter(LoginEventChangeState()); } } ///忘记密码 void _forgetPassword(ForgetPasswordEvent event, Emitter emitter) async { } bool _loginStateChange() { if (_agreement) { if (phoneNumController.text.isNotEmpty && checkNumController.text.isNotEmpty) { if (!_canLogin) { _canLogin = true; return true; } } else { if (_canLogin) { _canLogin = false; return true; } } } else { if (_canLogin) { _canLogin = false; return true; } } return false; } }