Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 2 additions & 6 deletions lib/api_base_rest/cache/cache.dart
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ extension DataCachingX on Ref {
AuthHeader? authHeader,
}) async {
final cacheManager = watch(restCacheManagerProvider(ttlDays));
final dio = watch(authRestClientProvider(authHeader));

final cachedFile = await cacheManager.getFileFromCache(fullUrl);
if (cachedFile != null) {
Expand All @@ -43,12 +44,7 @@ extension DataCachingX on Ref {
return data;
}
}
final response = await safeGetWatch<dynamic>(
fullUrl,
localizedMessage: localizedOfflineMessage,
onRetry: onRetry,
authHeader: authHeader,
);
final response = await dio.safeGet<dynamic>(fullUrl, localizedMessage: localizedOfflineMessage, onRetry: onRetry);
final json = parseJSON(response.data, fromJson);
if (extraValidityCheck(json)) {
await cacheManager.putFile(
Expand Down
33 changes: 14 additions & 19 deletions lib/api_base_rest/client/offline_error.dart
Original file line number Diff line number Diff line change
@@ -1,10 +1,7 @@
import "package:dio/dio.dart";
import "package:flutter/widgets.dart";
import "package:flutter_riverpod/flutter_riverpod.dart";
import "package:logger/logger.dart";

import "dio_client.dart";

class RestFrameworkOfflineException implements Exception {
final String message;
final String Function(BuildContext context) localizedMessage;
Expand All @@ -20,27 +17,25 @@ class RestFrameworkOfflineException implements Exception {
String toString() => "RestFrameworkOfflineException: $message";
}

extension DioSafeRequestsX on Ref {
Future<Response<T>> safeRequest<T>(
Future<Response<T>> Function() request, {
required String Function(BuildContext context) localizedMessage,
VoidCallback? onRetry,
}) async {
try {
return await request();
} on DioException catch (e) {
Logger().e(e);
throw RestFrameworkOfflineException(localizedMessage: localizedMessage, onRetry: onRetry);
}
Future<Response<T>> safeRequest<T>(
Future<Response<T>> Function() request, {
required String Function(BuildContext context) localizedMessage,
VoidCallback? onRetry,
}) async {
try {
return await request();
} on DioException catch (e) {
Logger().e(e);
throw RestFrameworkOfflineException(localizedMessage: localizedMessage, onRetry: onRetry);
}
}

Future<Response<T>> safeGetWatch<T>(
extension DioSafeRequestsX on Dio {
Future<Response<T>> safeGet<T>(
String url, {
required String Function(BuildContext context) localizedMessage,
VoidCallback? onRetry,
AuthHeader? authHeader,
}) {
final dio = watch(authRestClientProvider(authHeader));
return safeRequest(() => dio.get<T>(url), localizedMessage: localizedMessage, onRetry: onRetry);
return safeRequest(() => get<T>(url), localizedMessage: localizedMessage, onRetry: onRetry);
}
}
6 changes: 4 additions & 2 deletions lib/api_base_rest/translations/translate.dart
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,9 @@ extension TranslateX on Ref {
VoidCallback? onRetry,
AuthHeader? authHeader,
}) async {
final translator = watch(solvroTranslatorProvider);
final localeFuture = watch(preferredLanguageRepositoryProvider.future);

final data = await getAndCacheData(
fullUrl,
fromJson,
Expand All @@ -33,8 +36,7 @@ extension TranslateX on Ref {
authHeader: authHeader,
);

final translator = watch(solvroTranslatorProvider);
final locale = await watch(preferredLanguageRepositoryProvider.future) ?? SolvroLocale.pl;
final locale = await localeFuture ?? SolvroLocale.pl;

try {
return switch (data) {
Expand Down