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

标签 flutter dart

嗨,我正尝试创建一个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/

相关文章:

flutter - Dart数据类型命名约定。为什么用String而不是string

dart - flutter AdBlock WebView?

flutter - 在 'initState'内或在类定义下方初始化变量?

android - Flutter Firestore,按日期对数据进行排序

flutter - 在 Flutter 中将构造函数作为参数传递

flutter - Flutter bool 变量未更新

flutter - 热重载和热重启在 flutter 中不起作用

Android 应用程序在按下后退按钮时退出,而不是导航到上一个屏幕 - Flutter

dart - 将字符串从 firestore 保存到变量

dart - flutter 构造函数错误