当屏幕未从 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 调用数据时如何显示文本小部件的主要内容,如果未能解决你的问题,请参考以下文章