无法在 Flutter 应用程序中处理来自 Firestore 的 null 值

问题描述 投票:0回答:1

我有一个来自 Firestore 的 Stream,可以写入。但是,当我尝试读取集合中的文档时,如果存在空值,则不会得到任何结果(在 UI 中)。当我使用空字符串创建 GuestBookMessage 对象时,我得到 X 个结果,这些结果对应于数据库中的文档数量。

当 Firestore 中没有 null 属性时,我会得到正确的结果。

我可以做些什么来确保 Dart 中的 firestore 文档属性的 null 安全性吗?

FirebaseAuth.instance.userChanges().listen((user) {
  if (user != null) {
    _loggedIn = true;
    _guestBookSubscription = FirebaseFirestore.instance
        .collection('guestbook')
        .orderBy('timestamp', descending: true)
        .snapshots()
        .listen((snapshot) {
          _guestBookMessages = [];
          for (final document in snapshot.docs) {
            String name = document.data()['name'] as String ?? 'Default Name'; // Provide a default value if 'name' is null
            String message = document.data()['text'] as String;

            _guestBookMessages.add(
              GuestBookMessage(
                name: name,
                message: message,
              ),
            );
          }
          notifyListeners();
        });
  } else {
    ...
  }
  ...
});

这是我的 Firestore 数据库的屏幕截图。

我来自 Swift,对 Firebase 缺乏经验(如果有帮助的话)。

flutter firebase dart google-cloud-firestore
1个回答
0
投票

要在 Dart 中处理 Firestore 文档中的 null 属性,您可以使用 null 感知运算符,例如 ??和 ?。提供默认值或优雅地处理空值。

例如:

for (final document in snapshot.docs) {
  String name = document.data()['name'] as String ?? 'Default Name'; 
  String message = document.data()['text'] as String ?? ''; // Provide an empty string if message is null

  _guestBookMessages.add(
    GuestBookMessage(
      name: name,
      message: message,
    ),
  );
}
notifyListeners();

© www.soinside.com 2019 - 2024. All rights reserved.