繁体   English   中英

Flutter:如果快照没有数据如何显示消息

[英]Flutter: How to show a message if snapshot has no data

我在 flutter 中有一个简单的问题,但我不太清楚如何解决它。 所以就在这里。 如果我调用的快照在我的 firebase 数据库中没有数据,我会尝试在我的应用程序中显示一条消息。

我有这段代码:

return Scaffold(
  body: Container (
    child: new LayoutBuilder(
      builder: (BuildContext context, BoxConstraints viewportConstraints) {
        return Column(
          children: <Widget>[
            SizedBox(
              height: MediaQuery.of(context).size.height * 0.020,
            ),
            SingleChildScrollView(
              scrollDirection: Axis.vertical,
              child: Container(
                child: Column(
                  children: <Widget>[
                    StreamBuilder<QuerySnapshot>(
                        stream: db.collection('CONFIRMED HELP BENEFICIARY').where('Respondents_ID', isEqualTo: '${widget.UidUser}').snapshots(),
                        builder: (context, snapshot) {
                          if (snapshot.hasData) {
                            return Column(
                                children: snapshot.data.documents
                                    .map((doc) => buildItem(doc))
                                    .toList());
                          }
                          else {
                            return Container(
                                color: Colors.red,
                                height: 200,
                                width: 200,
                                child: Text("No Data"));

            )
          ],
        );
      },
    ),
  ),
);

在我的 singlescrollview 中,我有一个 streambuilder。 还有一个if else。 因此,如果我显示的是“snapshot.hasdata”数据列表,它会成功显示。 但问题出在“else”上。 我一直在尝试显示一个颜色为红色的容器和一个包含“无数据”的文本,但我完全不知道如何@@它显示容器几毫秒然后消失@@。 请帮忙。

这适用于Flutter 2.10.3和 null 安全。

if (!snapshot.hasData) {
    
    // waiting for data
    return CircularProgressIndicator();

} else if (snapshot.data?.size == 0) {

    // collection has no data
    return _noDataWidget();
} else {
    
    return ...;
}

少了几个括号。 这导致了问题。 我为你修复了代码。

 return Scaffold(
  body: Container(
    child: new LayoutBuilder(
      builder: (BuildContext context, BoxConstraints viewportConstraints) {
        return Column(
          children: <Widget>[
            SizedBox(
              height: MediaQuery.of(context).size.height * 0.020,
            ),
            SingleChildScrollView(
              scrollDirection: Axis.vertical,
              child: Container(
                child: Column(
                  children: <Widget>[
                    StreamBuilder<QuerySnapshot>(
                        stream: db.collection('CONFIRMED HELP BENEFICIARY')
                            .where('Respondents_ID', isEqualTo: '${widget.UidUser}')
                            .snapshots(),
                        builder: (context, snapshot) {
                          if (snapshot.hasData) {
                            return Column(
                                children: snapshot.data.documents
                                    .map((doc) => buildItem(doc))
                                    .toList());
                          }
                          else {
                            return Container(
                                color: Colors.red,
                                height: 200,
                                width: 200,
                                child: Text("No Data"));
                          }
                        }
                    )
                  ],
                ),
              ),
            ),
          ],
        );
      },
    ),
  ),
);
 if(!snapshot.hasData){
          // still waiting for data to come 
          return circularProgress();

        }
        else if(snapshot.hasData && snapshot.data.isEmpty) {
          // got data from snapshot but it is empty
         
            return Text("no data");
          }
        else  {
        
            // got data and it is not empty 
            return ListView(
              children: snapshot.data,
            );
          }
      },
    if(!snapshot.hasData){
          return circularProgress();
        }
        else if(snapshot.data.docs.isEmpty){
              return Text("There is no data here");
              //Or you can show any widget you want
          }else{
             return ListView()
           }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM