如果我们App需要存储一些用户偏好,等一些基本设置的一些简单数据,我们可以选择使用这个库。因为官方文档也介绍,这个存储并不是百分百能存储到磁盘中,所以存一些简单数据是完全没问题的。
此处介绍的是shared_preferences + get_it , 也就是整理了一下关于shared_preferences的最佳实践。
get_it 是一个在 Dart/Flutter 中用于依赖注入的库。依赖注入是一种设计模式,它可以帮助管理应用程序中的对象依赖关系,并提供一种解耦的方式来访问这些对象。
get_it 库的主要目的是提供一个全局的服务定位器(Service Locator)来注册和获取对象实例。通过将对象注册到服务定位器中,可以在应用程序的不同部分中轻松地访问这些对象,而无需显式地创建它们的实例。
1.安装依赖
https://pub.dev/packages/shared_preferences
https://pub.dev/packages/get_it
flutter pub add shared_preferences
dart pub add get_it
2.配置
因为这个肯定是全局使用,所以不可能每个地方都创建一个实例,所以可以考虑封装一个单例类,如果使用get_it依赖注入,其实依赖注入的时候,我们就可以选择注入一个单例,所以这个class类,其实封不封装成单例都不太重要。
/lib/service/shared_preferences_service.dart
import 'package:flutter/material.dart';
import 'package:shared_preferences/shared_preferences.dart';
const String _kUserNameKey = 'counter';
class SharedPreferencesService {
static SharedPreferencesService? _instance;
static late SharedPreferences _preferences;
SharedPreferencesService._();
static Future<SharedPreferencesService> getInstance() async {
_instance ??= SharedPreferencesService._();
_preferences = await SharedPreferences.getInstance();
return _instance!;
}
String get userNameValue => _getData(_kUserNameKey);
set userNameValue(String value) => _saveData(_kUserNameKey, value);
dynamic _getData(String key) {
var value = _preferences.get(key);
debugPrint('Retrieved $key: $value');
return value;
}
void _saveData(String key, dynamic value) {
debugPrint('Saving $key: $value');
if (value is String) {
_preferences.setString(key, value);
} else if (value is int) {
_preferences.setInt(key, value);
} else if (value is double) {
_preferences.setDouble(key, value);
} else if (value is bool) {
_preferences.setBool(key, value);
} else if (value is List<String>) {
_preferences.setStringList(key, value);
}
}
}
/lib/service/locator.dart
import 'package:flutter_application_1/services/shared_preferences_service.dart';
import 'package:get_it/get_it.dart';
final serviceLocator = GetIt.instance;
Future<void> setupServiceLocator() async {
// Register services
final sharedPreferencesService = await SharedPreferencesService.getInstance();
serviceLocator.registerSingleton(sharedPreferencesService);
}
修改main.dart代码,因为使用到了get_it,所以需要等待都注入进去容器过后,我们再开始加载我们的App
final getIt = GetIt.instance;
Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized();
await setupServiceLocator();
runApp(const MyApp());
}
3.使用
final sharedPrefService = serviceLocator<SharedPreferencesService>();
//获取值
sharedPrefService.userNameValue
//更新值
sharedPrefService.userNameValue = 'lisi';
网友评论