diff --git a/lib/features/auth/bloc/auth_cubit.dart b/lib/features/auth/bloc/auth_cubit.dart index 49a924d..408c80d 100644 --- a/lib/features/auth/bloc/auth_cubit.dart +++ b/lib/features/auth/bloc/auth_cubit.dart @@ -13,7 +13,9 @@ import 'package:syncrow_app/services/api/network_exception.dart'; part 'auth_state.dart'; class AuthCubit extends Cubit { - AuthCubit() : super(AuthInitial()); + AuthCubit() : super(AuthInitial()) { + getTokenAndValidate(); + } static AuthCubit get(context) => BlocProvider.of(context); @@ -79,4 +81,30 @@ class AuthCubit extends Cubit { 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")); + } + } } diff --git a/lib/features/auth/bloc/auth_state.dart b/lib/features/auth/bloc/auth_state.dart index 8a370b0..e84791f 100644 --- a/lib/features/auth/bloc/auth_state.dart +++ b/lib/features/auth/bloc/auth_state.dart @@ -21,3 +21,13 @@ class AuthLoggedOut extends AuthState {} class AuthPasswordVisibilityChanged extends AuthState {} class AuthAgreeToTermsChanged extends AuthState {} + +class AuthTokenLoading extends AuthState {} + +class AuthTokenSuccess extends AuthState {} + +class AuthTokenError extends AuthState { + final String message; + + AuthTokenError(this.message); +} diff --git a/lib/features/devices/bloc/devices_cubit.dart b/lib/features/devices/bloc/devices_cubit.dart index 4a40097..8105505 100644 --- a/lib/features/devices/bloc/devices_cubit.dart +++ b/lib/features/devices/bloc/devices_cubit.dart @@ -1,3 +1,5 @@ +// ignore_for_file: constant_identifier_names + import 'package:dio/dio.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; diff --git a/lib/features/devices/view/widgets/ACs/ac_mode_control_unit.dart b/lib/features/devices/view/widgets/ACs/ac_mode_control_unit.dart index c100ba8..e1f9416 100644 --- a/lib/features/devices/view/widgets/ACs/ac_mode_control_unit.dart +++ b/lib/features/devices/view/widgets/ACs/ac_mode_control_unit.dart @@ -43,7 +43,7 @@ class _ACModeControlUnitState extends State { // widget.model.fanSpeed == 3 ? 0 : widget.model.fanSpeed + 1; }); }, - child: DefaultContainer( + child: const DefaultContainer( height: 55, child: Center( // child: SvgPicture.asset(fanSpeeds[widget.model.fanSpeed]), diff --git a/lib/features/splash/view/splash_view.dart b/lib/features/splash/view/splash_view.dart index 0c65933..05d11d0 100644 --- a/lib/features/splash/view/splash_view.dart +++ b/lib/features/splash/view/splash_view.dart @@ -1,7 +1,7 @@ import 'package:flutter/material.dart'; -import 'package:flutter_secure_storage/flutter_secure_storage.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_svg/flutter_svg.dart'; -import 'package:syncrow_app/features/auth/model/token.dart'; +import 'package:syncrow_app/features/auth/bloc/auth_cubit.dart'; import 'package:syncrow_app/generated/assets.dart'; import 'package:syncrow_app/navigation/routing_constants.dart'; @@ -10,20 +10,18 @@ class SplashView extends StatelessWidget { @override Widget build(BuildContext context) { - return FutureBuilder( - future: getTokenAndValidate(context), - builder: (context, snapshot) { - if (snapshot.hasData) { - if (snapshot.data ?? false) { - Future.delayed(const Duration(seconds: 1), () { - Navigator.pushReplacementNamed(context, Routes.homeRoute); - }); - } else { - Future.delayed(const Duration(seconds: 1), () { - Navigator.pushReplacementNamed(context, Routes.authLogin); - }); - } + return BlocBuilder( + builder: (context, state) { + if (state is AuthTokenSuccess) { + Future.delayed(const Duration(seconds: 1), () { + Navigator.pushReplacementNamed(context, Routes.homeRoute); + }); + } else { + Future.delayed(const Duration(seconds: 1), () { + Navigator.pushReplacementNamed(context, Routes.authLogin); + }); } + return Scaffold( body: Stack( alignment: Alignment.center, @@ -61,26 +59,4 @@ class SplashView extends StatelessWidget { }, ); } - - Future getTokenAndValidate(BuildContext context) async { - return await const FlutterSecureStorage() - .read(key: Token.loginAccessTokenKey) - .then((value) { - if (value == null) { - return false; - } - print("Decoding token Started"); - var tokenData = Token.decodeToken(value ?? ""); - print("checking token data"); - - if (tokenData.containsKey('exp')) { - var exp = tokenData['exp'] ?? 0; - var currentTime = DateTime.now().millisecondsSinceEpoch ~/ 1000; - print('time: $currentTime exp: $exp'); - return currentTime < exp; - } else { - return false; - } - }); - } } diff --git a/lib/services/api/devices_api.dart b/lib/services/api/devices_api.dart index a89a361..cf885e8 100644 --- a/lib/services/api/devices_api.dart +++ b/lib/services/api/devices_api.dart @@ -23,13 +23,11 @@ class DevicesAPI { Map params = { "homeId": spaceId, "pageSize": 100, - "page": 1 + "pageNo": 1 }; final response = await _httpService.get( - path: - "https://syncrow.azurewebsites.net/group?homeId=$spaceId&pageSize=100&pageNo=1", - // path: ApiEndpoints.groups, - // queryParameters: params, + path: ApiEndpoints.groups, + queryParameters: params, showServerMessage: false, expectedResponseModel: (json) => DevicesCategoryModel.fromJsonList(json['groups']),