StreamBuilder 未显示来自 firestore 的数据
Posted
技术标签:
【中文标题】StreamBuilder 未显示来自 firestore 的数据【英文标题】:StreamBuilder is not showing data from firestore 【发布时间】:2021-07-26 07:23:11 【问题描述】:我正在使用 streambuilder 来显示快照数据,但它没有显示。屏幕只是空白,但是当我使用带有 get() 方法的未来构建器时,它会显示数据,但我想要实时更改。我是新手,请帮我解决这个问题。这是代码。
class TalentScreen2 extends StatelessWidget
final Query _fetchFavUser = FirebaseRepo.instance.fetchFavUsers();
@override
Widget build(BuildContext context)
return SafeArea(
child: Scaffold(
body: Column(
children: [
Text('Talent Screen 2(Favourites)'),
Expanded(child: _retrieveData(context))
],
),
),
);
Widget _retrieveData(BuildContext context) => StreamBuilder<QuerySnapshot>(
stream: _fetchFavUser.snapshots(),
builder: (BuildContext context, AsyncSnapshot<QuerySnapshot> snapshot)
if (snapshot.hasError) return const Text('Something went wrong');
if (!snapshot.hasData) return const Text('Alas! No data found');
if (snapshot.connectionState == ConnectionState.waiting)
return Center(
child: CircularProgressIndicator(
strokeWidth: 2.0,
));
if (snapshot.connectionState == ConnectionState.done)
return theUserInfo(snapshot.data.docs);
return Container();
);
Widget theUserInfo(List<QueryDocumentSnapshot> data)
return ListView.builder(
shrinkWrap: true,
itemCount: data.length,
itemBuilder: (BuildContext context, int index)
var uid = data[index]['uid'];
TalentHireFavModel userData = TalentHireFavModel.fromMap(
data[index].data(),
);
return Card(
child: Column(
children: <Widget>[
Text(data[index]['orderBy']),
// Text(userData.name ?? ''),
Text(userData.categories),
Text(userData.skills),
// Text(userData.country ?? ''),
Text(userData.phoneNo),
Text(userData.hourlyRate),
Text(userData.professionalOverview),
Text(userData.skills),
Text(userData.expert),
// Text(userData.createdAt ?? ''),
_iconButton(userData.uid, context),
],
),
);
);
Future<DocumentSnapshot> fetch(data) async =>
await FirebaseRepo.instance.fetchWorkerUserData(data);
Widget _iconButton(uid, context)
return IconButton(
icon: Icon(Icons.favorite),
onPressed: ()
BlocProvider.of<TalentFavCubit>(context).removeTalentFav(uid);
);
这里是 firestore 查询方法,我只是应用简单查询来获取所有文档并显示它们。我想要实时更改
Query fetchFavUsers()
var data = _firestore
.collection('workerField')
.doc(getCurrentUser().uid)
.collection('favourites')
// .where('uid', isNotEqualTo: getCurrentUser().uid)
.orderBy('orderBy', descending: true);
return data;
【问题讨论】:
你看到加载指示器了吗?可以在_retrieveData
中添加打印以检查它是否被调用,并在return Container();
之前添加打印以查看它是否仅返回空容器。
【参考方案1】:
解决方案是只返回函数。从 if 语句中取出该方法并将其放在 return 语句中。
【讨论】:
以上是关于StreamBuilder 未显示来自 firestore 的数据的主要内容,如果未能解决你的问题,请参考以下文章
Flutter:显示来自经过身份验证的 Firebase Auth 用户的带有 StreamBuilder 的一些 Firestore 集合
在 Flutter 中使用 streamBuilder 时条件不起作用
在 StreamBuilder 中使用 SnackBar 的奇特方式是啥?
Flutter Firebase 实时数据库 StreamBuilder 更新