import 'package:flutter/cupertino.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_easyloading/flutter_easyloading.dart'; import 'package:wow_english/common/request/config.dart'; import 'package:wow_english/common/request/dao/user_dao.dart'; import 'package:wow_english/models/user_entity.dart'; import 'package:wow_english/utils/loading.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; bool _isSmsLoginType = true; final TextEditingController phoneNumController = TextEditingController(); final TextEditingController checkNumController = TextEditingController(); bool get canLogin => _canLogin; bool get agreement => _agreement; //LoginType get loginType => _loginType; bool get isSmsLoginType => _isSmsLoginType; bool get canSendSms => _canSendSms; LoginBloc() : super(LoginInitial()) { on(_requestLoginApi); on(_changeLoginType); on(_changePhoneNumber); on(_agreementTypeChange); on(_checkFiledChange); on(_requestSmsCodeApi); } ///请求登陆 void _requestLoginApi(RequestLoginEvent event, Emitter emitter) async { var phoneNumber = phoneNumController.text; if (phoneNumber.isEmpty) { EasyLoading.showToast('号码不能为空'); return; } var checkNumber = checkNumController.text; if (checkNumber.isEmpty) { var text = _isSmsLoginType ? '密码' : '验证码'; EasyLoading.showToast('$text不能为空'); return; } var checkKey = _isSmsLoginType ? 'smsCode' : 'password'; var type = _isSmsLoginType ? 'sms_code' : 'pwd'; try { await loading(() async { var user = await UserDao.login(phoneNumber, type, checkKey, checkNumber); print('login已执行'); print('user=$user'); RequestConfig.token = user!.token; emitter.call(LoginResultChangeState(user)); }); } catch (e) { print(e); EasyLoading.showToast('登陆失败'); } } ///请求验证码 void _requestSmsCodeApi(RequestSmsCodeEvent event, Emitter emitter) async {} ///切换登陆方式 void _changeLoginType(ChangeLoginTypeEvent event, Emitter emitter) async { if (_isSmsLoginType) { _isSmsLoginType = false; } else { _isSmsLoginType = true; } 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()); } } ///登陆状态判断 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; } }