Firebase ';未来<;QuerySnapshot>';不是类型为';溪流<;动态>';?

Firebase ';未来<;QuerySnapshot>';不是类型为';溪流<;动态>';?,firebase,flutter,google-cloud-firestore,Firebase,Flutter,Google Cloud Firestore,我正在努力尝试使用streambuider。我收到一个错误,上面写着: ════════ Exception caught by widgets library ═══════════════════════════════════ The following _TypeError was thrown building StreamBuilder<UserData>(dirty, state: _StreamBuilderBaseState<UserData, AsyncSn

我正在努力尝试使用streambuider。我收到一个错误,上面写着:

════════ Exception caught by widgets library ═══════════════════════════════════
The following _TypeError was thrown building StreamBuilder<UserData>(dirty, state: _StreamBuilderBaseState<UserData, AsyncSnapshot<UserData>>#e2c02):
type 'Future<QuerySnapshot>' is not a subtype of type 'Stream<dynamic>' of 'function result'
════════ widgets库捕获到异常═══════════════════════════════════
生成StreamBuilder时引发了以下类型错误(脏,状态:_StreamBuilderBaseState#e2c02):
“Future”类型不是“function result”的“Stream”类型的子类型
这是我的密码

 Stream myVideos;
getalldata() async {
    //get videos as future
    myVideos = FirebaseFirestore.instance
        .collection('videos')
        .where('uid', isEqualTo: widget.userid)
        .snapshots();

    var documents = await FirebaseFirestore.instance
        .collection('videos')
        .where('uid', isEqualTo: widget.userid)
        .get();
    if (documents.docs.isNotEmpty) {
      for (var item in documents.docs) {
        likes = item.data()['likes'].length + likes;
      }
    } else {
      setState(() {
        picturesdontexists = true;
      });
    }

    setState(() {
      dataisthere = true;
    });
  }

  @override
  Widget build(BuildContext context) {
    final user = Provider.of<Userforid>(context);
    return dataisthere == false
        ? Scaffold(body: Center(child: CircularProgressIndicator()))
        : StreamBuilder<UserData>(
            stream: DatbaseService(uid: user?.uid).userData,
            builder: (context, snapshot) {
              if (snapshot.hasData) {
                UserData userData = snapshot.data;
                return Scaffold(
                  appBar: AppBar(
                    backgroundColor: Colors.transparent,
                    elevation: 0.0,

-  - - - - - - - - -
    ),
                      ),
                   StreamBuilder(
                       stream: myVideos,
                        builder: ( context, snapshot) {
                       if (snapshot.connectionState == ConnectionState.waiting) {
                                 return Center(child: CircularProgressIndicator());
                                  }
                                   if(videos>0){
                                      print(snapshot.data);
                                   
                           return StaggeredGridView.countBuilder(
                            scrollDirection: Axis.vertical,
                            shrinkWrap: true,
                            physics: ScrollPhysics(),
                            crossAxisCount: 3,
                            itemCount: snapshot.data.docs.length,
                            itemBuilder: (context, index) {
                              DocumentSnapshot video =
                                  snapshot.data.docs[index];

                              return InkWell(
                                onTap: () {
                                  Navigator.of(context)
                                      .pushNamed(ChatFirstpage.route);
                                },
                                child: Card(
                                  elevation: 0.0,
streammyvideos;
getalldata()异步{
//获取视频作为未来
myVideos=FirebaseFirestore.instance
.collection(“视频”)
.where('uid',isEqualTo:widget.userid)
.快照();
var documents=等待FirebaseFirestore.instance
.collection(“视频”)
.where('uid',isEqualTo:widget.userid)
.get();
if(documents.docs.isNotEmpty){
for(documents.docs中的var项){
likes=item.data()['likes'].length+likes;
}
}否则{
设置状态(){
picturesdontexists=真;
});
}
设置状态(){
dataisthere=true;
});
}
@凌驾
小部件构建(构建上下文){
最终用户=提供者(上下文);
返回dataisthere==false
?脚手架(主体:中心(子体:环形压路指示器()))
:StreamBuilder(
流:DatbaseService(uid:user?.uid).userData,
生成器:(上下文,快照){
if(snapshot.hasData){
UserData UserData=snapshot.data;
返回脚手架(
appBar:appBar(
背景颜色:颜色。透明,
标高:0.0,
-  - - - - - - - - -
),
),
StreamBuilder(
流:我的视频,
生成器:(上下文,快照){
if(snapshot.connectionState==connectionState.waiting){
返回中心(子项:CircularProgressIndicator());
}
如果(视频>0){
打印(快照数据);
返回EdgridView.countBuilder(
滚动方向:轴垂直,
收缩膜:对,
物理:物理(),
交叉轴计数:3,
itemCount:snapshot.data.docs.length,
itemBuilder:(上下文,索引){
文档快照视频=
snapshot.data.docs[索引];
回墨槽(
onTap:(){
导航器(上下文)
.pushNamed(ChatFirstpage.route);
},
孩子:卡片(
标高:0.0,
我认为错误是在流中抛出的,因为在我使用流myVideos之前,我没有收到任何错误,而且一切正常。 也许任何人都可以帮忙,谢谢!如果你需要更多信息,请留言

这是我的服务

class DatbaseService {
  static DatbaseService instance = DatbaseService();
  final String uid;
  String _messages = "messages";
  String _images = "images";

  DatbaseService({this.uid});


  //userData from snapshot
  UserData userDataFromSnapshot(DocumentSnapshot snapshot) {
      
    return UserData(
      uid: uid,
      email: snapshot.data()['email'],
      fullname: snapshot.data()['fullname'],
      password: snapshot.data()['password'],
      url: snapshot.data()['url'],
      username: snapshot.data()['username'],
    );
  }

//get user doc stream
  Stream<UserData> get userData {
    return myprofilsettings.doc(uid).snapshots().map(userDataFromSnapshot);
  }

``
class-DatbaseService{
静态DatbaseService实例=DatbaseService();
最后一个字符串uid;
字符串_messages=“messages”;
字符串_images=“images”;
DatbaseService({this.uid});
//来自快照的用户数据
UserData userDataFromSnapshot(DocumentSnapshot快照){
返回用户数据(
uid:uid,
电子邮件:snapshot.data()['email'],
全名:snapshot.data()['fullname'],
密码:snapshot.data()['password'],
url:snapshot.data()['url'],
用户名:snapshot.data()['username'],
);
}
//获取用户文档流
流获取用户数据{
返回myprofilsettings.doc(uid).snapshots().map(userdatafromsapshot);
}
``

当您传递一个未来时,通常会出现这种情况,其中流应该已经过去了,或者您已经将变量的类型定义为流,但您将该变量设置为一个未来值

我认为,您可以直接将

FirebaseFirestore.instance
        .collection('videos')
        .where('uid', isEqualTo: widget.userid)
        .snapshots() 
在流生成器内部


另外,请提供完整的代码(DatbaseService)。

显示您的流DatbaseService我更新我的代码请检查以便您可以看到DatbaseService。我更新我的代码请检查以便您可以看到DatbaseService。