Flutter安全存储插件stash_secure_storage的使用
Flutter安全存储插件stash_secure_storage的使用
stash_secure_storage
一个基于stash的存储扩展插件,用于secure_storage
。
概述
这个存储扩展插件为stash
提供了一个基于secure_storage
的存储方式。
开始使用
在你的pubspec.yaml
文件中添加以下依赖(或者创建它),并将x.x.x
替换为stash_secure_storage
的最新版本:
dependencies:
stash_secure_storage: ^x.x.x
运行以下命令以安装依赖项:
flutter pub get
最后,导入库:
import 'package:stash/stash_api.dart';
import 'package:stash_secure_storage/stash_secure_storage.dart';
使用方法
下面的例子展示了如何创建一个带有secure_storage
存储后端的保险库。在这个简单的例子中,对象的序列化和反序列化是由手写的,但更常见的是依靠像json_serializable
这样的库。
示例代码
import 'package:flutter/material.dart';
import 'package:intl/intl.dart';
import 'package:stash/stash_api.dart';
import 'package:stash_secure_storage/stash_secure_storage.dart';
void main() {
runApp(const MyApp());
}
class Counter {
final int value;
final DateTime updateTime;
Counter({required this.value, required this.updateTime});
/// 从json映射创建一个[Counter]
factory Counter.fromJson(Map<String, dynamic> json) => Counter(
value: json['value'] as int,
updateTime: DateTime.parse(json['timestamp'] as String));
/// 创建一个json映射
Map<String, dynamic> toJson() => <String, dynamic>{
'value': value,
'timestamp': updateTime.toIso8601String()
};
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
// 这个小部件是你的应用的根节点。
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
title: 'Stash Secure Storage Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: const SharedPreferencesDemo(),
);
}
}
class SharedPreferencesDemo extends StatefulWidget {
const SharedPreferencesDemo({super.key});
[@override](/user/override)
SharedPreferencesDemoState createState() => SharedPreferencesDemoState();
}
class SharedPreferencesDemoState extends State<SharedPreferencesDemo> {
final Future<Vault<Counter>> _vault = newSecureStorageVaultStore().then(
(store) => store.vault<Counter>(
name: 'vault', fromEncodable: (json) => Counter.fromJson(json)));
late Future<Counter> _counter;
Future<Counter> _getCounter([Vault<Counter>? vault]) {
final v = vault == null ? _vault : Future.value(vault);
return v.then((vault) => vault.get('counter')).then(
(counter) => counter ?? Counter(value: 0, updateTime: DateTime.now()));
}
Future<void> _incrementCounter() async {
final Vault<Counter> vault = await _vault;
final Counter currentCounter = await _getCounter(vault);
setState(() {
final newCounter =
Counter(value: currentCounter.value + 1, updateTime: DateTime.now());
_counter = vault.put('counter', newCounter).then((value) => newCounter);
});
}
[@override](/user/override)
void initState() {
super.initState();
_counter = _getCounter();
}
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('Secure Storage Demo'),
),
body: Center(
child: FutureBuilder<Counter>(
future: _counter,
builder: (BuildContext context, AsyncSnapshot<Counter> snapshot) {
switch (snapshot.connectionState) {
case ConnectionState.none:
case ConnectionState.waiting:
return const CircularProgressIndicator();
case ConnectionState.active:
case ConnectionState.done:
if (snapshot.hasError) {
return Text('Error: ${snapshot.error}');
} else {
final count = snapshot.data?.value ?? 0;
final updateTime = snapshot.data?.updateTime;
final lastPressed = updateTime != null
? ' (last pressed on ${DateFormat('dd-MM-yyyy HH:mm:ss').format(updateTime)})'
: '';
return Text(
'Button tapped $count time${count == 1 ? '' : 's'}.\n\n'
'This should persist across restarts$lastPressed.',
);
}
}
})),
floatingActionButton: FloatingActionButton(
onPressed: _incrementCounter,
tooltip: 'Increment',
child: const Icon(Icons.add),
),
);
}
}
更多关于Flutter安全存储插件stash_secure_storage的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter安全存储插件stash_secure_storage的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
stash_secure_storage
是一个用于 Flutter 的插件,它允许你在设备上安全地存储数据。这个插件基于 stash
库,并且使用了平台提供的安全存储机制(如 Android 的 EncryptedSharedPreferences
和 iOS 的 Keychain
)来保护数据。
以下是如何在 Flutter 项目中使用 stash_secure_storage
插件的步骤:
1. 添加依赖
首先,在你的 pubspec.yaml
文件中添加 stash_secure_storage
插件的依赖:
dependencies:
flutter:
sdk: flutter
stash_secure_storage: ^2.0.0
然后运行 flutter pub get
来安装依赖。
2. 导入包
在你的 Dart 文件中导入 stash_secure_storage
包:
import 'package:stash_secure_storage/stash_secure_storage.dart';
3. 创建并配置存储
你可以使用 SecureStorageVault
来创建一个安全的存储实例:
final vault = await newSecureStorageVault();
4. 存储数据
你可以使用 put
方法来存储数据:
await vault.put('key', 'value');
5. 读取数据
使用 get
方法来读取存储的数据:
String? value = await vault.get('key');
print(value); // 输出: value
6. 删除数据
你可以使用 remove
方法来删除存储的数据:
await vault.remove('key');
7. 检查数据是否存在
使用 containsKey
方法来检查某个键是否存在:
bool exists = await vault.containsKey('key');
print(exists); // 输出: true 或 false
8. 清除所有数据
你可以使用 clear
方法来清除所有存储的数据:
await vault.clear();
9. 使用自定义配置
你还可以通过传递配置参数来定制存储行为,例如设置加密密钥:
final vault = await newSecureStorageVault(encryptionKey: 'your-encryption-key');
示例代码
以下是一个完整的示例,展示了如何使用 stash_secure_storage
插件进行数据的存储、读取、删除和检查:
import 'package:flutter/material.dart';
import 'package:stash_secure_storage/stash_secure_storage.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
// 创建安全的存储实例
final vault = await newSecureStorageVault();
// 存储数据
await vault.put('username', 'john_doe');
// 读取数据
String? username = await vault.get('username');
print('Username: $username'); // 输出: Username: john_doe
// 检查数据是否存在
bool exists = await vault.containsKey('username');
print('Username exists: $exists'); // 输出: Username exists: true
// 删除数据
await vault.remove('username');
// 再次检查数据是否存在
exists = await vault.containsKey('username');
print('Username exists: $exists'); // 输出: Username exists: false
runApp(MyApp());
}
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Stash Secure Storage Example'),
),
body: Center(
child: Text('Check the console for output'),
),
),
);
}
}