Files
flutterApp/lib/features/auth/presentation/bloc/login_cubit.dart

47 lines
1.7 KiB
Dart
Raw Normal View History

2026-01-11 19:42:22 +08:00
import 'package:flutter_bloc/flutter_bloc.dart';
2026-03-05 10:24:38 +08:00
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';
2026-01-11 19:42:22 +08:00
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 {
2026-06-05 19:06:21 +08:00
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);
// }
2026-08-07 08:49:29 +08:00
result.fold((failure) => emit(LoginFailure(failure.message)), (user) async {
2026-06-05 19:06:21 +08:00
// 先更新全局用户状态(确保首页能获取到 token)
authCubit.appCubit.setAuth(user);
2026-08-07 08:49:29 +08:00
// 🔥 先等待 TCP 连接和认证完成,确保 AuthCubit 变为 AuthAuthenticated
// 再触发页面导航,避免 GoRouter 拦截踢回登录页
await authCubit.loginSuccess(user).catchError((e) {
2026-06-05 19:06:21 +08:00
print('TCP 初始化失败: $e');
});
2026-08-07 08:49:29 +08:00
// 发出登录成功状态(触发页面跳转)
emit(LoginSuccess(user));
2026-01-18 20:21:14 +08:00
});
2026-01-11 19:42:22 +08:00
} catch (e) {
emit(LoginFailure(e.toString()));
}
}
}