当屏幕未从 Firebase 调用数据时如何显示文本小部件

Posted

技术标签:

【中文标题】当屏幕未从 Firebase 调用数据时如何显示文本小部件【英文标题】:How to show a text widget when a screen is not calling data from Firebase 【发布时间】:2020-10-29 08:35:19 【问题描述】:

我有一个从 Firebase 获取数据的活动屏幕,当数据库不提供数据时,我试图显示一条文本消息,例如“还没有活动”。

我尝试使用三元运算符条件来检查数据库是否为空并且它可以工作,但是,问题是当我进入活动屏幕并且它有数据时,它仍然显示消息大约 1 秒钟然后显示活动屏幕,所以,我想知道是否有更好的方法来实现这一点。

希望这是有道理的。

查看下面的代码

      @override
  Widget build(BuildContext context) 
    return Scaffold(
      body: RefreshIndicator(
        onRefresh: () => _setupActivities(),
        child: _activities.isEmpty
            ? Center(
                child: Text(
                  'Aun no Tienes Notificaciones',
                  style: ktextTitlesStyle.copyWith(
                      color: Colors.black,
                      fontSize: responsive.height(context) / 50),
                ),
                )
            : ListView.builder(
                itemCount: _activities.length,
                itemBuilder: (BuildContext context, int index) 
                  Activity activity = _activities[index];
                  return _buildActivity(activity);
                ,
              ),
      ),
    );
  

【问题讨论】:

所以你的_activities 是一个列表?您从 Firebase 获取数据,然后将数据放入您的 _activities 或什么? 是的,它是一个列表,这是正确的,每次用户获得一个赞时,该数据都会保存在数据库中,然后如果用户没有得到该数据,则将该数据提取到活动屏幕中任何喜欢,活动屏幕将是空白的,这正是问题所在,我想在活动屏幕为空时向用户展示一些东西,但我遇到的问题是,当他们进入活动屏幕并且它有数据时,它仍然显示我上面提到的消息大约 1 或 2 秒,然后显示活动屏幕,我希望该消息仅显示没有数据的地方。 我认为使用StreamBuilder() 可能会有所帮助 为什么它可以与 StreamBuilder() 一起使用?我不明白为什么我需要 StreamBuilder 【参考方案1】:

我不确定我是否完全理解您要完成的工作,但检查 AsyncSnapshot 上的 .hasData 可能有助于确定是否返回了数据。

Container( child: FutureBuilder(future: someFutureFirebaseDataReturningMethod(), builder: (context, snapshot)  
    if (!snapshot.hasData) return _noActiviesYet();
    return _showActivies(snapshot, context);
))

.hasData 返回“此快照是否包含非空数据值。”(https://api.flutter.dev/flutter/widgets/AsyncSnapshot/hasData.html)

【讨论】:

以上是关于当屏幕未从 Firebase 调用数据时如何显示文本小部件的主要内容,如果未能解决你的问题,请参考以下文章

未从 firebase 数据库中检索个人资料图片

Firebase 未从 Facebook 捕获电子邮件/电话

未从 Firebase 收到通知

从 Firebase 获取数据时如何显示加载屏幕

如何使用颤振从firebase实时检索数据

Angular组件未从服务加载数据[重复]