Flutter类型化数据存储插件shared_preferences_typed的使用
Flutter类型化数据存储插件shared_preferences_typed的使用
Typed Shared Preferences
这是一个对shared_preferences
进行类型安全包装的库,灵感来源于ts-localstorage
。
为什么使用?
- Dart编译器现在可以防止你在
int
键上写入一个bool
。 - 你可以将所有与
SharedPreferences
相关的配置组织在一个文件中,而不仅仅是字符串键。 - 你不再需要在任何地方调用
SharedPreferences.getInstance()
。
使用方法
- 创建一个
PrefKey
或PrefKeyNullable
,传入一个字符串作为键和一个默认值。当SharedPreferences中不存在该值时,默认值会被返回。 - 对于
PrefKeyNullable
,尽管默认值不是实际使用的地方,但它仍被要求以保证类型安全。
查看test/shared_preferences_typed_test.dart
获取更详细的示例,以下是常用示例:
基本示例(非可空)
/// 描述
const key = PrefKey("some_key", true);
final valueBefore = await key.read(); // -> true (默认值)
await key.write(false); // -> 值现在为false
基本示例(可空)
/// 描述
const key = PrefKeyNullable("some_key", true);
final valueBefore = await key.read(); // -> null
await key.write(false); // -> 值现在为false
使用现有SharedPreferences实例(非可空)
final prefs = await SharedPreferences.getInstance();
/// 描述
const key = PrefKey("some_key", true);
final valueBefore = await key.readSync(prefs); // -> true (默认值)
await key.write(false); // -> 值现在为false
使用现有SharedPreferences实例(可空)
final prefs = await SharedPreferences.getInstance();
/// 描述
const key = PrefKeyNullable("some_key", true);
final valueBefore = await key.readSync(prefs); // -> null
await key.writeSync(false, prefs); // -> 值现在为false
更多关于Flutter类型化数据存储插件shared_preferences_typed的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter类型化数据存储插件shared_preferences_typed的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
shared_preferences_typed
是一个基于 shared_preferences
的 Flutter 插件,它提供了类型化的方式来存储和读取数据。相比于 shared_preferences
,shared_preferences_typed
提供了更直观的 API,并且减少了类型转换的麻烦。
安装
首先,你需要在 pubspec.yaml
文件中添加 shared_preferences_typed
的依赖:
dependencies:
flutter:
sdk: flutter
shared_preferences_typed: ^1.0.0
然后运行 flutter pub get
来安装依赖。
使用
1. 初始化
你可以通过 SharedPreferencesTyped
类来初始化和使用类型化的 SharedPreferences。
import 'package:shared_preferences_typed/shared_preferences_typed.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
// 初始化 SharedPreferencesTyped
final prefs = await SharedPreferencesTyped.getInstance();
runApp(MyApp(prefs: prefs));
}
class MyApp extends StatelessWidget {
final SharedPreferencesTyped prefs;
MyApp({required this.prefs});
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('SharedPreferencesTyped Example'),
),
body: Center(
child: MyHomePage(prefs: prefs),
),
),
);
}
}
2. 存储数据
shared_preferences_typed
提供了类型化的方法来存储数据。你可以存储 int
、double
、bool
、String
、List<String>
等类型的数据。
void saveData(SharedPreferencesTyped prefs) async {
await prefs.setInt('myInt', 42);
await prefs.setDouble('myDouble', 3.14);
await prefs.setBool('myBool', true);
await prefs.setString('myString', 'Hello, World!');
await prefs.setStringList('myStringList', ['one', 'two', 'three']);
}
3. 读取数据
你可以使用类型化的方法来读取数据。如果数据不存在,返回的将是 null
。
void readData(SharedPreferencesTyped prefs) {
int? myInt = prefs.getInt('myInt');
double? myDouble = prefs.getDouble('myDouble');
bool? myBool = prefs.getBool('myBool');
String? myString = prefs.getString('myString');
List<String>? myStringList = prefs.getStringList('myStringList');
print('myInt: $myInt');
print('myDouble: $myDouble');
print('myBool: $myBool');
print('myString: $myString');
print('myStringList: $myStringList');
}
4. 删除数据
你可以使用 remove
方法来删除指定的键值对。
void removeData(SharedPreferencesTyped prefs) async {
await prefs.remove('myInt');
}
5. 清除所有数据
你可以使用 clear
方法来清除所有的键值对。
void clearData(SharedPreferencesTyped prefs) async {
await prefs.clear();
}
完整示例
以下是一个完整的示例,展示了如何使用 shared_preferences_typed
来存储、读取和删除数据。
import 'package:flutter/material.dart';
import 'package:shared_preferences_typed/shared_preferences_typed.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
final prefs = await SharedPreferencesTyped.getInstance();
runApp(MyApp(prefs: prefs));
}
class MyApp extends StatelessWidget {
final SharedPreferencesTyped prefs;
MyApp({required this.prefs});
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('SharedPreferencesTyped Example'),
),
body: Center(
child: MyHomePage(prefs: prefs),
),
),
);
}
}
class MyHomePage extends StatelessWidget {
final SharedPreferencesTyped prefs;
MyHomePage({required this.prefs});
[@override](/user/override)
Widget build(BuildContext context) {
return Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
ElevatedButton(
onPressed: () => saveData(prefs),
child: Text('Save Data'),
),
ElevatedButton(
onPressed: () => readData(prefs),
child: Text('Read Data'),
),
ElevatedButton(
onPressed: () => removeData(prefs),
child: Text('Remove Data'),
),
ElevatedButton(
onPressed: () => clearData(prefs),
child: Text('Clear Data'),
),
],
);
}
void saveData(SharedPreferencesTyped prefs) async {
await prefs.setInt('myInt', 42);
await prefs.setDouble('myDouble', 3.14);
await prefs.setBool('myBool', true);
await prefs.setString('myString', 'Hello, World!');
await prefs.setStringList('myStringList', ['one', 'two', 'three']);
}
void readData(SharedPreferencesTyped prefs) {
int? myInt = prefs.getInt('myInt');
double? myDouble = prefs.getDouble('myDouble');
bool? myBool = prefs.getBool('myBool');
String? myString = prefs.getString('myString');
List<String>? myStringList = prefs.getStringList('myStringList');
print('myInt: $myInt');
print('myDouble: $myDouble');
print('myBool: $myBool');
print('myString: $myString');
print('myStringList: $myStringList');
}
void removeData(SharedPreferencesTyped prefs) async {
await prefs.remove('myInt');
}
void clearData(SharedPreferencesTyped prefs) async {
await prefs.clear();
}
}