cloud_firestore 0.14.0 如何使用数据方法
Posted
技术标签:
【中文标题】cloud_firestore 0.14.0 如何使用数据方法【英文标题】:cloud_firestore 0.14.0 how to use the data method 【发布时间】:2020-12-08 16:25:42 【问题描述】:我更新到 cloud_firestore 0.14.0
有一些突破性变化:
BREAKING:get data getter 现在是一个 data() 方法。
在更新之前,我是这样使用 getter data
之前:
Future<String> getUsernameFromUserId(String userId) async
return (await _userFirestoreCollection.document(userId).get()).data['screenName'];
这就是我现在使用数据的方式.. 但似乎不起作用... 现在:
Future<String> getUsernameFromUserId(String userId) async
return (await _userFirestoreCollection.document(userId).get()).data()['screenName'];
【问题讨论】:
它在 DocumentSnapshot 下的更改日志中。以上是引用 FlutterFire 迁移文档:firebase.flutter.dev/docs/migration/#firestore 另外,FlutterFire 的“读取数据”部分firebase.flutter.dev/docs/firestore/usage#read-data 【参考方案1】:从版本cloud_firestore
0.14.0开始:
方法document()
已更改,现在您必须改用doc()
,因此在您的代码中您必须执行以下操作:
Future<String> getUsernameFromUserId(String userId) async
return (await _userFirestoreCollection.doc(userId).get()).data()["screenName"];
例子:
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:flutter/material.dart';
import 'package:firebase_core/firebase_core.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget
// This widget is the root of your application.
@override
Widget build(BuildContext context)
return MaterialApp(
debugShowCheckedModeBanner: false,
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: FirstRoute(title: 'First Route'),
);
class FirstRoute extends StatefulWidget
FirstRoute(Key key, this.title) : super(key: key);
final String title;
@override
_FirstRouteState createState() => _FirstRouteState();
class _FirstRouteState extends State<FirstRoute>
@override
void initState()
super.initState();
@override
Widget build(BuildContext context)
return Scaffold(
appBar: AppBar(
title: Text("test"),
),
body: FutureBuilder(
future: getData(),
builder: (context, AsyncSnapshot<DocumentSnapshot> snapshot)
if (snapshot.connectionState == ConnectionState.done)
return Column(
children: [
Container(
height: 27,
child: Text(
"Name: $snapshot.data.data()['name']",
overflow: TextOverflow.fade,
style: TextStyle(fontSize: 20),
),
),
],
);
else if (snapshot.connectionState == ConnectionState.none)
return Text("No data");
return CircularProgressIndicator();
,
));
Future<DocumentSnapshot> getData() async
await Firebase.initializeApp();
return await FirebaseFirestore.instance
.collection("users")
.doc("docID")
.get();
【讨论】:
抱歉,我确实有文档。只是想知道 .data()["screenName"] 语法好吗? 它返回 null,所以只是确保这是正确的方法 你可以试试void getUsernameFromUserId(String userId) FirebaseFirestore.instance.collection("test").doc(userId).get().then((value) print(value.data()); );
,但是用你自己的收藏,告诉我你得到了什么
@flutter 你得到了什么?
确保你打电话给await Firebase.initializeApp();
,假设在未来的建设者中,Future<DocumentSnapshot> getData() async await Firebase.initializeApp(); return await FirebaseFirestore.instance.collection("users").doc("docId").get();
以上是关于cloud_firestore 0.14.0 如何使用数据方法的主要内容,如果未能解决你的问题,请参考以下文章
如何解决“由于上述问题,无法构建插件 cloud_firestore。”
如何使用flutter cloud_firestore包传递firestore auth token
Flutter Firestore [cloud_firestore/not-found] 找不到某些请求的文档
在 `.symlinks/plugins/cloud_firestore/ios` 中找不到 `cloud_firestore` 的 podspec