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),
),
);
}
}
说明
-
初始化 SharedPreferences:
- 使用
SharedPreferences.getInstance()
获取 SharedPreferences 实例。 - 将实例存储在一个
Future
中,以便在后续操作中使用。
- 使用
-
读取和写入数据:
- 使用
prefs.getInt('key')
读取指定键的值。 - 使用
prefs.setInt('key', value)
写入整数值。
- 使用
-
UI 更新:
- 使用
setState
更新 UI。 - 使用
FutureBuilder
来处理异步操作的结果,并根据状态显示不同的 UI。
- 使用
测试
如果需要在测试中预设初始值,可以使用以下代码:
SharedPreferences.setMockInitialValues({
'counter': 5, // 设置初始值为 5
});
更多关于Flutter本地数据存储插件shared_preferences_hhz的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于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'),
),
],
),
),
);
}
}