cloud_firestore 0.14.0 как использовать метод данных

Aug 19 2020

Я обновился до cloud_firestore 0.14.0

Есть несколько изменений:

ПРЕРЫВАНИЕ: теперь получателем данных является метод data ().

До обновления вот как я использовал геттер 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'];
        }

Ответы

3 PeterHaddad Aug 19 2020 at 19:00

Начиная с версии 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();
  }
}