gpt4 book ai didi

flutter - 无法将参数类型Future 分配给参数类型 'bool'

转载 作者:行者123 更新时间:2023-12-03 04:49:20 30 4
gpt4 key购买 nike

嗨,我正尝试创建一个Visiblity小部件,如果用户在Firebase数据库阵列上,该小部件将显示。看起来像这样(成员数组):enter image description here

如您所见,我创建了一个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/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com