嗨,我正尝试创建一个Visiblity小部件,如果用户在Firebase数据库阵列上,该小部件将显示。看起来像这样(成员数组):
如您所见,我创建了一个StreamBuilder,如果当前用户的用户名位于此Array上,则应返回Visibility小部件:
StreamBuilder<QuerySnapshot>(
stream: _firestore.collection('chats').snapshots(),
builder: (context, snapshot){
if(!snapshot.hasData){
}else {
final chats = snapshot.data.documents;
List<ChatCard> chatCards = [];
for (var chat in chats) {
final String nameOfChat = chat.data['name'];
final String lastMessageSent = chat.data['lastMessageSent'];
final List members = chat.data['members'];
final ChatCard chatCard = ChatCard(
nameOfChat: nameOfChat ?? '',
lastMessageSent: lastMessageSent ?? '',
);
chatCards.add(chatCard);
}
return Visibility(
visible: checkIfOnAnyChats(),
child: Expanded(
child: ListView(
children: chatCards,
),
),
);
}
}
),
这就是'
checkIfOnAnyChats()
'Future的样子: Future<bool> checkIfOnAnyChats() async {
FirebaseUser user = await _auth.currentUser();
final QuerySnapshot result = await _firestore
.collection('chats')
.where('members', arrayContains: _username)
.getDocuments();
final List<DocumentSnapshot> documents = result.documents;
if(documents.length > 0) {
setState(() {
return true;
});
}else{
setState(() {
return false;
});
}
}
我正在尝试将此值分配给“可见” bool(boolean) 值,但它不起作用,因为它是将来的 bool(boolean) 值而不是正常的 bool(boolean) 值。
有什么建议么?
谢谢。
最佳答案
如果要使用从Future返回的bool
,则需要使用FutureBuilder。
StreamBuilder<QuerySnapshot>(
stream: _firestore.collection('chats').snapshots(),
builder: (context, snapshot) {
if (!snapshot.hasData) {
} else {
final chats = snapshot.data.documents;
List<ChatCard> chatCards = [];
for (var chat in chats) {
final String nameOfChat = chat.data['name'];
final String lastMessageSent = chat.data['lastMessageSent'];
final List members = chat.data['members'];
final ChatCard chatCard = ChatCard(
nameOfChat: nameOfChat ?? '',
lastMessageSent: lastMessageSent ?? '',
);
chatCards.add(chatCard);
}
return FutureBuilder<bool>(
future: checkIfOnAnyChats(),
builder: (context, fSnapshot) {
if (fSnapshot.hasData)
return Visibility(
visible: fSnapshot.data,
child: Expanded(
child: ListView(
children: chatCards,
),
),
);
return Center(child: CircularProgressIndicator());
},
);
}
},
),
并且您不需要在Future函数中使用setState;
Future<bool> checkIfOnAnyChats() async {
FirebaseUser user = await _auth.currentUser();
final QuerySnapshot result = await _firestore
.collection('chats')
.where('members', arrayContains: _username)
.getDocuments();
final List<DocumentSnapshot> documents = result.documents;
return documents.length > 0;
}
关于flutter - 无法将参数类型Future <bool>分配给参数类型 'bool',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61667944/