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

Commit 9d72ef2

Browse files
committed
WIP
1 parent 0507640 commit 9d72ef2

File tree

6 files changed

+55
-8
lines changed

6 files changed

+55
-8
lines changed

lib/src/screens/category_screen.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import 'package:flutter/material.dart';
22
import 'package:flutter/scheduler.dart';
33
import 'package:flutter_bloc/flutter_bloc.dart';
4-
import 'package:flutter_cache_manager/flutter_cache_manager.dart';
4+
import 'package:flutter_cache_manager_dio/flutter_cache_manager_dio.dart';
55
import 'package:flutter_spinkit/flutter_spinkit.dart';
66
import 'package:flutter_translate/flutter_translate.dart';
77
import 'package:nc_cookbook_api/nc_cookbook_api.dart';
@@ -72,7 +72,7 @@ class _CategoryScreenState extends State<CategoryScreen> {
7272
}
7373

7474
Future<void> refresh() async {
75-
await DefaultCacheManager().emptyCache();
75+
await DioCacheManager.instance.emptyCache();
7676
// ignore: use_build_context_synchronously
7777
BlocProvider.of<CategoriesBloc>(context).add(const CategoriesLoaded());
7878
}

lib/src/screens/recipes_list_screen.dart

Lines changed: 2 additions & 2 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:nextcloud_cookbook_flutter/src/blocs/recipes_short/recipes_short_bloc.dart';
66
import 'package:nextcloud_cookbook_flutter/src/widget/recipe_list_item.dart';
@@ -18,7 +18,7 @@ class RecipesListScreen extends StatefulWidget {
1818

1919
class _RecipesListScreenState extends State<RecipesListScreen> {
2020
Future<void> refresh() async {
21-
await DefaultCacheManager().emptyCache();
21+
await DioCacheManager.instance.emptyCache();
2222
// ignore: use_build_context_synchronously
2323
BlocProvider.of<RecipesShortBloc>(context)
2424
.add(RecipesShortLoaded(category: widget.category));

lib/src/services/api_provider.dart

Lines changed: 39 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,10 @@ 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

811
final client = Dio(
@@ -23,8 +26,42 @@ class ApiProvider {
2326
);
2427
}
2528

29+
final documentsDir = await getApplicationDocumentsDirectory();
30+
31+
// Global options
32+
final options = CacheOptions(
33+
// A default store is required for interceptor.
34+
store: SembastCacheStore(storePath: documentsDir.path),
35+
36+
// All subsequent fields are optional.
37+
38+
// Default.
39+
policy: CachePolicy.noCache,
40+
// Returns a cached response on error but for statuses 401 & 403.
41+
// Also allows to return a cached response on network errors (e.g. offline usage).
42+
// Defaults to [null].
43+
hitCacheOnErrorExcept: [401, 403],
44+
// Overrides any HTTP directive to delete entry past this duration.
45+
// Useful only when origin server has no cache config or custom behaviour is desired.
46+
// Defaults to [null].
47+
maxStale: const Duration(days: 7),
48+
// Default. Allows 3 cache sets and ease cleanup.
49+
priority: CachePriority.normal,
50+
// Default. Body and headers encryption with your own algorithm.
51+
cipher: null,
52+
// Default. Key builder to retrieve requests.
53+
keyBuilder: CacheOptions.defaultCacheKeyBuilder,
54+
// Default. Allows to cache POST requests.
55+
// Overriding [keyBuilder] is strongly recommended when [true].
56+
allowPostMethod: false,
57+
);
58+
2659
ncCookbookApi = NcCookbookApi(
27-
dio: client,
60+
basePathOverride: '${auth.server}/apps/cookbook',
61+
interceptors: [
62+
BasicAuthInterceptor(),
63+
DioCacheInterceptor(options: options),
64+
],
2865
);
2966

3067
ncCookbookApi.setBasicAuth(
@@ -37,7 +74,6 @@ class ApiProvider {
3774
miscApi = ncCookbookApi.getMiscApi();
3875
tagsApi = ncCookbookApi.getTagsApi();
3976
}
40-
static final ApiProvider _apiProvider = ApiProvider._();
4177

4278
late NcCookbookApi ncCookbookApi;
4379
late RecipesApi recipeApi;

lib/src/services/services.dart

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ import 'dart:developer';
55
import 'package:dio/dio.dart' as dio;
66
import 'package:dio/dio.dart';
77
import 'package:dio/io.dart';
8+
import 'package:dio_cache_interceptor/dio_cache_interceptor.dart';
9+
import 'package:dio_cache_interceptor_sembast_storage/dio_cache_interceptor_sembast_storage.dart';
810
import 'package:flutter/material.dart';
911
import 'package:flutter/services.dart';
1012
import 'package:flutter_local_notifications/flutter_local_notifications.dart';
@@ -17,6 +19,7 @@ import 'package:nextcloud_cookbook_flutter/src/models/image_response.dart';
1719
import 'package:nextcloud_cookbook_flutter/src/models/timer.dart';
1820
import 'package:nextcloud_cookbook_flutter/src/screens/recipe_import_screen.dart';
1921
import 'package:nextcloud_cookbook_flutter/src/util/url_validator.dart';
22+
import 'package:path_provider/path_provider.dart';
2023
import 'package:timezone/data/latest_10y.dart' as tz;
2124
import 'package:timezone/timezone.dart' as tz;
2225
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
@@ -70,6 +70,7 @@ class UserRepository {
7070
ApiProvider().ncCookbookApi.isSupportedSync(version);
7171

7272
Future<APIVersion> fetchApiVersion() async {
73+
await ApiProvider().initialize();
7374
final response = await ApiProvider().miscApi.version();
7475

7576
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)