Files
feature-next-arch/lib/features/auth/presentation/bloc/login_cubit.dart
2026-06-05 19:06:21 +08:00

46 lines
1.6 KiB
Dart
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:maibu_satabot_v2/core/app/app_user_cubit.dart';
import 'package:maibu_satabot_v2/core/di/injection.dart';
import 'package:maibu_satabot_v2/features/devices/presentation/bloc/devices_cubit.dart';
import '../../domain/usecases/login_usecase.dart';
import 'auth_cubit.dart';
import 'login_state.dart';
class LoginCubit extends Cubit<LoginState> {
final LoginUseCase loginUseCase;
final AuthCubit authCubit;
LoginCubit(this.loginUseCase, this.authCubit) : super(LoginInitial());
/// Login
/// @param username 用户名
/// @param password 密码
/// @param sourceType 登录来源: 1:web; 2:mobile; 3:mini_programs; 4:pc
Future<void> login(String username, String password, sourceType) async {
emit(LoginLoading());
try {
final result = await loginUseCase.call(
LoginParams(username, password, sourceType),
);
// final user = sl<AppUserCubit>().state.user;
// final devicesCubit = sl<DevicesCubit>();
// if (user != null) {
// devicesCubit.fetchAllDevices(user.username);
// }
result.fold((failure) => emit(LoginFailure(failure.message)), (user) {
// 先更新全局用户状态(确保首页能获取到 token)
authCubit.appCubit.setAuth(user);
// 发出登录成功状态(触发页面跳转)
emit(LoginSuccess(user));
// 后台异步执行 TCP 连接等初始化操作(不阻塞登录流程)
authCubit.loginSuccess(user).catchError((e) {
print('TCP 初始化失败: $e');
});
});
} catch (e) {
emit(LoginFailure(e.toString()));
}
}
}