Flutter安全存储插件flutter_secure_storage_darwin的使用
Flutter 安全存储插件 flutter_secure_storage_darwin 的使用
flutter_secure_storage_darwin
这是为 iOS 和 macOS 提供的 flutter_secure_storage
的平台特定实现。
特性
- 使用 Keychain API 进行安全存储。
- 充分集成到 iOS 和 macOS 的安全特性中。
安装
在你的 pubspec.yaml
文件中添加依赖,并运行 flutter pub get
。
dependencies:
flutter_secure_storage: ^8.0.0
运行命令:
flutter pub get
配置
你还需要将 Keychain Sharing 作为功能添加到你的 iOS 或 macOS 应用程序。为此,请在以下两个文件中添加以下内容:
(ios/macos)/Runner/DebugProfile.entitlements
(ios/macos)/Runner/Release.entitlements
<key>keychain-access-groups</key>
<array/>
如果你的应用程序已配置为使用 App Groups,则需要将 App Group 的名称添加到上述 keychain-access-groups
参数中。否则,值将看似成功写入但实际上从未被写入。例如,如果您的应用程序有一个名为 “aoeu” 的 App Group,则上述值应更改为:
<key>keychain-access-groups</key>
<array>
<string>$(AppIdentifierPrefix)aoeu</string>
</array>
如果你通过 XCode 配置此值,则在 Keychain Sharing 部分设置的字符串应为 “aoeu”,XCode 在保存配置时会附加 $(AppIdentifierPrefix)
。
使用
要了解通用使用说明,请参阅 flutter_secure_storage 的主文档。
示例代码
以下是一个简单的示例,展示如何使用 flutter_secure_storage_darwin
插件进行安全存储。
首先,在你的 Dart 文件中导入插件:
import 'package:flutter_secure_storage/flutter_secure_storage.dart';
然后创建一个实例:
final storage = FlutterSecureStorage();
接下来,你可以使用 write
方法来存储数据:
// 写入数据
await storage.write(key: 'username', value: 'JohnDoe');
使用 read
方法来读取数据:
// 读取数据
String? username = await storage.read(key: 'username');
print('Username: $username');
使用 delete
方法来删除数据:
// 删除数据
await storage.delete(key: 'username');
使用 clear
方法来清除所有数据:
// 清除所有数据
await storage.deleteAll();
更多关于Flutter安全存储插件flutter_secure_storage_darwin的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter安全存储插件flutter_secure_storage_darwin的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是如何在Flutter项目中使用flutter_secure_storage_darwin
插件进行安全存储的示例代码。请注意,flutter_secure_storage_darwin
是flutter_secure_storage
插件的一个特定于macOS和iOS的实现。因此,你通常会使用flutter_secure_storage
插件,该插件会自动在不同的平台上选择正确的实现。
首先,确保你已经在pubspec.yaml
文件中添加了flutter_secure_storage
依赖:
dependencies:
flutter:
sdk: flutter
flutter_secure_storage: ^5.0.2 # 请检查最新版本号
然后,运行flutter pub get
来获取依赖。
接下来,在你的Flutter项目中,你可以按照以下步骤使用flutter_secure_storage
进行安全存储。以下是一个完整的示例,展示如何存储和检索键值对:
import 'package:flutter/material.dart';
import 'package:flutter_secure_storage/flutter_secure_storage.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Secure Storage Example',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: SecureStorageExample(),
);
}
}
class SecureStorageExample extends StatefulWidget {
@override
_SecureStorageExampleState createState() => _SecureStorageExampleState();
}
class _SecureStorageExampleState extends State<SecureStorageExample> {
final FlutterSecureStorage storage = FlutterSecureStorage();
String? retrievedValue;
@override
void initState() {
super.initState();
// 在初始化时尝试从存储中检索值
retrieveValue();
}
Future<void> writeValue() async {
final String key = 'my_secure_key';
final String value = 'my_secure_value';
await storage.write(key: key, value: value);
print('Value written to secure storage: $value');
// 更新UI显示存储的值(在这个例子中,我们不需要立即更新,因为我们稍后检索它)
}
Future<void> retrieveValue() async {
final String key = 'my_secure_key';
final String? value = await storage.read(key: key);
setState(() {
retrievedValue = value;
});
print('Value retrieved from secure storage: $value');
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Flutter Secure Storage Example'),
),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
ElevatedButton(
onPressed: writeValue,
child: Text('Write Value'),
),
SizedBox(height: 20),
Text(
'Retrieved Value: $retrievedValue',
style: TextStyle(fontSize: 18),
),
],
),
),
);
}
}
在这个示例中:
- 我们导入了
flutter_secure_storage
包。 - 创建了一个
FlutterSecureStorage
实例。 - 在
initState
方法中,我们尝试从存储中检索值。 - 提供了
writeValue
和retrieveValue
两个方法,分别用于写入和检索安全存储中的值。 - 在UI中,有两个按钮,一个用于写入值,另一个按钮的值会在UI中显示(一旦值被检索)。
这个示例展示了如何在Flutter中使用flutter_secure_storage
进行基本的安全存储操作。对于macOS和iOS,flutter_secure_storage
会自动使用flutter_secure_storage_darwin
实现,因此你无需担心平台特定的实现细节。