import 'dart:js'; import 'package:flutter/cupertino.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_easyloading/flutter_easyloading.dart'; import '../../../../common/request/api_response/api_response_entity.dart'; import '../../../../common/request/apis.dart'; import '../../../../common/request/request.dart'; import '../../../../common/request/request_client.dart'; import '../../../../models/user_entity.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'; request(() async { var params = {'phoneNum': phoneNumber, 'type': type, checkKey: checkNumber}; await requestClient.post( Apis.login, data: params, onResponse: (ApiResponse response) { print('response=$response'); // todo 持久化用户对象 // todo 写入全局对象 //emitter.call(LoginResultChangeState()); }, onError: (e) { EasyLoading.showToast('登陆失败:${e.message}'); return true; }, ); }); } ///请求验证码 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; } }