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

Firebase 什么是类型';未来<;动态>';不是类型为';溪流<;动态>';,firebase,flutter,dart,google-cloud-firestore,stream-builder,Firebase,Flutter,Dart,Google Cloud Firestore,Stream Builder,有人能告诉我如何在StreamBuilder中将函数作为流调用吗?由于类型“Future”不是类型“Stream”的子类型,因此在尝试执行此操作时,我收到了此错误。 我使用stream builder来监听对集合中特定字段值的实时更改。请让我知道我在下面的代码中哪里做错了,以及我需要做什么更改来处理这个代码段 代码如下: import 'package:cloud_firestore/cloud_firestore.dart'; import 'package:flutter/material.

有人能告诉我如何在StreamBuilder中将函数作为流调用吗?由于类型“Future”不是类型“Stream”的子类型,因此在尝试执行此操作时,我收到了此错误。

我使用stream builder来监听对集合中特定字段值的实时更改。请让我知道我在下面的代码中哪里做错了,以及我需要做什么更改来处理这个代码段

代码如下:

import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:flutter/material.dart';

class Display extends StatefulWidget {
  @override
  _DisplayState createState() => _DisplayState();
}

class _DisplayState extends State<Display> {
  final CollectionReference student_details =
      FirebaseFirestore.instance.collection('students');
  final CollectionReference tutor_details =
      FirebaseFirestore.instance.collection("tutors");
  final CollectionReference CollectionAttendanceDetails =
      FirebaseFirestore.instance.collection('attendance');

  display() async {
    var tCT;
    var id = await student_details
        .doc("m2Hdo5eejKWfIYlD2ZJvjYepWQh2")
        .get()
        .then((value) {
      return value.data()['tutorid'];
    });
    return id;
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
        body: Container(
      child: StreamBuilder(
          stream: display(),
          builder: (_, snapshot) {
            if (!snapshot.hasData) return CircularProgressIndicator();
            return Container(
              child: Text(snapshot.data),
            );
          }),
    ));
  }
}
import'包:cloud_firestore/cloud_firestore.dart';
进口“包装:颤振/材料.省道”;
类显示扩展了StatefulWidget{
@凌驾
_DisplayState createState()=>\u DisplayState();
}
类_DisplayState扩展了状态{
最终收集参考学生详细信息=
FirebaseFirestore.instance.collection('students');
最终收藏参考资料=
FirebaseFirestore.instance.collection(“导师”);
最终收集参考收集参加的详细资料=
FirebaseFirestore.instance.collection('Attention');
display()异步{
var-tCT;
var id=等待学生详细信息
.doc(“m2Hdo5eejKWfIYlD2ZJvjYepWQh2”)
.get()
.然后((值){
返回值.data()['tutorid'];
});
返回id;
}
@凌驾
小部件构建(构建上下文){
返回脚手架(
主体:容器(
孩子:StreamBuilder(
流:display(),
构建器:(\uux,快照){
如果(!snapshot.hasData)返回CircularProgressIndicator();
返回容器(
子项:文本(snapshot.data),
);
}),
));
}
}
habro actually display()函数不是流

这将是一个在某个时间返回一个值的未来

但作为u提供的流显示()


将其转换为futurebuilder,否则firebase firestore将提供监听实时更改的功能

是的,我尝试使用futurebuilder,它工作正常,但如何使用StreamBuilder满足相同的要求?FutureBuilder唯一的问题是更改只在刷新时显示。不要这样做:“stream:display(),”。您应该在initState中调用display()一次,并将其存储到状态变量中,然后在StreamBuilder中引用该状态变量。