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.initHive.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 相同,但还需要提供 fromJsontoJson 函数来序列化和反序列化值:

final myObjectSetting = SerializableSettingsValue<MyObject>(
  name: 'myObjectSetting',
  fromJson: (json) => MyObject.fromJson(json),
  toJson: (object) => object.toJson(),
);
DefaultSettingsValue

DefaultSettingsValueSettingsValue 的子类,如果用户未指定值,则提供一个默认值。此类中存储的值保证非空。

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

1 回复

更多关于Flutter系统设置管理插件clever_settings的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在Flutter中,clever_settings 是一个用于管理应用程序设置的插件。它提供了一种简单的方式来保存和获取应用程序的配置数据。clever_settings 支持多种存储后端,包括本地存储、云端存储等。

安装 clever_settings

首先,你需要在 pubspec.yaml 文件中添加 clever_settings 依赖:

dependencies:
  flutter:
    sdk: flutter
  clever_settings: ^1.0.0  # 请使用最新版本

然后运行 flutter pub get 来安装依赖。

基本用法

1. 初始化 clever_settings

在使用 clever_settings 之前,你需要初始化它。通常,你可以在 main.dart 文件中进行初始化:

import 'package:clever_settings/clever_settings.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  
  // 初始化 clever_settings
  await Settings.init();
  
  runApp(MyApp());
}

2. 保存设置

你可以使用 Settings.set 方法来保存设置:

Settings.set('theme', 'dark');
Settings.set('notifications', true);
Settings.set('username', 'JohnDoe');

3. 获取设置

你可以使用 Settings.get 方法来获取设置:

String theme = Settings.get('theme', defaultValue: 'light');
bool notifications = Settings.get('notifications', defaultValue: false);
String username = Settings.get('username', defaultValue: 'Guest');

4. 监听设置变化

你可以使用 Settings.listen 方法来监听设置的变化:

Settings.listen('theme', (value) {
  print('Theme changed to: $value');
});

5. 删除设置

你可以使用 Settings.remove 方法来删除设置:

Settings.remove('theme');

高级用法

1. 使用不同的存储后端

clever_settings 支持多种存储后端。你可以通过 Settings.init 方法指定使用哪种存储后端:

await Settings.init(storage: LocalStorage());  // 使用本地存储
// 或者
await Settings.init(storage: CloudStorage());  // 使用云端存储

2. 使用 SettingsModel

clever_settings 还提供了一个 SettingsModel,它可以与 ProviderRiverpod 等状态管理工具结合使用,以便在应用程序中更方便地管理设置。

class MySettingsModel extends SettingsModel {
  String get theme => get('theme', defaultValue: 'light');
  set theme(String value) => set('theme', value);

  bool get notifications => get('notifications', defaultValue: false);
  set notifications(bool value) => set('notifications', value);
}

然后你可以在应用程序中使用这个模型:

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return ChangeNotifierProvider(
      create: (_) => MySettingsModel(),
      child: MaterialApp(
        home: HomeScreen(),
      ),
    );
  }
}

HomeScreen 中,你可以通过 Provider 来访问和修改设置:

class HomeScreen extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    final settings = Provider.of<MySettingsModel>(context);

    return Scaffold(
      appBar: AppBar(
        title: Text('Settings Demo'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            Text('Theme: ${settings.theme}'),
            ElevatedButton(
              onPressed: () {
                settings.theme = settings.theme == 'light' ? 'dark' : 'light';
              },
              child: Text('Toggle Theme'),
            ),
          ],
        ),
      ),
    );
  }
}
回到顶部