import 'package:flutter/widgets.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:wow_english/common/core/user_util.dart'; import 'package:wow_english/common/request/dao/user_dao.dart'; import 'package:wow_english/models/user_entity.dart'; import 'package:wow_english/pages/user/modify/modify_user_information_page.dart'; import 'package:wow_english/utils/log_util.dart'; part 'user_event.dart'; part 'user_state.dart'; class UserBloc extends Bloc { final TextEditingController modifyTextController = TextEditingController(); int tempGender = 0; UserBloc() : super(UserInitial()) { on(_logout); on(_deleteAccount); on(_updateUser); on(_updateUIUser); } void _logout(UserLogout event, Emitter emitter) async { await UserDao.logout(); } void _deleteAccount(UserDelete event, Emitter emitter) async { await UserDao.deleteAccount(); } void _updateUIUser(UserUIUpdate event, Emitter emitter) async { emitter(UserInfoUpdated()); } void _updateUser(UserUpdate event, Emitter emitter) async { Log.d('_updateUser, event: ${event.type}, emitter.isDone: ${emitter.isDone}, text=${modifyTextController.text}'); UserEntity user = UserUtil.getUser()!; switch (event.type) { case ModifyUserInformationType.avatar: break; case ModifyUserInformationType.name: String name = modifyTextController.text; try { await UserDao.updateUserInfoField(name: name); // 修改成功,更新本地缓存及UI user.name = name; emitter(UserInfoUpdated()); } catch (e) { Log.e('_updateUser name, e: $e'); } break; case ModifyUserInformationType.age: // todo 校验格式 try { int age; try { age = modifyTextController.text as int; } catch (e) { Log.w(e.toString()); throw '年龄格式错误'; } await UserDao.updateUserInfoField(age: age); // 修改成功,更新本地缓存及UI user.age = age; emitter(UserInfoUpdated()); } catch (e) { Log.e('_updateUser age, e: $e'); } break; case ModifyUserInformationType.gender: try { await UserDao.updateUserInfoField(gender: tempGender); user.gender = tempGender; emitter(UserInfoUpdated()); } catch (e) { Log.e('_updateUser gender, e: $e'); } break; } } }