Files
flutterApp/lib/features/auth/presentation/bloc/login_cubit.dart
2026-08-07 08:49:29 +08:00

47 lines
1.7 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) async {
// 先更新全局用户状态(确保首页能获取到 token)
authCubit.appCubit.setAuth(user);
// 🔥 先等待 TCP 连接和认证完成,确保 AuthCubit 变为 AuthAuthenticated
// 再触发页面导航,避免 GoRouter 拦截踢回登录页
await authCubit.loginSuccess(user).catchError((e) {
print('TCP 初始化失败: $e');
});
// 发出登录成功状态(触发页面跳转)
emit(LoginSuccess(user));
});
} catch (e) {
emit(LoginFailure(e.toString()));
}
}
}