import 'package:flutter/cupertino.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:wow_english/common/request/dao/user_dao.dart'; import 'package:wow_english/common/request/exception.dart'; import 'package:wow_english/utils/loading.dart'; import '../set_pwd_page.dart'; part 'set_pwd_event.dart'; part 'set_pwd_state.dart'; class SetPwdBloc extends Bloc { final String? phoneNumber; final String? smsCode; late final SetPwdPageType pageType; final TextEditingController passWordFirstController = TextEditingController(); final TextEditingController passWordSecondController = TextEditingController(); ///密码是否符合规则(第一个输入框) bool _passwordEnsure = false; ///密码是否超过16位(第一个输入框) bool _passwordLarger = false; ///是否显示Icon(第一个输入框) bool _showPwdIcon = false; ///是否显示Icon(第二个输入框) bool _showCheckPwdIcon = false; ///密码是否一致 bool _passwordCheck = true; bool get passwordEnsure => _passwordEnsure; bool get passwordCheck => _passwordCheck; bool get passwordLarger => _passwordLarger; bool get showPwdIcon => _showPwdIcon; bool get showCheckPwdIcon => _showCheckPwdIcon; bool get ensure => _passwordCheck && _passwordEnsure; String get passwordText => passWordFirstController.text; SetPwdBloc(this.phoneNumber, this.smsCode, this.pageType) : super(SetPwdInitial()) { on(_pwdEnsureTextChange); on(_pwdCheckTextChange); on(_setPassword); } void _pwdCheckTextChange(PwdCheckEvent event, Emitter emitter) async { if (passWordSecondController.text.isEmpty) { _showCheckPwdIcon = false; emitter(PasswordCheckIconShowState()); } else { if (!_showCheckPwdIcon) { _showCheckPwdIcon = true; emitter(PasswordCheckIconShowState()); } } if (passWordFirstController.text == passWordSecondController.text) { _passwordCheck = true; emitter(SetCheckPwdState()); } else { _passwordCheck = false; emitter(SetCheckPwdState()); } } void _pwdEnsureTextChange(PwdEnsureEvent event, Emitter emitter) async { if (passWordFirstController.text.isEmpty) { if (_showPwdIcon) { _showPwdIcon = false; emitter(PasswordIconShowState()); } } else { if (!_showPwdIcon) { _showPwdIcon = true; emitter(PasswordIconShowState()); } if (passWordSecondController.text.isNotEmpty) { if (passWordFirstController.text == passWordSecondController.text) { _passwordCheck = true; } else { _passwordCheck = false; } emitter(SetCheckPwdState()); } if (passWordFirstController.text.length >= 8 && passWordFirstController.text.length <= 16) { ///符合密码要求 if (!_passwordEnsure) { _passwordEnsure = true; emitter(SetEnsurePwdState()); } if (passWordSecondController.text.isNotEmpty) { if (passWordFirstController.text == passWordSecondController.text) {} } if (_passwordLarger) { _passwordLarger = false; emitter(PasswordLargeState()); } } else { if (passWordFirstController.text.length > 16) { ///超过十六位 if (!_passwordLarger) { _passwordLarger = true; emitter(PasswordLargeState()); } } else { if (_passwordLarger) { _passwordLarger = false; emitter(PasswordLargeState()); } } ///密码不符合要求 if (_passwordEnsure) { _passwordEnsure = false; emitter(SetEnsurePwdState()); } } } } /// 设置密码,调接口 void _setPassword(SetPasswordEvent event, Emitter emitter) async { try { await loading(() async { switch (pageType) { case SetPwdPageType.initPwd: await UserDao.initPassword(passwordText); break; case SetPwdPageType.changePwd: // 现在走同一个流程和接口 /*await UserDao.changePassword(passwordText); break;*/ case SetPwdPageType.resetPwd: if (phoneNumber == null || phoneNumber!.isEmpty) { throw ApiException(ApiException.customErrorCode, '手机号为空'); } if (smsCode == null || smsCode!.isEmpty) { throw ApiException(ApiException.customErrorCode, '验证码为空'); } await UserDao.resetPassword(phoneNumber!, passwordText, smsCode!); break; } }); emitter(PasswordSetSuccessState()); } catch (e) { String msg; if (e is ApiException) { msg = e.message ?? '未知错误'; } else { msg = e.toString(); } emitter(PasswordSetFailedState(msg)); } } }