【问题标题】:Fetching Data from Firestore Collections snapshot.hasdata returns Null从 Firestore 集合中获取数据 snapshot.hasdata 返回 Null
【发布时间】:2021-11-01 00:54:42
【问题描述】:

所以我一直在关注 YouTube 的教程,当我尝试通过 Stream 快照从名为“users”的集合中获取“用户名”时,它返回 null。

目的:当点击带有用户名的搜索按钮时显示可用的用户。

下面是代码:

  bool isSearching = false;
  Stream? usersStream;

  TextEditingController searchUsernameEditingController =
      TextEditingController();

  onSearchBtnClick() async {
    isSearching = true;
    setState(() {});
    usersStream = await DatabaseMethods()
        .getUserByUsername(searchUsernameEditingController.text);
        
    setState(() {});
  }

  Widget searchUserList() {
    return StreamBuilder(
        stream: usersStream,
        builder: (context, AsyncSnapshot snapshot) {
          return snapshot.hasData
              ? ListView.builder(
                  itemCount: snapshot.data.docs.length,
                  itemBuilder: (context, index) {
                    DocumentSnapshot ds = snapshot.data.docs[index];
                    return Image.network(ds["imgUrl"]);
                  })
              : Center(child: Text("No Users Found"));
        });
  }

来自 DatabaseMethods():

Future<Stream<QuerySnapshot>> getUserByUsername(String username) async {
    return FirebaseFirestore.instance
        .collection("users")
        .where("username", isEqualTo: username)
        .snapshots();
  }

始终显示“未找到用户”消息

【问题讨论】:

    标签: flutter dart google-cloud-firestore stream snapshot


    【解决方案1】:

    首先确认在调用 onSearchBtnClick 时释放了 streambuilder 的新值。

    试试这个。

    onSearchBtnClick() async {
      isSearching = true;
      setState(() {});
    }
    
    Widget searchUserList() {
      return StreamBuilder(
        stream: DatabaseMethods()
            .getUserByUsername(searchUsernameEditingController.text),
        builder: (context, AsyncSnapshot snapshot) {
          print('called');
          // confirm that print is called when onSearchBtnClick is called.
          return snapshot.hasData
              ? ListView.builder(
                  itemCount: snapshot.data.docs.length,
                  itemBuilder: (context, index) {
                    DocumentSnapshot ds = snapshot.data.docs[index];
                    return Image.network(ds["imgUrl"]);
                  })
              : Center(child: Text("No Users Found"));
        },
      );
    }
    

    【讨论】:

    • 参数类型“Future>>”不能分配给参数类型“Stream?”。我收到您的代码错误,但我必须在 Widget searchUserList() 周围添加 Future,当按下搜索按钮时我没有收到“调用”!
    猜你喜欢
    • 2021-06-21
    • 2018-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-03
    • 2020-06-04
    • 2018-07-13
    • 2020-11-26
    相关资源
    最近更新 更多