颤抖如何在获取快照的属性值时防止空值

时间:2019-09-02 03:28:28

标签: flutter dart null ternary-operator snapshot

我有从Firestore返回的数据,要么返回null,要么暂时返回null。

我进行检查以确保快照中包含以下数据:

parentSnapshot.data != null && parentSnapshot.hasData

我还尝试使用三元数来保护属性为null:

var isParent = parentSnapshot.data['isParent'] ?? false;

但是由于某些原因,我仍然会得到:

The method '[]' was called on null
Reciever: null
Tried calling: []("isParent")

它必须是null安全的,因此如果找不到该属性,则该变量始终返回false,因此我可以控制显示的内容。

这是完整的代码:

return StreamBuilder<Object>(
        stream: Firestore.instance.collection(parent).document(
            widget.menuItemsList[index]['name']).snapshots(),
        builder: (BuildContext context, AsyncSnapshot parentSnapshot) {

          if (parentSnapshot.data != null && parentSnapshot.hasData) {
            var isParent = parentSnapshot.data['isParent'] ?? false;

            if (isParent){
              return GridButtons(widget.menuItemsList[index]['name'], animation, index, parent, collection, parentSnapshot, widget.menuItemsList, widget.listKey);
            } else {
              return SizedBox(width: 0, height: 0,);
            }

          } else {
            return SizedBox(width: 0, height: 0,);
          }
        }
    );

感谢您的帮助

1 个答案:

答案 0 :(得分:1)

我认为以下代码将为您提供帮助

我们还必须检查长度

如果条件仅接受dart语言的布尔值

if (parentSnapshot.hasData && parentSnapshot.data != null && parentSnapshot.data.length > 0 ) {
            var isParent = parentSnapshot.data['isParent'] != null ? true : false;

            if (isParent){
              return GridButtons(widget.menuItemsList[index]['name'], animation, index, parent, collection, parentSnapshot, widget.menuItemsList, widget.listKey);
            }