cloud_firestore 0.14.0 cómo usar el método de datos

Aug 19 2020

Actualicé a cloud_firestore 0.14.0

Hay algunos cambios de descanso:

ÚLTIMA HORA: el captador de datos ahora es un método de datos() en su lugar.

Antes de la actualización, así es como usaba el getterdata

Antes:

Future<String> getUsernameFromUserId(String userId) async {
        return (await _userFirestoreCollection.document(userId).get()).data['screenName'];
    }

Así es como uso los datos ahora... Pero no parece estar funcionando... Ahora:

Future<String> getUsernameFromUserId(String userId) async {
            return (await _userFirestoreCollection.document(userId).get()).data()['screenName'];
        }

Respuestas

3 PeterHaddad Aug 19 2020 at 19:00

A partir de la versión cloud_firestore0.14.0:

Se cambió el método document()y ahora debe usar en su doc()lugar, por lo tanto, en su código debe hacer lo siguiente:

    Future<String> getUsernameFromUserId(String userId) async {
        return (await _userFirestoreCollection.doc(userId).get()).data()["screenName"];
    }

Ejemplo:

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();
  }
}