0

I would like to understand how to use Firebase with Flutter as of February 2021. My tutorial refers to Firestore.instance but it doesn't work. Eventually I muddled into FirebaseFirestore.instance, are these the same libraries?

My code block I am working with is below. However, I am stuck at this compiler error:

The argument type 'Future<GridView>' can't be assigned to the parameter type 'Widget'.

How can I get rid of this error?

import 'package:flutter/material.dart';
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:cloud_firestore/cloud_firestore.dart';

class MyFavorites extends StatelessWidget {

  @override
  Widget build(BuildContext ctx) {

    return Scaffold(
      appBar: MainAppBar(),
      body: displayFavorites();
      
    );
  }

Future<DocumentSnapshot> _userName() async {
FirebaseFirestore firestore = FirebaseFirestore.instance;
    final user = await FirebaseAuth.instance.currentUser;
    final userData = await firestore.collection('AppUser').doc(user.uid).get();
    return userData;
  }

  Future<GridView> displayFavorites() async {
    DocumentSnapshot userName = await _userName();
    return GridView.count(
      crossAxisCount: 2,
      // Generate 4 widgets that display their index in the List.
      children: List.generate(6, (index) {
        return Center(
          //child: Text(favorites.elementAt(index)),
          child: Text(userName["firstName"]),
   
        );
      }),
    );
  }
}
Lucky
  • 627
  • 5
  • 15

1 Answers1

0

Try to get your username in a separate function & not use Future as a widget. Here's a sample code:

  class MyFavorites extends StatefulWidget {

      @override
      _MyFavoritesState createState() => _MyFavoritesState();
    }

    class _MyFavoritesState extends State<MyFavorites> {
    String userName;

    @override
    void initState() {
      super.initState();
      _userName();
    }

    @override
    Widget build(BuildContext ctx) {

      return Scaffold(
        appBar: MainAppBar(),
        body: (userName==null)?CircularProgressIndicator(): displayFavorites();
        
      );
    }

    Future<DocumentSnapshot> _userName() async {
    FirebaseFirestore firestore = FirebaseFirestore.instance;
        final user = await FirebaseAuth.instance.currentUser;
        final userData = await firestore.collection('AppUser').doc(user.uid).get();
        // return userData;
        if(userData["firstName"] != null)
          setState(){
            userName = userData["firstName"];
          }
      }

      GridView displayFavorites() async {
        return GridView.count(
          crossAxisCount: 2,
          // Generate 4 widgets that display their index in the List.
          children: List.generate(6, (index) {
            return Center(
              //child: Text(favorites.elementAt(index)),
              child: Text(userName),
      
            );
          }),
        );
      }
    }
Nitesh
  • 438
  • 2
  • 10