getter 'docs' 没有为类型 'AsyncSnapshot<Object?>' 定义

The getter 'docs' isn't defined for the type 'AsyncSnapshot<Object?>'

迁移到空安全后出现错误 getter 'docs' 没有为类型 'AsyncSnapshot<Object?>' 定义。 尝试导入定义 'docs' 的库,将名称更正为现有 getter 的名称,或者定义一个 getter 或名为 'docs'.

的字段

错误所在的代码段

    return FutureBuilder(
      future: searchResultsFuture,
      builder: (context, snapshot) {
        if (!snapshot.hasData) {
          return circularProgress();
        }
        List<UserResult> searchResults = [];
        snapshot.docs.forEach((doc) {    //have error here
          User user = User.fromDocument(doc);
          UserResult searchResult = UserResult(user);
          searchResults.add(searchResult);
        });
        return ListView(
          children: searchResults,
        );
      },
    );
  } 

搜索结果未来


  handleSearch(String query) {
    Future<QuerySnapshot> users =
        usersRef.where("displayName", isGreaterThanOrEqualTo: query).get();
    setState(() {
      searchResultsFuture = users;
    });
  }

  clearSearch() {
    searchController.clear();
  }

通常,检索数据需要几毫秒,所以我尝试这样做 确保在检索数据后执行我的操作

return StreamBuilder<QuerySnapshot>(
    stream: Collectionreference
        .snapshots(),
    builder: (BuildContext context,
        AsyncSnapshot<QuerySnapshot> activitySnapshot) {
      if (activitySnapshot.hasError) {
        return  Center(
              child: Text('Something went wrong'),
            );
      }
      if (activitySnapshot.connectionState == ConnectionState.waiting) {
        return Center(
                child: SpinKitWave(
              color: constants.AppMainColor,
              itemCount: 5,
              size: 40.0,
            )));
      }
      if (!activitySnapshot.hasData || activitySnapshot.data.docs.isEmpty) {
        return Center(
              child: Text('Nothing to Display here'),
            );
      }
      if (activitySnapshot.hasData) {
         activitySnapshot.data.docs.forEach(doc=>{
            print(doc);
          })
      }
     }
   });

您代码中的 snapshot 是一个 AsyncSnapshot,它确实没有 docs 子级。要从 Firestore 获取文档,您需要使用:

snapshot.data.docs

另请参阅 listening for realtime data, which contains an example showing this - and my answer here explaining all snapshot types:

上的 FlutterFire 文档

改成这样:

return FutureBuilder(
      future: searchResultsFuture,
      builder: (context, **AsyncSnapshot** snapshot) {
        if (!snapshot.hasData) {
          return circularProgress();
        }
        List<UserResult> searchResults = [];
        **snapshot.data!.docs.forEach((doc) {** 
          User user = User.fromDocument(doc);
          UserResult searchResult = UserResult(user);
          searchResults.add(searchResult);
        });
        return ListView(
          children: searchResults,
        );
      },
    );
  }