dio and login functions

This commit is contained in:
mohammad
2024-07-21 15:09:51 +03:00
parent 2e678388fb
commit 9d5eba6870
16 changed files with 34 additions and 41 deletions

View File

@ -36,16 +36,6 @@ class LoginBloc extends Bloc<LoginEvent, LoginState> {
bool isPasswordVisible = false; bool isPasswordVisible = false;
bool showValidationMessage = false; bool showValidationMessage = false;
void _onPress(LoginButtonPressed event, Emitter<LoginState> emit) async {
emit(LoginLoading());
await Future.delayed(const Duration(seconds: 2));
if (event.username == 'admin' && event.password == 'password') {
emit(LoginSuccess());
} else {
emit(const LoginFailure(error: 'Invalid credentials'));
}
}
/////////////////////////////////////VALIDATORS///////////////////////////////////// /////////////////////////////////////VALIDATORS/////////////////////////////////////
String? passwordValidator(String? value) { String? passwordValidator(String? value) {

View File

@ -1,6 +1,6 @@
import 'dart:convert'; import 'dart:convert';
import 'package:flutter_secure_storage/flutter_secure_storage.dart'; import 'package:flutter_secure_storage/flutter_secure_storage.dart';
import 'package:syncrow_web/utils/const.dart'; import 'package:syncrow_web/utils/helpers/decodeBase64.dart';
class Token { class Token {
static const String loginAccessTokenKey = 'accessToken'; static const String loginAccessTokenKey = 'accessToken';

View File

@ -2,7 +2,7 @@ import 'dart:ui';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flutter_svg/svg.dart'; import 'package:flutter_svg/svg.dart';
import 'package:syncrow_web/utils/assets.dart'; import 'package:syncrow_web/utils/constants/assets.dart';
import 'package:syncrow_web/pages/auth/bloc/login_bloc.dart'; import 'package:syncrow_web/pages/auth/bloc/login_bloc.dart';
import 'package:syncrow_web/pages/auth/bloc/login_event.dart'; import 'package:syncrow_web/pages/auth/bloc/login_event.dart';
import 'package:syncrow_web/pages/auth/bloc/login_state.dart'; import 'package:syncrow_web/pages/auth/bloc/login_state.dart';

View File

@ -1,7 +1,7 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flutter_svg/svg.dart'; import 'package:flutter_svg/svg.dart';
import 'package:syncrow_web/utils/assets.dart'; import 'package:syncrow_web/utils/constants/assets.dart';
import 'package:syncrow_web/pages/auth/bloc/login_bloc.dart'; import 'package:syncrow_web/pages/auth/bloc/login_bloc.dart';
import 'package:syncrow_web/pages/auth/bloc/login_event.dart'; import 'package:syncrow_web/pages/auth/bloc/login_event.dart';
import 'package:syncrow_web/pages/auth/bloc/login_state.dart'; import 'package:syncrow_web/pages/auth/bloc/login_state.dart';

View File

@ -1,10 +0,0 @@
abstract class ApiEndpoints {
static const String baseUrl = 'https://syncrow.azurewebsites.net';
// static const String baseUrl = 'http://100.107.182.63:4001'; //Localhost
////////////////////////////////////// Authentication ///////////////////////////////
static const String signUp = '$baseUrl/authentication/user/signup';
static const String login = '$baseUrl/authentication/user/login';
}

View File

@ -1,9 +1,11 @@
import 'dart:io';
import 'package:dio/dio.dart'; import 'package:dio/dio.dart';
import 'package:flutter_secure_storage/flutter_secure_storage.dart'; import 'package:flutter_secure_storage/flutter_secure_storage.dart';
import 'package:syncrow_web/pages/auth/model/token.dart';
import 'dart:async'; import 'dart:async';
import 'package:syncrow_web/services/api/network_exception.dart'; import 'package:syncrow_web/services/api/network_exception.dart';
import 'package:syncrow_web/utils/constants/api_const.dart';
import 'package:syncrow_web/utils/snack_bar.dart'; import 'package:syncrow_web/utils/snack_bar.dart';
import 'api_links_endpoints.dart';
class HTTPInterceptor extends InterceptorsWrapper { class HTTPInterceptor extends InterceptorsWrapper {
List<String> headerExclusionList = []; List<String> headerExclusionList = [];
@ -11,6 +13,7 @@ class HTTPInterceptor extends InterceptorsWrapper {
List<String> headerExclusionListOfAddedParameters = [ List<String> headerExclusionListOfAddedParameters = [
ApiEndpoints.login, ApiEndpoints.login,
]; ];
@override @override
void onResponse(Response response, ResponseInterceptorHandler handler) async { void onResponse(Response response, ResponseInterceptorHandler handler) async {
if (await validateResponse(response)) { if (await validateResponse(response)) {
@ -23,11 +26,11 @@ class HTTPInterceptor extends InterceptorsWrapper {
@override @override
void onRequest(RequestOptions options, RequestInterceptorHandler handler) async { void onRequest(RequestOptions options, RequestInterceptorHandler handler) async {
var storage = const FlutterSecureStorage(); var storage = const FlutterSecureStorage();
// var token = await storage.read(key: Token.loginAccessTokenKey); var token = await storage.read(key: Token.loginAccessTokenKey);
// if (checkHeaderExclusionListOfAddedParameters(options.path)) { if (checkHeaderExclusionListOfAddedParameters(options.path)) {
// options.headers.putIfAbsent(HttpHeaders.authorizationHeader, () => "Bearer $token"); options.headers.putIfAbsent(HttpHeaders.authorizationHeader, () => "Bearer $token");
// } }
// options.headers['Authorization'] = 'Bearer ${'${token!}123'}'; options.headers['Authorization'] = 'Bearer ${token!}';
super.onRequest(options, handler); super.onRequest(options, handler);
} }
@ -38,10 +41,10 @@ class HTTPInterceptor extends InterceptorsWrapper {
CustomSnackBar.displaySnackBar(failure.toString()); CustomSnackBar.displaySnackBar(failure.toString());
} }
var storage = const FlutterSecureStorage(); var storage = const FlutterSecureStorage();
// var token = await storage.read(key: Token.loginAccessTokenKey); var token = await storage.read(key: Token.loginAccessTokenKey);
// if (err.response?.statusCode == 401 && token != null) { if (err.response?.statusCode == 401 && token != null) {
// await AuthCubit.get(NavigationService.navigatorKey.currentContext!).logout(); // await AuthCubit.get(NavigationService.navigatorKey.currentContext!).logout();
// } }
super.onError(err, handler); super.onError(err, handler);
} }

View File

@ -1,7 +1,7 @@
import 'package:dio/dio.dart'; import 'package:dio/dio.dart';
import 'package:syncrow_web/services/api/api_links_endpoints.dart';
import 'package:syncrow_web/services/api/http_interceptor.dart'; import 'package:syncrow_web/services/api/http_interceptor.dart';
import 'package:syncrow_web/services/locator.dart'; import 'package:syncrow_web/services/locator.dart';
import 'package:syncrow_web/utils/constants/api_const.dart';
class HTTPService { class HTTPService {
final Dio client = serviceLocator.get<Dio>(); final Dio client = serviceLocator.get<Dio>();

View File

@ -32,7 +32,8 @@ class ServerFailure extends Failure {
// var document = parser.parse(dioError.response!.data.toString()); // var document = parser.parse(dioError.response!.data.toString());
// var message = document.body!.text; // var message = document.body!.text;
return ServerFailure.fromResponse( return ServerFailure.fromResponse(
dioError.response!.statusCode!, dioError.response?.data['message'] ?? "Error"); dioError.response!.statusCode!,
dioError.response?.data['message'] ?? "Error");
} }
case DioExceptionType.cancel: case DioExceptionType.cancel:
return ServerFailure("The request to ApiServer was canceled"); return ServerFailure("The request to ApiServer was canceled");

View File

@ -1,5 +1,5 @@
import 'package:syncrow_web/pages/auth/model/token.dart'; import 'package:syncrow_web/pages/auth/model/token.dart';
import 'api/api_links_endpoints.dart'; import 'package:syncrow_web/utils/constants/api_const.dart';
import 'api/http_service.dart'; import 'api/http_service.dart';
class AuthenticationAPI { class AuthenticationAPI {

View File

@ -8,6 +8,5 @@ final GetIt serviceLocator = GetIt.instance;
initialSetup() { initialSetup() {
serviceLocator.registerSingleton<HTTPInterceptor>(HTTPInterceptor()); serviceLocator.registerSingleton<HTTPInterceptor>(HTTPInterceptor());
//Base classes //Base classes
serviceLocator.registerSingleton<Dio>(HTTPService.setupDioClient()); serviceLocator.registerSingleton<Dio>(HTTPService.setupDioClient());
} }

View File

@ -0,0 +1,8 @@
abstract class ApiEndpoints {
static const String baseUrl = 'https://syncrow-staging.azurewebsites.net';
// static const String baseUrl = 'http://100.107.182.63:4001'; //Localhost
//https://syncrow-staging.azurewebsites.net
////////////////////////////////////// Authentication ///////////////////////////////
static const String signUp = 'authentication/user/signup';
static const String login = 'authentication/user/login';
}

View File

@ -0,0 +1,5 @@

View File

@ -57,7 +57,4 @@ class WebAppBar extends StatelessWidget {
) , ) ,
); );
} }
// @override
// Size get preferredSize => Size.fromHeight(50.0);
} }

View File

@ -1,6 +1,6 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_svg/svg.dart'; import 'package:flutter_svg/svg.dart';
import 'package:syncrow_web/utils/assets.dart'; import 'package:syncrow_web/utils/constants/assets.dart';
import 'package:syncrow_web/web_layout/web_app_bar.dart'; import 'package:syncrow_web/web_layout/web_app_bar.dart';
import 'menu_sidebar.dart'; import 'menu_sidebar.dart';