47 lines
1.7 KiB
Dart
47 lines
1.7 KiB
Dart
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()));
|
||
}
|
||
}
|
||
}
|