mirror of
https://github.com/SyncrowIOT/syncrow-app.git
synced 2026-10-23 20:37:55 +00:00
This commit adds the HomeCubit class along with its corresponding HomeState class. It also includes necessary imports and updates references to the previously used SpacesCubit to the new HomeCubit in various files. handled the multible onCreate -- HomeCubit
110 lines
3.2 KiB
Dart
110 lines
3.2 KiB
Dart
import 'package:dio/dio.dart';
|
|
import 'package:flutter/cupertino.dart';
|
|
import 'package:flutter/material.dart';
|
|
import 'package:flutter_bloc/flutter_bloc.dart';
|
|
import 'package:flutter_secure_storage/flutter_secure_storage.dart';
|
|
import 'package:syncrow_app/features/app_layout/bloc/home_cubit.dart';
|
|
|
|
import 'package:syncrow_app/features/auth/model/login_with_email_model.dart';
|
|
import 'package:syncrow_app/features/auth/model/token.dart';
|
|
import 'package:syncrow_app/features/auth/model/user_model.dart';
|
|
import 'package:syncrow_app/services/api/authentication_api.dart';
|
|
import 'package:syncrow_app/services/api/network_exception.dart';
|
|
|
|
part 'auth_state.dart';
|
|
|
|
class AuthCubit extends Cubit<AuthState> {
|
|
AuthCubit() : super(AuthInitial()) {
|
|
getTokenAndValidate();
|
|
}
|
|
|
|
static AuthCubit get(context) => BlocProvider.of(context);
|
|
|
|
TextEditingController emailController = TextEditingController();
|
|
TextEditingController passwordController = TextEditingController();
|
|
bool isPasswordVisible = false;
|
|
|
|
static GlobalKey<FormState> formKey = GlobalKey<FormState>();
|
|
|
|
void changePasswordVisibility() {
|
|
isPasswordVisible = !isPasswordVisible;
|
|
emit(AuthPasswordVisibilityChanged());
|
|
}
|
|
|
|
bool agreeToTerms = false;
|
|
|
|
void changeAgreeToTerms() {
|
|
agreeToTerms = !agreeToTerms;
|
|
emit(AuthAgreeToTermsChanged());
|
|
}
|
|
|
|
static UserModel? user;
|
|
|
|
static Token token = Token.emptyConstructor();
|
|
|
|
login() async {
|
|
emit(AuthLoading());
|
|
try {
|
|
token = await AuthenticationAPI.loginWithEmail(
|
|
model: LoginWithEmailModel(
|
|
email: emailController.text.toLowerCase(),
|
|
password: passwordController.text,
|
|
),
|
|
);
|
|
|
|
if (token.accessTokenIsNotEmpty) {
|
|
FlutterSecureStorage storage = const FlutterSecureStorage();
|
|
await storage.write(
|
|
key: Token.loginAccessTokenKey, value: token.accessToken);
|
|
const FlutterSecureStorage().write(
|
|
key: UserModel.userUuidKey,
|
|
value: Token.decodeToken(token.accessToken)['uuid'].toString());
|
|
user = UserModel.fromToken(token);
|
|
emit(AuthSuccess());
|
|
} else {
|
|
emit(AuthError('Something went wrong'));
|
|
}
|
|
} on DioException catch (e) {
|
|
emit(AuthError(ServerFailure.fromDioError(e).toString()));
|
|
}
|
|
}
|
|
|
|
logout() async {
|
|
emit(AuthLoading());
|
|
try {
|
|
FlutterSecureStorage storage = const FlutterSecureStorage();
|
|
await storage.delete(key: Token.loginAccessTokenKey);
|
|
HomeCubit.clear();
|
|
emit(AuthLoggedOut());
|
|
} on DioException catch (e) {
|
|
emit(AuthError(ServerFailure.fromDioError(e).errMessage));
|
|
}
|
|
}
|
|
|
|
getTokenAndValidate() async {
|
|
emit(AuthTokenLoading());
|
|
final value =
|
|
await const FlutterSecureStorage().read(key: Token.loginAccessTokenKey);
|
|
|
|
if (value == null) {
|
|
emit(AuthTokenError("Token not found"));
|
|
return;
|
|
}
|
|
|
|
final tokenData = Token.decodeToken(value);
|
|
|
|
if (tokenData.containsKey('exp')) {
|
|
final exp = tokenData['exp'] ?? 0;
|
|
final currentTime = DateTime.now().millisecondsSinceEpoch ~/ 1000;
|
|
|
|
if (currentTime < exp) {
|
|
emit(AuthTokenSuccess());
|
|
} else {
|
|
emit(AuthTokenError("Token expired"));
|
|
}
|
|
} else {
|
|
emit(AuthTokenError("Something went wrong"));
|
|
}
|
|
}
|
|
}
|