SecureStorage 在 flutter 中读取 null
SecureStorage reads null in flutter
这是我为 SecureStorage 创建的单独 class。
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
每次热重载应用程序时,数据都会丢失。我什至不知道数据是否首先写入。我该如何解决这个问题?
我想通了。
SplashScreen() {
secureStorage.readSecureData("email").then((value) => finalEmail = value);
secureStorage.readSecureData("name").then((value) => finalName = value);
print(finalEmail);
print(finalName);
}
由于程序是异步的,因此在更改值之前呈现小部件。我将主要小部件包装在未来的构建器中并且效果很好。
这可以作为参考:
这是我为 SecureStorage 创建的单独 class。
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
每次热重载应用程序时,数据都会丢失。我什至不知道数据是否首先写入。我该如何解决这个问题?
我想通了。
SplashScreen() {
secureStorage.readSecureData("email").then((value) => finalEmail = value);
secureStorage.readSecureData("name").then((value) => finalName = value);
print(finalEmail);
print(finalName);
}
由于程序是异步的,因此在更改值之前呈现小部件。我将主要小部件包装在未来的构建器中并且效果很好。
这可以作为参考: