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_firestore0.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&lt;DocumentSnapshot&gt; getData() async await Firebase.initializeApp(); return await FirebaseFirestore.instance.collection("users").doc("docId").get();

以上是关于cloud_firestore 0.14.0 如何使用数据方法的主要内容,如果未能解决你的问题,请参考以下文章

如何修复颤动的 cloud_firestore 依赖项?

如何解决“由于上述问题,无法构建插件 cloud_firestore。”

如何使用flutter cloud_firestore包传递firestore auth token

Flutter Firestore [cloud_firestore/not-found] 找不到某些请求的文档

在 `.symlinks/plugins/cloud_firestore/ios` 中找不到 `cloud_firestore` 的 podspec

如何在颤振中降级软件包?