Flutter本地存储管理插件storage_wrapper的使用
Flutter本地存储管理插件storage_wrapper的使用
storage_wrapper
是一个用于简化 shared_preferences
和 flutter_secure_storage
使用的封装插件。它提供了统一的API接口,并且方便进行测试时的数据模拟。
如何工作
调用 StorageWrapper.common()
构造函数将返回一个实例,该实例使用 shared_preferences
插件保存数据到 SharedPreferences
中。
调用 StorageWrapper.secure()
构造函数将返回一个实例,该实例使用 flutter_secure_storage
插件安全地保存数据。
一旦获得实例,您可以使用以下方法:
write
read
delete
containsKey
getAll
deleteAll
这些方法都接受以下参数:
key
: 用于标识值的键(字符串)iOptions
: 指定iOS安全存储访问选项的IOSOptions
对象aOptions
: 指定Android安全存储访问选项的AndroidOptions
对象
虽然 AndroidOptions
看起来没有被 flutter_secure_storage
使用,但您可以在此了解更多关于 IOSOptions
的信息。
注意: 在版本 1.3.0
及以上版本中,您可以通过 StorageWrapper.secure()
构造函数传递 iOptions
和 aOptions
参数,以避免在每次方法调用时重复传递相同的选项。然而,单个方法中的选项会覆盖实例中的选项。
测试时的数据模拟
您可以调用 enableMock
方法并传递一个可选的 Map<String, String>
作为初始值。如果未传递任何内容,存储器将保持模拟模式(isMocking
将为真),但没有任何初始数据,默认为空的 Map<String, String>
。
模拟的数据不会持久化,每个 StorageWrapper
实例都不会有相同的数据:
final mockWrapper = StorageWrapper.secure();
mockWrapper.enableMock();
final mockWrapper2 = StorageWrapper.secure();
mockWrapper2.enableMock({'foo': 'bar'});
final anotherWrapper = StorageWrapper.secure();
// mockWrapper 和 mockWrapper2 将有不同的数据源
// anotherWrapper 不是模拟的
后续调用 enableMock
不会产生任何效果。您可以通过访问 mockEntries
属性来操纵数据。
更多文档
该包包装了:
Web支持
该包也适用于Web平台。
当使用Flutter Web时,CommonStorage
用于 common
和 secure
模式。这可能是因为 pub.dev
未识别与Web的兼容性,因为 flutter_secure_storage
不支持。
完整示例Demo
下面是完整的示例代码,展示了如何使用 storage_wrapper
插件:
import 'dart:convert';
import 'dart:math';
import 'package:flutter/material.dart';
import 'package:storage_wrapper/storage_wrapper.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
home: MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
[@override](/user/override)
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
String commonValue;
String secureValue;
final commonStorage = StorageWrapper.common();
final secureStorage = StorageWrapper.secure();
String allCommon;
String allSecure;
void writeRandom() async {
final int random = Random().nextInt(100);
await commonStorage.write(key: 'common', value: random.toString());
await secureStorage.write(key: 'secure', value: random.toString());
}
void readValues() async {
commonValue = await commonStorage.read(key: 'common');
secureValue = await secureStorage.read(key: 'secure');
setState(() {});
}
void clearAll() async {
await commonStorage.deleteAll();
await secureStorage.deleteAll();
readValues();
}
void getAll() async {
allCommon = jsonEncode(await commonStorage.getAll());
allSecure = jsonEncode(await secureStorage.getAll());
setState(() {});
}
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Storage Wrapper example'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(
'Secure value: $secureValue',
),
Text(
'Common value: $commonValue',
),
Text('All commons: $allCommon'),
Text('All secure: $allSecure'),
ElevatedButton(onPressed: writeRandom, child: Text('Write random')),
ElevatedButton(onPressed: readValues, child: Text('Read values')),
ElevatedButton(onPressed: clearAll, child: Text('Clear values')),
ElevatedButton(onPressed: getAll, child: Text('Get all values')),
],
),
),
// 这个尾随逗号使自动格式化更美观
);
}
}
更多关于Flutter本地存储管理插件storage_wrapper的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter本地存储管理插件storage_wrapper的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是一个关于如何使用Flutter本地存储管理插件storage_wrapper
的代码示例。这个插件通常用于简化本地存储(如SharedPreferences、SQLite等)的操作。
首先,确保你已经在pubspec.yaml
文件中添加了storage_wrapper
依赖:
dependencies:
flutter:
sdk: flutter
storage_wrapper: ^最新版本号 # 请替换为实际的最新版本号
然后,运行flutter pub get
来获取依赖。
接下来,你可以在Flutter项目中使用storage_wrapper
进行本地存储管理。以下是一个完整的示例,包括初始化插件、存储和读取数据:
import 'package:flutter/material.dart';
import 'package:storage_wrapper/storage_wrapper.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Storage Wrapper Example',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: StorageWrapperExample(),
);
}
}
class StorageWrapperExample extends StatefulWidget {
@override
_StorageWrapperExampleState createState() => _StorageWrapperExampleState();
}
class _StorageWrapperExampleState extends State<StorageWrapperExample> {
late StorageWrapper _storage;
@override
void initState() {
super.initState();
// 初始化StorageWrapper
_storage = StorageWrapper();
_storage.init().then((_) {
// 可以在这里执行一些初始化后的操作
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Storage Wrapper Example'),
),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
ElevatedButton(
onPressed: () async {
// 存储数据
await _storage.setString('key_string', 'Hello, World!');
await _storage.setInt('key_int', 42);
await _storage.setDouble('key_double', 3.14);
await _storage.setBool('key_bool', true);
// 读取数据
String? stringValue = await _storage.getString('key_string');
int? intValue = await _storage.getInt('key_int');
double? doubleValue = await _storage.getDouble('key_double');
bool? boolValue = await _storage.getBool('key_bool');
// 显示读取到的数据
showDialog(
context: context,
builder: (BuildContext context) {
return AlertDialog(
title: Text('Stored Data'),
content: Text(
'String: $stringValue\n'
'Int: $intValue\n'
'Double: $doubleValue\n'
'Bool: $boolValue',
),
actions: <Widget>[
TextButton(
onPressed: () {
Navigator.of(context).pop();
},
child: Text('OK'),
),
],
);
},
);
},
child: Text('Store and Retrieve Data'),
),
],
),
),
);
}
}
在这个示例中,我们:
- 在
pubspec.yaml
文件中添加了storage_wrapper
依赖。 - 创建了一个Flutter应用,并在其中使用
StorageWrapper
进行本地存储管理。 - 在
initState
方法中初始化了StorageWrapper
。 - 创建了一个按钮,当点击按钮时,将数据存储到本地,并立即读取这些数据,然后在对话框中显示。
请注意,storage_wrapper
插件的实际API可能会根据版本有所不同,因此请查阅最新的官方文档以获取最准确的信息。