参数类型 'Future<GridView>' 不能分配给参数类型 'Widget'

时间:2021-02-08 11:47:08

标签: firebase flutter dart

我想了解如何在 2021 年 2 月之前将 Firebase 与 Flutter 结合使用。我的教程参考了 Firestore.instance,但它不起作用。最终我陷入了 FirebaseFirestore.instance,这些是同一个库吗?

我正在使用的代码块如下。但是,我被这个编译器错误困住了:

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

我怎样才能摆脱这个错误?

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"]),
   
        );
      }),
    );
  }
}

1 个答案:

答案 0 :(得分:0)

尝试在单独的函数中获取您的用户名,不要将 Future 用作小部件。这是一个示例代码:

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