Flutter设置管理插件sp_settings的使用

Flutter设置管理插件sp_settings的使用

sp_settings 是一个与 SharedPreferences 集成的 Flutter 设置屏幕包。

特性

  • 仅外部依赖:唯一的外部依赖是 shared_preferences
  • 一致的设计模式
  • 直接将值更改存储到 SharedPreferences

开始使用

在你的项目中添加 sp_settings

flutter pub add sp_settings

使用示例

以下是一个基本的设置屏幕层次结构示例。

基本设置字段

import 'package:sp_settings/fields/settings_field.dart';
import 'package:sp_settings/fields/settings_list.dart';
import 'package:sp_settings/fields/switch_settings_field.dart';

SettingsList(
    fields: [
        SwitchSettingsField(
            settingsField: SettingsField(
                title: '示例',
                description: '这是一个示例。',
                icon: Icons.add,
            ),
            prefKey: 'example',
        ),
    ]
);

分类设置列表

设置列表可以被 SettingsCategory 包围,允许进行清晰的分隔:

import 'package:sp_settings/settings_category.dart';

SettingsCategory(
  title: '分类标题',
  settingsList: <SettingsList>,
);

完整示例

以下是一个完整的示例代码,展示了如何使用 sp_settings 创建一个包含多种设置类型的设置屏幕。

import 'package:flutter/material.dart';
import 'package:sp_settings/sp_settings.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: '设置表单',
      theme: ThemeData(primarySwatch: Colors.blue),
      home: const MyHomePage(title: '设置表单演示'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({Key? key, required this.title}) : super(key: key);

  final String title;

  [@override](/user/override)
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: ListView(
        children: [
          const SettingsCategory(
              title: '常规',
              settingsList: SettingsList([
                SwitchSettingsField(
                  SettingsField(
                    title: '示例',
                    description: '这是一个示例。',
                    icon: Icons.add,
                  ),
                  prefKey: 'example1',
                ),
              ])),
          SettingsCategory(
            title: '其他',
            settingsList: SettingsList([
              const SwitchSettingsField(
                SettingsField(
                  title: '长文本开关',
                  description: 
                      '这是一个示例。描述非常长,达到三行。',
                  icon: Icons.folder,
                ),
                prefKey: 'example2',
              ),
              ButtonSettingsField(
                const SettingsField(
                  title: '可点击',
                  description: '这里有一个可以点击的按钮设置。',
                  icon: Icons.person_off,
                ),
                onTap: () {},
              ),
              const PopupSettingsField(
                SettingsField(
                  title: '弹出菜单',
                  description: '这里有一个弹出菜单!请选择其中一个选项。',
                  icon: Icons.drive_eta,
                ),
                prefKey: 'popup',
                items: {
                  '无': 'null',
                  '苹果': 'a',
                  '香蕉': 'b',
                  '胡萝卜': 'c',
                  '柠檬': 'l',
                  '草莓': 's',
                },
                initialValue: 'null',
              ),
              const CheckboxSettingsField(
                SettingsField(
                  title: '复选框',
                  description: '这里有两个选项可以选择。',
                  icon: Icons.check_box_outline_blank,
                ),
                prefKey: 'checkbox',
              ),
            ]),
          )
        ],
      ),
    );
  }
}

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

1 回复

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


sp_settings 是一个用于 Flutter 的插件,它简化了应用程序的设置管理。通过 sp_settings,你可以轻松地保存和读取用户的偏好设置,如主题、语言、通知偏好等。它基于 SharedPreferences,但在其基础上提供了更简洁的 API 和更多的功能。

安装 sp_settings

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

dependencies:
  flutter:
    sdk: flutter
  sp_settings: ^1.0.0  # 请检查最新版本

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

基本用法

  1. 初始化 sp_settings

    在使用 sp_settings 之前,你需要在应用程序启动时初始化它。通常,你可以在 main.dart 文件中的 main() 函数中进行初始化:

    import 'package:flutter/material.dart';
    import 'package:sp_settings/sp_settings.dart';
    
    void main() async {
      WidgetsFlutterBinding.ensureInitialized();
      await SPSettings.init(); // 初始化 sp_settings
      runApp(MyApp());
    }
    
  2. 保存设置

    使用 SPSettings 类来保存用户的设置。你可以保存各种类型的数据,如 Stringintdoublebool 等。

    SPSettings.setString('username', 'JohnDoe');
    SPSettings.setInt('age', 30);
    SPSettings.setBool('isDarkMode', true);
    
  3. 读取设置

    你可以使用 SPSettings 类来读取之前保存的设置:

    String username = SPSettings.getString('username', defaultValue: 'Guest');
    int age = SPSettings.getInt('age', defaultValue: 18);
    bool isDarkMode = SPSettings.getBool('isDarkMode', defaultValue: false);
    
  4. 删除设置

    如果你想删除某个设置,可以使用 remove 方法:

    SPSettings.remove('username');
    
  5. 监听设置变化

    sp_settings 还提供了监听设置变化的功能。你可以通过 SPSettingsListener 来监听特定设置的变化:

    SPSettingsListener(
      key: 'isDarkMode',
      builder: (context, value) {
        return Switch(
          value: value ?? false,
          onChanged: (newValue) {
            SPSettings.setBool('isDarkMode', newValue);
          },
        );
      },
    );
    

示例应用

以下是一个简单的示例应用,展示了如何使用 sp_settings 来管理用户设置:

import 'package:flutter/material.dart';
import 'package:sp_settings/sp_settings.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await SPSettings.init();
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: SettingsPage(),
    );
  }
}

class SettingsPage extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Settings'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            SPSettingsListener(
              key: 'username',
              builder: (context, value) {
                return Text('Username: ${value ?? 'Guest'}');
              },
            ),
            ElevatedButton(
              onPressed: () {
                SPSettings.setString('username', 'JohnDoe');
              },
              child: Text('Set Username'),
            ),
            SPSettingsListener(
              key: 'isDarkMode',
              builder: (context, value) {
                return Switch(
                  value: value ?? false,
                  onChanged: (newValue) {
                    SPSettings.setBool('isDarkMode', newValue);
                  },
                );
              },
            ),
          ],
        ),
      ),
    );
  }
}
回到顶部