Firebase 如何在Firestore中使用Flatter(web app)stream builder
我看到了一些关于使用stream builder的Flitter for mobile的问题和答案,如下所示:Firebase 如何在Firestore中使用Flatter(web app)stream builder,firebase,flutter,google-cloud-firestore,flutter-web,Firebase,Flutter,Google Cloud Firestore,Flutter Web,我看到了一些关于使用stream builder的Flitter for mobile的问题和答案,如下所示: body: new StreamBuilder( stream: Firestore.instance.collection("collection").snapshots(), builder: (context, snapshot) { ... Stream<List<DocumentSnapshot>> getStream() async
body: new StreamBuilder(
stream: Firestore.instance.collection("collection").snapshots(),
builder: (context, snapshot) {
...
Stream<List<DocumentSnapshot>> getStream() async* {
fb.firestore().collection("MyCollection").onSnapshot.listen((querySnapshot) {
yield querySnapshot.docs;
}
}
我正试图在flutter上为web执行同样的操作,但是在我的配置中,snapshots方法是未知的,在运行时会生成一个异常,并在运行之前生成一个vscode警告。为什么?我的设置是否不正确
我遵循了我在这里和其他地方发现的这些步骤:
1在pubspec.yaml中包含firebase作为依赖项
dependencies:
flutter:
sdk: flutter
firebase: ^6.0.0
2在index.html body标记中包含firestore js脚本:
<script src="https://www.gstatic.com/firebasejs/7.5.0/firebase-app.js"></script>
<script src="https://www.gstatic.com/firebasejs/7.5.0/firebase-analytics.js"></script>
<script src="https://www.gstatic.com/firebasejs/7.5.0/firebase-firestore.js"></script>
<script src="main.dart.js" type="application/javascript"></script>
遵循这些步骤后,我可以让代码正常工作
void main() {
if (fb.apps.length == 0) {
try {
fb.initializeApp(
apiKey: "mike",
authDomain: "myauthdomain",
databaseURL: "mydburl",
projectId: "myproductid",
storageBucket: "mystoragebucket",
);
} catch(e) {
print(e);
}
}
fs.Firestore store = fb.firestore();
fs.CollectionReference ref = store.collection("MyCollection");
ref.onSnapshot.listen((querySnapshot) {
querySnapshot.docs.forEach((doc) {
print(doc.data()); // this works!!
});
});
runApp(MyApp());
}
但是,正如我前面提到的,让流生成器工作,所有的建议都建议我可以通过说
class MyList extends StatelessWidget {
@override
Widget build(BuildContext context) {
return new StreamBuilder(
stream: fb.firestore().collection('MyCollection').snapshots(),
...
我在web上运行的包似乎与firestore集合引用中的snapshots方法或属性没有任何相似之处。有人能帮我澄清一下吗?querySnapshot.docs属性返回一个列表,而stream属性需要一个流,其中流上的每个项目都是一个列表
我只在iOS/Android的FlightFire库中需要这个,但它应该是这样的:
body: new StreamBuilder(
stream: Firestore.instance.collection("collection").snapshots(),
builder: (context, snapshot) {
...
Stream<List<DocumentSnapshot>> getStream() async* {
fb.firestore().collection("MyCollection").onSnapshot.listen((querySnapshot) {
yield querySnapshot.docs;
}
}
querySnapshot.docs属性返回一个列表,而流属性需要一个流,其中流中的每个项都是一个列表
我只在iOS/Android的FlightFire库中需要这个,但它应该是这样的:
body: new StreamBuilder(
stream: Firestore.instance.collection("collection").snapshots(),
builder: (context, snapshot) {
...
Stream<List<DocumentSnapshot>> getStream() async* {
fb.firestore().collection("MyCollection").onSnapshot.listen((querySnapshot) {
yield querySnapshot.docs;
}
}
当我尝试创建一个使用大量StreamBuilder的Flitter移动应用程序的web版本时,我也遇到了同样的问题。以下是我的作品: Pubspec.yaml依赖项:
firebase_web: ^5.0.9
firebase_core: ^0.4.3+2
在代码中:
import 'package:firebase_web/firestore.dart';
import 'package:firebase_web/firebase.dart';
body: new StreamBuilder(
stream: firestore().collection('collection').onSnapshot,
builder: (context, snapshot) {
...
下面我列出了一个列表,其中列出了迄今为止我在从Flitter移动应用程序到Flitter web应用程序的过程中遇到的变化:
文档=snapshot.data.docs.length中的文档
文档=firestore中的文档。集合'foo'。文档'bar'
reference=snapshot.ref中的ref
数据=快照中的数据。数据
方法setData from Firestore=set
方法updateData from Firestore=updateData:{'yourKey':'yourValue',}
希望这能有所帮助 当我尝试创建一个使用大量StreamBuilder的Flitter移动应用程序的web版本时,我也遇到了同样的问题。以下是我的作品: Pubspec.yaml依赖项:
firebase_web: ^5.0.9
firebase_core: ^0.4.3+2
在代码中:
import 'package:firebase_web/firestore.dart';
import 'package:firebase_web/firebase.dart';
body: new StreamBuilder(
stream: firestore().collection('collection').onSnapshot,
builder: (context, snapshot) {
...
下面我列出了一个列表,其中列出了迄今为止我在从Flitter移动应用程序到Flitter web应用程序的过程中遇到的变化:
文档=snapshot.data.docs.length中的文档
文档=firestore中的文档。集合'foo'。文档'bar'
reference=snapshot.ref中的ref
数据=快照中的数据。数据
方法setData from Firestore=set
方法updateData from Firestore=updateData:{'yourKey':'yourValue',}
希望这能有所帮助 谢谢。你能想出我看到错误的原因吗:“收益率”不是一种类型。关于yield querySnapshot.docs;?六羟甲基三聚氰胺六甲醚。。。。我希望这对您有用,因为我在这里的一些测试中使用了它:这应该有用:Stream Stream=fb.firestore.collectionMyCollection.onSnapshot;等待流{yield*snapshot.docs;}中的最终快照,谢谢。你能想出我看到错误的原因吗:“收益率”不是一种类型。关于yield querySnapshot.docs;?六羟甲基三聚氰胺六甲醚。。。。我希望这对您有用,因为我在这里的一些测试中使用了它:这应该有用:Stream Stream=fb.firestore.collectionMyCollection.onSnapshot;等待流{yield*snapshot.docs;}中的最终快照。我实际上还没有尝试过这个方法,看看它是否有效,我可能不会尝试。在谷歌真正支持之前,我决定放弃Flitter。同时,让我们假设这是可行的,谢谢。@Lorence,我不能让你的方法起作用。。。我做错了什么?我知道如何在Firestore中正常使用,我不明白我需要做什么我想使用Streambuilder返回一个ListView.builder,它返回一个基于集合中文档快照的小部件列表…Hi@Chris如果我理解正确,你想要一个Streambuilder,它返回一个基于快照的小部件列表ListView.builder。我在github上举了一个例子。让我知道这是否接近你想要的嗨,洛伦斯,是的,这正是我想要做的。我理解这个结构,但流只是没有返回任何数据,或者如果是,它没有在小部件构建之前等待数据。。。所以我得到的是:有点不对劲。。无论我如何尝试查询,例如ifsnapshot.hasData{},或者我是否以集合或文档为目标…我实际上没有尝试此方法以查看它是否有效,我可能不会尝试。在谷歌真正支持之前,我决定放弃Flitter。同时,让我们假设这是可行的,谢谢。@Lorence,我不能让你的方法起作用。。。我做错了什么?我知道如何在Firestore中正常使用,我不知道我需要做什么
要使用Streambuilder返回一个ListView.builder,它返回一个基于集合中文档快照的小部件列表…您好@Chris如果我理解正确,您需要一个Streambuilder,它返回一个基于快照的小部件列表ListView.builder。我在github上举了一个例子。让我知道这是否接近你想要的嗨,洛伦斯,是的,这正是我想要做的。我理解这个结构,但流只是没有返回任何数据,或者如果是,它没有在小部件构建之前等待数据。。。所以我得到的是:有点不对劲。。无论我如何尝试查询,例如ifsnapshot.hasData{},或者我是否以集合或文档为目标。。。