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),
|
|
|
|
|
|
);
|
2026-05-29 14:13:34 +08:00
|
|
|
|
// 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()));
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|