我正在使用这个包来存储Flutter移动的应用程序中的一些登录凭据。我使用的版本是v5.0.2。我不确定我是否以正确的方式存储或阅读值。有人知道如何检查吗?或者我遗漏了什么或做错了什么。
import 'package:flutter_secure_storage/flutter_secure_storage.dart';
class SecureStorage {
final _storage = const FlutterSecureStorage();
Future<Map<String, String>> _readAll() async {
return await _storage.readAll(
iOptions: _getIOSOptions(), aOptions: _getAndroidOptions());
}
void deleteAll() async {
await _storage.deleteAll(
iOptions: _getIOSOptions(), aOptions: _getAndroidOptions());
_readAll();
}
Future<String?> readSecureData(String key) async {
return await _storage.read(key: key);
}
Future<void> deleteSecureData(String key) async {
return await _storage.delete(key: key);
}
void writeSecureData(String key, String value) async {
await _storage.write(
key: key,
value: value,
iOptions: _getIOSOptions(),
aOptions: _getAndroidOptions(),
);
}
IOSOptions _getIOSOptions() => const IOSOptions(
accessibility: IOSAccessibility.first_unlock,
);
AndroidOptions _getAndroidOptions() => const AndroidOptions(
encryptedSharedPreferences: true,
);
}
final secureStorage = SecureStorage();
这就是我调用值的方法
@override
void initState() {
Future.delayed(Duration.zero, () async {
final username = await secureStorage.readSecureData('username') ?? '';
final password = await secureStorage.readSecureData('password') ?? '';
setState(() {
_icNoController.text = username;
_passwordController.text = password;
});
});
super.initState();
}
这是我如何存储值的
await secureStorage.writeSecureData('username', username);
await secureStorage.writeSecureData('password', password);
3条答案
按热度按时间w6mmgewl1#
我认为阅读/写问题的原因可能是与使用
aOptions
或iOptions
不一致。例如,您将
aOptions
与readAll()
、deleateAll()
和write()
方法一起使用,而不将其与read()
、delete()
一起使用。因此,在将数据写入安全存储时在
aOptions
中使用encryptedSharedPreferences: true,
时,您指定此数据必须写入EncryptedSharedPreferences
。然而,当您读取数据而不提供aOptions再次,你尝试从默认的安全存储读取,这不是加密共享首选项,你已经存储了数据.示例与
aOptions
是为Android,我还没有测试这个库在iOS上.0ve6wy6x2#
我已经为你清理了课堂:
当然,我用的是
Logger
包而不是print
,我也不明白为什么你在deleteAll
之后做_readAll
。答复
问:“我不确定是否以正确的方式存储或阅读值。”
存储和读取值的正确方法是将它们 Package 在
try-catch
块中,如上面的代码所示。问:“有人知道如何检查吗?我遗漏了什么或做错了什么?”
A.看看上面的代码,看看如何用正确的方法来做,我个人认为这对我很有效。
i1icjdpr3#
在getter中使用
const
之后,我认为如果将const选项扔到FlutterSecureStorage构造函数中可能会更好,例如: