Skip to content
This repository was archived by the owner on Sep 14, 2024. It is now read-only.

Commit 37ddddf

Browse files
author
Nikolas Rimikis
committed
WIP
1 parent 97b44d8 commit 37ddddf

File tree

6 files changed

+56
-9
lines changed

6 files changed

+56
-9
lines changed

lib/src/screens/category/category_screen.dart

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import 'package:flutter/material.dart';
22
import 'package:flutter_bloc/flutter_bloc.dart';
3-
import 'package:flutter_cache_manager/flutter_cache_manager.dart';
3+
import 'package:flutter_cache_manager_dio/flutter_cache_manager_dio.dart';
44
import 'package:flutter_spinkit/flutter_spinkit.dart';
55
import 'package:flutter_translate/flutter_translate.dart';
66
import 'package:nc_cookbook_api/nc_cookbook_api.dart';
@@ -106,7 +106,7 @@ class MainScreen extends StatelessWidget {
106106
icon: const Icon(Icons.refresh_outlined),
107107
tooltip: translate('app_bar.refresh'),
108108
onPressed: () {
109-
DefaultCacheManager().emptyCache();
109+
DioCacheManager.instance.emptyCache();
110110
BlocProvider.of<CategoriesBloc>(context)
111111
.add(const CategoriesLoaded());
112112
},
@@ -177,7 +177,7 @@ class CategoryScreen extends StatelessWidget {
177177

178178
return RefreshIndicator(
179179
onRefresh: () {
180-
DefaultCacheManager().emptyCache();
180+
DioCacheManager.instance.emptyCache();
181181
BlocProvider.of<CategoriesBloc>(context)
182182
.add(const CategoriesLoaded());
183183
return Future.value();

lib/src/screens/recipes_list_screen.dart

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import 'package:flutter/material.dart';
22
import 'package:flutter_bloc/flutter_bloc.dart';
3-
import 'package:flutter_cache_manager/flutter_cache_manager.dart';
3+
import 'package:flutter_cache_manager_dio/flutter_cache_manager_dio.dart';
44
import 'package:flutter_translate/flutter_translate.dart';
55
import 'package:intl/intl.dart';
66
import 'package:nc_cookbook_api/nc_cookbook_api.dart';
@@ -34,7 +34,7 @@ class RecipesListScreen extends StatelessWidget {
3434
icon: const Icon(Icons.refresh_outlined),
3535
tooltip: translate('app_bar.refresh'),
3636
onPressed: () {
37-
DefaultCacheManager().emptyCache();
37+
DioCacheManager.instance.emptyCache();
3838
BlocProvider.of<RecipesShortBloc>(context)
3939
.add(RecipesShortLoaded(category: category));
4040
},
@@ -43,7 +43,7 @@ class RecipesListScreen extends StatelessWidget {
4343
),
4444
body: RefreshIndicator(
4545
onRefresh: () {
46-
DefaultCacheManager().emptyCache();
46+
DioCacheManager.instance.emptyCache();
4747
BlocProvider.of<RecipesShortBloc>(context)
4848
.add(RecipesShortLoaded(category: category));
4949
return Future.value();

lib/src/services/api_provider.dart

Lines changed: 38 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,48 @@ part of 'services.dart';
22

33
class ApiProvider {
44
factory ApiProvider() => _apiProvider;
5-
ApiProvider._() {
5+
ApiProvider._();
6+
static final ApiProvider _apiProvider = ApiProvider._();
7+
8+
Future<void> initialize() async {
69
final auth = UserRepository().currentAppAuthentication;
710

11+
final documentsDir = await getApplicationDocumentsDirectory();
12+
13+
// Global options
14+
final options = CacheOptions(
15+
// A default store is required for interceptor.
16+
store: SembastCacheStore(storePath: documentsDir.path),
17+
18+
// All subsequent fields are optional.
19+
20+
// Default.
21+
policy: CachePolicy.noCache,
22+
// Returns a cached response on error but for statuses 401 & 403.
23+
// Also allows to return a cached response on network errors (e.g. offline usage).
24+
// Defaults to [null].
25+
hitCacheOnErrorExcept: [401, 403],
26+
// Overrides any HTTP directive to delete entry past this duration.
27+
// Useful only when origin server has no cache config or custom behaviour is desired.
28+
// Defaults to [null].
29+
maxStale: const Duration(days: 7),
30+
// Default. Allows 3 cache sets and ease cleanup.
31+
priority: CachePriority.normal,
32+
// Default. Body and headers encryption with your own algorithm.
33+
cipher: null,
34+
// Default. Key builder to retrieve requests.
35+
keyBuilder: CacheOptions.defaultCacheKeyBuilder,
36+
// Default. Allows to cache POST requests.
37+
// Overriding [keyBuilder] is strongly recommended when [true].
38+
allowPostMethod: false,
39+
);
40+
841
ncCookbookApi = NcCookbookApi(
942
basePathOverride: '${auth.server}/apps/cookbook',
43+
interceptors: [
44+
BasicAuthInterceptor(),
45+
DioCacheInterceptor(options: options),
46+
],
1047
);
1148

1249
ncCookbookApi.setBasicAuth(
@@ -19,7 +56,6 @@ class ApiProvider {
1956
miscApi = ncCookbookApi.getMiscApi();
2057
tagsApi = ncCookbookApi.getTagsApi();
2158
}
22-
static final ApiProvider _apiProvider = ApiProvider._();
2359

2460
late NcCookbookApi ncCookbookApi;
2561
late RecipesApi recipeApi;

lib/src/services/services.dart

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ import 'dart:developer';
44
import 'package:dio/dio.dart' as dio;
55
import 'package:dio/dio.dart';
66
import 'package:dio/io.dart';
7+
import 'package:dio_cache_interceptor/dio_cache_interceptor.dart';
8+
import 'package:dio_cache_interceptor_sembast_storage/dio_cache_interceptor_sembast_storage.dart';
79
import 'package:flutter/material.dart';
810
import 'package:flutter/services.dart';
911
import 'package:flutter_local_notifications/flutter_local_notifications.dart';
@@ -16,6 +18,7 @@ import 'package:nextcloud_cookbook_flutter/src/models/image_response.dart';
1618
import 'package:nextcloud_cookbook_flutter/src/models/timer.dart';
1719
import 'package:nextcloud_cookbook_flutter/src/screens/recipe_import_screen.dart';
1820
import 'package:nextcloud_cookbook_flutter/src/util/url_validator.dart';
21+
import 'package:path_provider/path_provider.dart';
1922
import 'package:timezone/data/latest_10y.dart' as tz;
2023
import 'package:timezone/timezone.dart' as tz;
2124
import 'package:xml/xml.dart';

lib/src/services/user_repository.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@ class UserRepository {
8080
}
8181

8282
Future<APIVersion> fetchApiVersion() async {
83+
await ApiProvider().initialize();
8384
final response = await ApiProvider().miscApi.version();
8485

8586
return response.data!.apiVersion;

pubspec.yaml

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,14 @@ dependencies:
8282
timezone: ^0.9.1
8383

8484
cached_network_image: ^3.0.0
85-
flutter_cache_manager: ^3.3.0
85+
#flutter_cache_manager: ^3.3.0
86+
flutter_cache_manager_dio:
87+
git:
88+
url: https://github.com/josh-burton/flutter_cache_manager_dio.git
89+
ref: dio-5.x
90+
dio_cache_interceptor_sembast_storage: ^0.1.0
91+
dio_cache_interceptor: ^3.4.1
92+
path_provider: ^2.0.14
8693

8794
flutter_typeahead: ^4.3.7
8895

0 commit comments

Comments
 (0)