当查询没有要获取的数据时,FirebaseAnimatedList 查询

Posted

技术标签:

【中文标题】当查询没有要获取的数据时,FirebaseAnimatedList 查询【英文标题】:FirebaseAnimatedList query when query don't have data to fetch 【发布时间】:2020-06-19 23:29:22 【问题描述】:

我是 Flutter 和 firebase 的超级新手,我尝试使用下面示例代码中的 FirebaseAnimatedList 从 firebase 实时数据库中查询一些数据,我尝试传递 this.userid 以根据传递的值获取数据,但有时是数据库根据传递的内容,可能没有数据。我只想知道如何处理此类情况并显示反馈说没有与查询匹配的数据。它基本上是一种搜索,它可能没有用户寻找的值。

示例代码:


    FirebaseAnimatedList(
            query: ref.child("users").orderByChild("id").equalTo(this.userid),
            itemBuilder: (BuildContext context, DataSnapshot snapshot,
                Animation<double> animation, int index) 
              return SizeTransition(
                sizeFactor: animation,
                axis: Axis.horizontal,
                axisAlignment: -0.8,
                child: Column(
                  textDirection: TextDirection.ltr,
                  verticalDirection: VerticalDirection.down,
                  children: <Widget>[
                    SizedBox(
                      height: 100.0,
                    ),
                    Text(
                      "User ID : " + snapshot.value["id"],
                    ),
                    SizedBox(
                      height: 50.0,
                    ),
                  ],
                ),
              );
            ));

【问题讨论】:

【参考方案1】:

snapshot 的类型为DataSnapshot,因此您可以使用属性exists 来检查数据是否存在:

itemBuilder: (BuildContext context, DataSnapshot snapshot,
                Animation<double> animation, int index) 
            if(!snapshot.exists)
                  return Text("No Data");
             
            else 
              return SizeTransition(
                sizeFactor: animation,
                axis: Axis.horizontal,
                axisAlignment: -0.8,
                child: Column(
                  textDirection: TextDirection.ltr,
                  verticalDirection: VerticalDirection.down,
                  children: <Widget>[
                    SizedBox(
                      height: 100.0,
                    ),
                    Text(
                      "User ID : " + snapshot.value["id"],
                    ),
                    SizedBox(
                      height: 50.0,
                    ),
                  ],
                ),
              );
              
            

查看以下内容了解更多信息:

https://pub.dev/documentation/firebase_dart/latest/firebase_dart/DataSnapshot-class.html

【讨论】:

我刚刚检查过先生它不起作用无法访问 Datasnapshot 上的 .exist 方法 存在带 s 的属性 非常感谢您的回复。抱歉打错了是的,我尝试使用 .exists 但它不起作用存在不是 Datasnapshot 的可用方法。 试试if(snapshot.value == null)return Text("No Data") ; 我认为如果查询没有返回任何值 FirebaseAnimatedList 不要继续itembuilder:先生【参考方案2】:
Query q=ref.child("users").orderByChild("id").equalTo(this.userid);
q==null?Center(child: CircularProgressIndicator()): FirebaseAnimatedList(
  query: ref.child("users").orderByChild("id").equalTo(this.userid),
  itemBuilder: (BuildContext context, DataSnapshot snapshot,
    Animation<double> animation, int index) 
  return SizeTransition(
    sizeFactor: animation,
    axis: Axis.horizontal,
    axisAlignment: -0.8,
    child: Column(
      textDirection: TextDirection.ltr,
      verticalDirection: VerticalDirection.down,
      children: <Widget>[
        SizedBox(
          height: 100.0,
        ),
        Text(
          "User ID : " + snapshot.value["id"],
        ),
        SizedBox(
          height: 50.0,
        ),
      ],
    ),
  );
));

【讨论】:

以上是关于当查询没有要获取的数据时,FirebaseAnimatedList 查询的主要内容,如果未能解决你的问题,请参考以下文章

当没有数据要读取时,读取套接字会给出 errno EAGAIN,而且如果我断开网络连接

由于shiro-redis插件自定义Realm的doGetAuthenticationInfo认证方法

当更新日期相同时,选择查询以获取最后一个用户更新的所有最后一行

oracle中使用rownum获取数据

仅当执行第一个查询的记录集中没有记录时,SPARQL 从第二个查询返回记录

sql 语句 获取最大值