Flutter 安全存储问题:无法读取或写入键和值

Ker*_*n97 3 dart flutter flutter-dependencies

我正在使用这个包在 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();
Run Code Online (Sandbox Code Playgroud)

这就是我所说的价值,

@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();
  }
Run Code Online (Sandbox Code Playgroud)

这就是我存储值的方式,

await secureStorage.writeSecureData('username', username);
await secureStorage.writeSecureData('password', password);
Run Code Online (Sandbox Code Playgroud)

小智 5

我认为读/写问题的原因可能是与使用aOptions或不一致iOptions

对于前。您正在使用aOptions,readAll()和方法,但不将其与deleateAll(),一起使用。 因此,当您将数据写入安全存储时使用in时,您指定必须将此数据写入。 但是,当您在不再次提供 aOptions 的情况下读取数据时,您会尝试从默认安全存储中读取数据,该存储不是您存储数据的 EncryptedSharedPreferences。示例适用于 Android,我还没有在 iOS 上测试过这个库。write()read()delete()

encryptedSharedPreferences: true,aOptionsEncryptedSharedPreferences

aOptions