Skip to content

Commit 5ae25ad

Browse files
committed
Change s.prefs by hive
1 parent 0b880c6 commit 5ae25ad

File tree

8 files changed

+70
-85
lines changed

8 files changed

+70
-85
lines changed

lib/main.dart

+5-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,11 @@
11
import 'package:flutter/material.dart';
22
import 'package:flutter_clean_architecture/src/presentation/ui/app.dart';
3+
import 'package:hive_flutter/hive_flutter.dart';
34
import 'package:hooks_riverpod/hooks_riverpod.dart';
4-
void main() {
5+
6+
void main() async {
7+
await Hive.initFlutter();
58
WidgetsFlutterBinding.ensureInitialized();
9+
610
runApp(const ProviderScope(child: Application()));
711
}
+7-7
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
1-
import 'package:flutter_clean_architecture/src/presentation/di/app_provider.dart';
2-
import 'package:hooks_riverpod/hooks_riverpod.dart';
3-
import 'package:flutter_clean_architecture/src/data/local/pref/app_pref.dart';
4-
import 'package:flutter_clean_architecture/src/data/local/pref/pref_helper.dart';
1+
import 'package:flutter_clean_architecture/src/data/local/app_storage.dart';
52
import 'package:flutter_clean_architecture/src/data/movie_repository_impl.dart';
63
import 'package:flutter_clean_architecture/src/domain/repository/movie_repository.dart';
4+
import 'package:flutter_clean_architecture/src/presentation/di/app_provider.dart';
5+
import 'package:hooks_riverpod/hooks_riverpod.dart';
6+
77
import 'network_provider.dart';
88

9-
final prefHelperProvider = Provider<PrefHelper>(
10-
(ref) => AppPrefs(),
9+
final appStorageProvider = Provider<AppStorage>(
10+
(ref) => AppStorage.init(),
1111
);
1212

1313
final movieRepositoryProvider = Provider<MovieRepository>(
1414
(ref) => MovieRepositoryImpl(ref.watch(movieApiProvider), ref.watch(localeCodeProvider)),
15-
);
15+
);

lib/src/data/local/app_storage.dart

+15
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import 'package:flutter_clean_architecture/src/data/local/pref/app_pref.dart';
2+
import 'package:flutter_clean_architecture/src/data/local/pref/pref_helper.dart';
3+
import 'package:hive/hive.dart';
4+
5+
class AppStorage {
6+
static const _prefsBox = 'prefs';
7+
8+
AppStorage._();
9+
10+
static AppStorage init() {
11+
return AppStorage._();
12+
}
13+
14+
PrefHelper get prefHelper => AppPrefs(prefBox: Hive.box(_prefsBox));
15+
}

lib/src/data/local/pref/app_pref.dart

+13-16
Original file line numberDiff line numberDiff line change
@@ -2,41 +2,39 @@ import 'dart:convert';
22

33
import 'package:flutter_clean_architecture/src/data/local/pref/pref_helper.dart';
44
import 'package:flutter_clean_architecture/src/data/model/user_data_model.dart';
5-
import 'package:shared_preferences/shared_preferences.dart';
5+
import 'package:hive/hive.dart';
66

77
class AppPrefs extends PrefHelper {
8-
static const String firstRunKey = 'first_run_key';
9-
static const String tokenKey = 'token_key';
10-
static const String userKey = 'user_key';
8+
static const String _firstRunKey = 'first_run_key';
9+
static const String _tokenKey = 'token_key';
10+
static const String _userKey = 'user_key';
11+
12+
final Box _prefBox;
13+
AppPrefs({required Box prefBox}) : _prefBox = prefBox;
1114

1215
@override
1316
Future<bool> firstRun() async {
14-
final preferences = await SharedPreferences.getInstance();
15-
return preferences.getBool(firstRunKey) ?? true;
17+
return _prefBox.get(_firstRunKey) ?? true;
1618
}
1719

1820
@override
1921
Future<void> setFirstRun(bool isFirstRun) async {
20-
final preferences = await SharedPreferences.getInstance();
21-
await preferences.setBool(firstRunKey, isFirstRun);
22+
await _prefBox.put(_firstRunKey, isFirstRun);
2223
}
2324

2425
@override
2526
Future<String?> getToken() async {
26-
final preferences = await SharedPreferences.getInstance();
27-
return preferences.getString(tokenKey);
27+
return _prefBox.get(_tokenKey);
2828
}
2929

3030
@override
3131
Future setToken(String token) async {
32-
final preferences = await SharedPreferences.getInstance();
33-
await preferences.setString(tokenKey, token);
32+
await _prefBox.put(_tokenKey, token);
3433
}
3534

3635
@override
3736
Future<UserDataModel?> getUserSaved() async {
38-
final preferences = await SharedPreferences.getInstance();
39-
final userJson = preferences.getString(userKey);
37+
final userJson = _prefBox.get(_userKey);
4038
if (userJson != null) {
4139
try {
4240
return UserDataModel.fromJson(jsonDecode(userJson));
@@ -50,7 +48,6 @@ class AppPrefs extends PrefHelper {
5048

5149
@override
5250
Future saveUser(UserDataModel user) async {
53-
final preferences = await SharedPreferences.getInstance();
54-
await preferences.setString(userKey, user.toJson().toString());
51+
await _prefBox.put(_userKey, user.toJson().toString());
5552
}
5653
}

lib/src/data/remote/interceptor/header_interceptor.dart

+2-2
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
import 'dart:io';
33

44
import 'package:dio/dio.dart';
5-
import 'package:flutter_clean_architecture/src/data/local/pref/app_pref.dart';
5+
import 'package:flutter_clean_architecture/src/data/local/app_storage.dart';
66
import 'package:package_info/package_info.dart';
77

88
class HeaderInterceptor extends InterceptorsWrapper {
@@ -15,7 +15,7 @@ class HeaderInterceptor extends InterceptorsWrapper {
1515
RequestOptions options, RequestInterceptorHandler handler) async {
1616
final userAgentValue = await userAgentClientHintsHeader();
1717

18-
final token = await AppPrefs().getToken();
18+
final token = await AppStorage.init().prefHelper.getToken();
1919
if (token?.isNotEmpty == true) {
2020
options.headers[authHeaderKey] = '$bearer $token';
2121
}

macos/Flutter/GeneratedPluginRegistrant.swift

-2
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,10 @@ import Foundation
77

88
import package_info
99
import path_provider_macos
10-
import shared_preferences_macos
1110
import sqflite
1211

1312
func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) {
1413
FLTPackageInfoPlugin.register(with: registry.registrar(forPlugin: "FLTPackageInfoPlugin"))
1514
PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin"))
16-
SharedPreferencesPlugin.register(with: registry.registrar(forPlugin: "SharedPreferencesPlugin"))
1715
SqflitePlugin.register(with: registry.registrar(forPlugin: "SqflitePlugin"))
1816
}

pubspec.lock

+21-56
Original file line numberDiff line numberDiff line change
@@ -378,6 +378,27 @@ packages:
378378
url: "https://pub.dartlang.org"
379379
source: hosted
380380
version: "2.1.0"
381+
hive:
382+
dependency: "direct main"
383+
description:
384+
name: hive
385+
url: "https://pub.dartlang.org"
386+
source: hosted
387+
version: "2.2.1"
388+
hive_flutter:
389+
dependency: "direct main"
390+
description:
391+
name: hive_flutter
392+
url: "https://pub.dartlang.org"
393+
source: hosted
394+
version: "1.1.0"
395+
hive_generator:
396+
dependency: "direct dev"
397+
description:
398+
name: hive_generator
399+
url: "https://pub.dartlang.org"
400+
source: hosted
401+
version: "1.1.3"
381402
hooks_riverpod:
382403
dependency: "direct main"
383404
description:
@@ -672,62 +693,6 @@ packages:
672693
url: "https://pub.dartlang.org"
673694
source: hosted
674695
version: "0.27.3"
675-
shared_preferences:
676-
dependency: "direct main"
677-
description:
678-
name: shared_preferences
679-
url: "https://pub.dartlang.org"
680-
source: hosted
681-
version: "2.0.13"
682-
shared_preferences_android:
683-
dependency: transitive
684-
description:
685-
name: shared_preferences_android
686-
url: "https://pub.dartlang.org"
687-
source: hosted
688-
version: "2.0.11"
689-
shared_preferences_ios:
690-
dependency: transitive
691-
description:
692-
name: shared_preferences_ios
693-
url: "https://pub.dartlang.org"
694-
source: hosted
695-
version: "2.1.0"
696-
shared_preferences_linux:
697-
dependency: transitive
698-
description:
699-
name: shared_preferences_linux
700-
url: "https://pub.dartlang.org"
701-
source: hosted
702-
version: "2.1.0"
703-
shared_preferences_macos:
704-
dependency: transitive
705-
description:
706-
name: shared_preferences_macos
707-
url: "https://pub.dartlang.org"
708-
source: hosted
709-
version: "2.0.3"
710-
shared_preferences_platform_interface:
711-
dependency: transitive
712-
description:
713-
name: shared_preferences_platform_interface
714-
url: "https://pub.dartlang.org"
715-
source: hosted
716-
version: "2.0.0"
717-
shared_preferences_web:
718-
dependency: transitive
719-
description:
720-
name: shared_preferences_web
721-
url: "https://pub.dartlang.org"
722-
source: hosted
723-
version: "2.0.3"
724-
shared_preferences_windows:
725-
dependency: transitive
726-
description:
727-
name: shared_preferences_windows
728-
url: "https://pub.dartlang.org"
729-
source: hosted
730-
version: "2.1.0"
731696
shelf:
732697
dependency: transitive
733698
description:

pubspec.yaml

+7-1
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,10 @@ dependencies:
4242
cupertino_icons: ^1.0.3
4343

4444
# Shared Preferences
45-
shared_preferences: ^2.0.6
45+
# shared_preferences: ^2.0.6
46+
# Change S.Prefs by Hive
47+
hive: ^2.2.0
48+
hive_flutter: ^1.1.0
4649

4750
# Support for design
4851
flutter_svg: ^1.0.0
@@ -66,6 +69,9 @@ dev_dependencies:
6669
# Data class
6770
freezed: ^2.0.3+1
6871

72+
# Generate object
73+
hive_generator: any
74+
6975
# Auto generate some files
7076
build_runner: ^2.0.4
7177
# build_runner: ^1.11.5

0 commit comments

Comments
 (0)