未来变量和 null 安全:不可为 null 的实例字段 'notifications' 必须初始化

Future variables and null safety: Non-nullable instance field 'notifications' must be initialized

我最近升级了 Dart(使用 v2.12.4)和 trying to migrate 我制作的应用程序。

我现在陷入了一个我似乎无法解决的问题。

考虑以下伪代码:

class Notifications {
    Future<List<NotificationItem>> notificationItems;

    fillNotificationList() async {
        notificationItems = await httpService.getFromEndpoint();
    }
}

notificationItems 当前错误 Non-nullable instance field 'notifications' must be initialized.

我尝试过不同的解决方案;添加 late 关键字会使应用程序抛出 LateInitializationError 异常并附加 = [] 给出类型错误。

如何在最新版本的 Dart 中成功拥有具有空安全功能的 Future 变量?

它似乎是一个可以为 null 的变量。这意味着您的程序中有一个时间点显然是 null。所以这样声明:

Future<List<NotificationItem>>? notificationItems;

我觉得你的其余代码有点奇怪。你命名未来就像我命名实际结果一样。您有一个不执行任何异步工作的异步方法。也许那只是因为这里的例子被简化了。

或者您可能真的很想坚持认为这永远不会为空。您可以使用带有空列表的完整 Future 对其进行初始化:

Future<List<NotificationItem>>? notificationItems = Future.value(<NotificationItem>[]);