首页 > 解决方案 > SecureStorage 在颤动中读取 null

问题描述

这是我创建的 SecureStorage 的单独类。

import 'package:flutter_secure_storage/flutter_secure_storage.dart';

class SecureStorage {
  final _storage = FlutterSecureStorage();

  Future writeSecureData(String key, String value) async {
    var writeData = await _storage.write(key: key, value: value);
    return writeData;
  }

  Future readSecureData(String key) async {
    var readData = await _storage.read(key: key);
    return readData;
  }

  Future deleteSecureData(String key) async {
    var deleteData = await _storage.delete(key: key);
    return deleteData;
  }
}

因此,从登录页面,我将数据写入安全存储,如下面的屏幕截图所示。当我在这个阶段打印用户名和密码时,它们符合预期。

在此处输入图像描述

但是,在启动屏幕上从安全存储中读取数据时,它始终显示为空。下面是启动画面的代码:

class SplashScreen extends StatelessWidget {
  final SecureStorage secureStorage = SecureStorage();

  //Fetching data from secureStorage
  SplashScreen() {
    secureStorage.readSecureData("email").then((value) => finalEmail = value);
    secureStorage.readSecureData("name").then((value) => finalName = value);
    print(finalEmail);
    print(finalName);
  } ...remaining code

每次我热重载应用程序时,数据都会丢失。我什至不知道数据是否首先写入。我该如何解决这个问题?

标签: androidiosflutterdartflutter-dependencies

解决方案


我想到了。

SplashScreen() {
    secureStorage.readSecureData("email").then((value) => finalEmail = value);
    secureStorage.readSecureData("name").then((value) => finalName = value);
    print(finalEmail);
    print(finalName);
  }

由于程序是异步的,因此在值更改之前呈现的小部件。我将主要小部件包装在未来的构建器中,效果很好。

这可以作为参考:Flutter, render widget after async call


推荐阅读