Flutter系统设置管理插件clever_settings的使用
Flutter系统设置管理插件clever_settings的使用
Clever Settings
Clever Settings 是一个 Dart 包,用于轻松管理和存储应用程序的设置。它使用 Hive(一种轻量级且快速的键值存储)来持久化设置数据。
安装 💻
在 pubspec.yaml
文件中添加以下依赖项:
dependencies:
clever_settings: ^[版本号]
# 当使用 Flutter 时(可选)
clever_settings_flutter: ^[版本号]
安装依赖项:
dart pub get
初始化 🚀
在使用 Clever Settings 之前,您需要先初始化 Hive。调用 Hive.init
或 Hive.initFlutter
方法。在应用启动时调用打开函数:
// 在此之前初始化 Hive
await CleverSettings.open();
或者,当使用 clever_settings_flutter
时,您可以直接调用:
await CleverSettingsFlutter.init();
使用 💡
Clever Settings 提供了多个类来管理设置。SettingsValue
用于存储基本类型(如布尔值、整数、字符串等),而 SerializableSettingsValue
用于存储可以序列化为 JSON 的复杂对象。
示例
class Settings {
const Settings._();
/// 使用布尔值的设置值
static const darkMode =
SettingsValue<bool>(name: 'darkMode', defaultValue: false);
/// 包含复杂对象的设置
static final user = SerializableSettingsValue<User>(
name: 'user',
fromJson: User.fromJson,
toJson: (value) => value.toJson(),
defaultValue: const User(name: 'John Pork', age: 27),
);
}
void main() async {
// 初始化 Hive 存储数据。在 Flutter 中使用 Hive.initFlutter
final path = Directory.current.path;
Hive.init(path);
await CleverSettings.open();
print('是否开启了暗模式?${Settings.darkMode.value}');
// 这个值会自动保存到磁盘。
Settings.darkMode.value = true;
print('用户是 ${Settings.user.value}');
// 这个值也会跨重启保存。
Settings.user.value = const User(name: 'John Doe', age: 22);
}
/// 可以转换为 JSON 的复杂对象。
///
/// 使用设置上的 `.watch` 方法时应具有相等性。
class User {
const User({
required this.name,
required this.age,
});
factory User.fromJson(Map<String, dynamic> map) {
return User(
name: map['name'] as String? ?? '',
age: map['age'] as int? ?? 0,
);
}
final String name;
final int age;
Map<String, dynamic> toJson() {
return {
'name': name,
'age': age,
};
}
@override
bool operator ==(Object other) {
if (identical(this, other)) return true;
return other is User && other.name == name && other.age == age;
}
@override
int get hashCode => name.hashCode ^ age.hashCode;
}
SettingsValue
要创建一个新的 SettingsValue
,只需提供设置的唯一名称和一个可选的默认值:
final mySetting = SettingsValue<bool>(name: 'mySetting', defaultValue: true);
然后可以获取或设置该设置的值。这会自动将设置存储到存储中:
final currentValue = mySetting.value;
mySetting.value = false;
还可以通过调用 watch
函数来监听设置的变化:
final stream = mySetting.watch();
stream.listen((newValue) {
// 处理新值
});
SerializableSettingsValue
SerializableSettingsValue
的工作方式与 SettingsValue
相同,但还需要提供 fromJson
和 toJson
函数来序列化和反序列化值:
final myObjectSetting = SerializableSettingsValue<MyObject>(
name: 'myObjectSetting',
fromJson: (json) => MyObject.fromJson(json),
toJson: (object) => object.toJson(),
);
DefaultSettingsValue
DefaultSettingsValue
是 SettingsValue
的子类,如果用户未指定值,则提供一个默认值。此类中存储的值保证非空。
final setting = SettingsValue<int>(name: 'setting', defaultValue: 34);
final defaultSetting = DefaultSettingsValue<int>(name: 'default', defaultValue: 16);
// 这个值的类型是 int? 即使有默认值。
final value = setting.value;
// 这个值的类型是 int 并且是非空的。
final otherValue = defaultSetting.value;
更多关于Flutter系统设置管理插件clever_settings的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html