Flutter本地数据存储插件shared_preferences_hhz的使用

Shared preferences plugin

该插件封装了平台特定的持久化存储,用于简单的数据存储(iOS 和 macOS 使用 NSUserDefaults,Android 使用 SharedPreferences 等)。数据可能异步地持久化到磁盘,因此不能保证写入后立即保存到磁盘,所以此插件不能用于存储关键数据。


使用方法

要使用此插件,只需在 pubspec.yaml 文件中添加依赖项 <code>shared_preferences_hhz</code>


示例代码

以下是一个完整的示例,展示如何使用 shared_preferences_hhz 插件来存储和读取计数器值。

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return const MaterialApp(
      title: 'SharedPreferences Demo',
      home: SharedPreferencesDemo(),
    );
  }
}

class SharedPreferencesDemo extends StatefulWidget {
  const SharedPreferencesDemo({Key? key}) : super(key: key);

  @override
  SharedPreferencesDemoState createState() => SharedPreferencesDemoState();
}

class SharedPreferencesDemoState extends State<SharedPreferencesDemo> {
  // 初始化 SharedPreferences 实例
  final Future<SharedPreferences> _prefs = SharedPreferences.getInstance();
  late Future<int> _counter;

  // 增加计数器的方法
  Future<void> _incrementCounter() async {
    final SharedPreferences prefs = await _prefs;
    final int counter = (prefs.getInt('counter') ?? 0) + 1;

    setState(() {
      _counter = prefs.setInt('counter', counter).then((bool success) {
        return counter;
      });
    });
  }

  // 在初始化时加载计数器值
  @override
  void initState() {
    super.initState();
    _counter = _prefs.then((SharedPreferences prefs) {
      return prefs.getInt('counter') ?? 0;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('SharedPreferences Demo'),
      ),
      body: Center(
        child: FutureBuilder<int>(
          future: _counter,
          builder: (BuildContext context, AsyncSnapshot<int> snapshot) {
            switch (snapshot.connectionState) {
              case ConnectionState.waiting:
                return const CircularProgressIndicator(); // 加载中
              default:
                if (snapshot.hasError) {
                  return Text('Error: ${snapshot.error}');
                } else {
                  return Text(
                    'Button tapped ${snapshot.data} time${snapshot.data == 1 ? '' : 's'}.\n\n'
                    'This should persist across restarts.',
                  );
                }
            }
          },
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _incrementCounter,
        tooltip: 'Increment',
        child: const Icon(Icons.add),
      ),
    );
  }
}

说明

  1. 初始化 SharedPreferences

    • 使用 SharedPreferences.getInstance() 获取 SharedPreferences 实例。
    • 将实例存储在一个 Future 中,以便在后续操作中使用。
  2. 读取和写入数据

    • 使用 prefs.getInt('key') 读取指定键的值。
    • 使用 prefs.setInt('key', value) 写入整数值。
  3. UI 更新

    • 使用 setState 更新 UI。
    • 使用 FutureBuilder 来处理异步操作的结果,并根据状态显示不同的 UI。

测试

如果需要在测试中预设初始值,可以使用以下代码:

SharedPreferences.setMockInitialValues({
  'counter': 5, // 设置初始值为 5
});

更多关于Flutter本地数据存储插件shared_preferences_hhz的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter本地数据存储插件shared_preferences_hhz的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


shared_preferences_hhz 是一个基于 shared_preferences 的 Flutter 插件,用于在本地存储简单的键值对数据。它允许你在应用中保存和读取一些轻量级的数据,比如用户设置、应用配置等。

以下是 shared_preferences_hhz 的使用步骤:

1. 添加依赖

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

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

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

2. 导入包

在你的 Dart 文件中导入 shared_preferences_hhz 包:

import 'package:shared_preferences_hhz/shared_preferences_hhz.dart';

3. 保存数据

你可以使用 SharedPreferencesHHZ 类来保存数据。以下是一些常见的保存操作:

// 保存字符串
await SharedPreferencesHHZ.setString('key_string', 'Hello, World!');

// 保存整数
await SharedPreferencesHHZ.setInt('key_int', 42);

// 保存布尔值
await SharedPreferencesHHZ.setBool('key_bool', true);

// 保存浮点数
await SharedPreferencesHHZ.setDouble('key_double', 3.14);

// 保存字符串列表
await SharedPreferencesHHZ.setStringList('key_list', ['item1', 'item2']);

4. 读取数据

你可以使用 SharedPreferencesHHZ 类来读取之前保存的数据:

// 读取字符串
String? stringValue = await SharedPreferencesHHZ.getString('key_string');

// 读取整数
int? intValue = await SharedPreferencesHHZ.getInt('key_int');

// 读取布尔值
bool? boolValue = await SharedPreferencesHHZ.getBool('key_bool');

// 读取浮点数
double? doubleValue = await SharedPreferencesHHZ.getDouble('key_double');

// 读取字符串列表
List<String>? listValue = await SharedPreferencesHHZ.getStringList('key_list');

5. 删除数据

你可以使用 SharedPreferencesHHZ 类来删除之前保存的数据:

// 删除指定键的数据
await SharedPreferencesHHZ.remove('key_string');

// 清除所有数据
await SharedPreferencesHHZ.clear();

6. 检查键是否存在

你可以检查某个键是否存在:

bool containsKey = await SharedPreferencesHHZ.containsKey('key_string');

7. 获取所有键

你可以获取所有保存的键:

Set<String> keys = await SharedPreferencesHHZ.getKeys();

8. 注意事项

  • shared_preferences_hhz 是基于 shared_preferences 的封装,因此它的使用方式和 shared_preferences 非常相似。
  • 数据是异步保存和读取的,因此你需要使用 await 来等待操作完成。
  • 数据是持久化的,即使应用关闭或重启,数据仍然会保留。

9. 示例代码

以下是一个完整的示例代码,展示了如何使用 shared_preferences_hhz 来保存和读取数据:

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

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: HomeScreen(),
    );
  }
}

class HomeScreen extends StatefulWidget {
  [@override](/user/override)
  _HomeScreenState createState() => _HomeScreenState();
}

class _HomeScreenState extends State<HomeScreen> {
  String? _savedValue;

  [@override](/user/override)
  void initState() {
    super.initState();
    _loadSavedValue();
  }

  Future<void> _loadSavedValue() async {
    String? value = await SharedPreferencesHHZ.getString('key_string');
    setState(() {
      _savedValue = value;
    });
  }

  Future<void> _saveValue() async {
    await SharedPreferencesHHZ.setString('key_string', 'Hello, World!');
    _loadSavedValue();
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('SharedPreferencesHHZ Example'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            Text('Saved Value: $_savedValue'),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: _saveValue,
              child: Text('Save Value'),
            ),
          ],
        ),
      ),
    );
  }
}
回到顶部