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=${event.content}'); UserEntity user = UserUtil.getUser()!; switch (event.type) { case ModifyUserInformationType.avatar: String avatarUrl = event.content; try { await UserDao.updateUserInfoField(avatarUrl: avatarUrl); // 修改成功,更新本地缓存及UI user.avatarUrl = avatarUrl; emitter(UserInfoUpdated()); } catch (e) { Log.e('_updateUser avatarUrl, e: $e'); } break; case ModifyUserInformationType.name: String name = event.content; 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 = int.parse(event.content); } 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 { var gender = int.parse(event.content); await UserDao.updateUserInfoField(gender: gender); user.gender = gender; emitter(UserInfoUpdated()); } catch (e) { Log.e('_updateUser gender, e: $e'); } break; } } }