user_bloc.dart 2.09 KB
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<UserEvent, UserState> {
  final TextEditingController modifyTextController = TextEditingController();

  UserBloc() : super(UserInitial()) {
    on<UserLogout>(_logout);
    on<UserUpdate>(_updateUser);
  }

  void _logout(UserLogout event, Emitter<UserState> emitter) async {
    await UserDao.logout();
  }

  void _updateUser(UserUpdate event, Emitter<UserState> 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 校验格式
        int age = modifyTextController.text as int;
        try {
          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: user.gender);
          emitter(UserInfoUpdated());
        } catch (e) {
          Log.e('_updateUser age, e: $e');
        }
        break;
    }
  }
}