Dio Example Usage
03-06-2020class ApiHelper { static const String BASE_PATH = "http://api.example.com"; static const String API_PATH = "/api"; Future<ApiResponseModel> request(String url, {Map<String, String> queryParameters, bearerToken = ''}) async { return _innerRequest(url, 'GET',bearerToken); } Future<ApiResponseModel> _innerRequest(String url, String type, [postParams,bearerToken = '']) async { url = _getUrl(url); Dio dio = _getDio(bearerToken); try { var response; if(type=='GET') response = await dio.get(url); else if(type=='POST'){ log('POST Params: '+postParams); response = await dio.post(url, data: postParams); } else throw Exception('type must be one of GET, POST'); if (response.statusCode == 200) { return _getApiResponseModel(response.data); } } on DioError catch (e) { if(e.response==null) { log('Dio Error: '+e.error.message); return _getApiUnhandledError(); } if (e.response.statusCode == 400 || e.response.statusCode == 401) { return _getApiResponseModel(e.response.data); } else { return _getApiUnhandledError(); } } catch (error) { return _getApiUnhandledError(); } } String _getUrl(String url) { if (!url.startsWith("/")) url = '/' + url; var uri = url.startsWith("https://") ? Uri.https(BASE_PATH.substring("https://".length), API_PATH + url) : Uri.http(BASE_PATH.substring("http://".length), API_PATH + url); log('URL: $uri'); return uri.toString(); } Dio _getDio(bearerToken) { // or new Dio with a BaseOptions instance. BaseOptions options = new BaseOptions(); options.headers["Content-Type"] = "application/json; charset:utf-8"; options.headers["Accept"] = "application/json"; if (bearerToken != null && bearerToken != '') options.headers["Authorization"] = 'Bearer ' + bearerToken; Dio dio = new Dio(options); return dio; } ApiResponseModel _getApiResponseModel(result) { var apiResponse = new ApiResponseModel(); apiResponse.message = result['message'] == 'Unauthenticated.' ? 'Oturumunuz kapandı. Lütfen çıkış yapıp tekrar giriş yapınız' : result['message']; apiResponse.status = result['success'] == null ? false : result['success']; apiResponse.data = result['data']; return apiResponse; } ApiResponseModel _getApiUnhandledError() { var apiResponse = new ApiResponseModel(); apiResponse.message = 'Beklenmeyen bir hata oluştu'; apiResponse.status = false; apiResponse.data = ''; return apiResponse; } Future<ApiResponseModel> postRequest(String url, postParams, [bearerToken = '']) async { return _innerRequest(url, 'POST',postParams,bearerToken); } Future<ApiResponseModel> uploadFile( String url, String parameterName, File file, [bearerToken = '']) async { String fileName = file.path.split('/').last; Dio dio = new Dio(); dio.options.baseUrl = _getUrl(url).toString(); if (bearerToken != null && bearerToken != '') dio.options.headers['Authorization'] = 'Bearer ' + bearerToken; FormData formData = FormData.fromMap({ parameterName: await MultipartFile.fromFile(file.path, filename: fileName), }); var response = await dio.post(url, data: formData); return _getApiResponseModel(response.toString()); } }