gpt4 book ai didi

flutter - 状态变量的空值

转载 作者:行者123 更新时间:2023-12-03 04:27:20 25 4
gpt4 key购买 nike

我有两种异步方法:

Future<void> checkForUpdate() async {
InAppUpdate.checkForUpdate().then((info) {
setState(() {
_updateInfo = info;
print('@@@@@@@@@@@@@@@@@@@@@@@@@@$_updateInfo');

});
}).catchError((e) => _showError(e));
}


Future<void> doImmediateUpdate(AppUpdateInfo info) async{
if(_updateInfo.immediateUpdateAllowed){
await InAppUpdate.performImmediateUpdate();
}

}
_updateInfo是我在 checkForUpdate()中设置并在 doImmediateUpdate中使用的状态变量。

我正在像这样调用这两种方法
`//.....'

platformUpdates() async {
if (Platform.isAndroid) {
await checkForUpdate();
await doImmediateUpdate(_updateInfo);

但是我遇到了错误 Unhandled Exception: NoSuchMethodError: The getter 'immediateUpdateAllowed' was called on null.
但是 _updateInfo的print语句返回了我想要的。
@@@@@@@@@@@@@@@@@@@@@@@@@@InAppUpdateState{updateAvailable: true, immediateUpdateAllowed: true, flexibleUpdateAllowed: true, availableVersionCode: 14}

显然我的代码中有些不对劲...
干杯。

最佳答案

使用await关键字而不是在checkForUpdate中设置回调:

Future<void> checkForUpdate() async {
final info = await InAppUpdate.checkForUpdate();

setState(() {
_updateInfo = info;
print('@@@@@@@@@@@@@@@@@@@@@@@@@@$_updateInfo');
});
}

当您使用then设置回调并且不使用await关键字时,它不等待将来解析值,而是继续执行代码-这就是为什么变量为null的原因。将来解决将来时,它将设置状态。但是当您使用await关键字时,代码将不会继续执行,直到将来解决。

没有 的执行顺序等待:

调用
  • checkForUpdate,调用InAppUpdate.checkForUpdate并返回Future对象。
  • 为Future对象设置了回调,checkForUpdate函数完成;
  • doImmediateUpdate执行;
  • (Future解决之前的异步间隔)
  • 调用checkForUpdate的将来回调并设置状态。

  • 使用 的执行顺序等待:

    调用
  • checkForUpdate,调用InAppUpdate.checkForUpdate并返回Future对象。
  • 等待 future 解决;
  • 将变量设置为状态,checkForUpdate函数完成;
  • doImmediateUpdate执行。
  • 关于flutter - 状态变量的空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58834163/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com