Flutter error: The argument type 'DocumentSnapshot<Object?>? can't be assigned to parameter 'DocumentSnapshot<Object?>

Flutter error: The argument type 'DocumentSnapshot<Object?>? can't be assigned to parameter 'DocumentSnapshot<Object?>

当我尝试 运行 我的 flutter 应用程序时收到此错误代码,我不知道如何解决它,请帮助:

Error: The argument type 'DocumentSnapshot<Object?>?' can't be assigned to the parameter type 'DocumentSnapshot<Object?>' because 'DocumentSnapshot<Object?>?' is nullable and 'DocumentSnapshot<Object?>' isn't.

  • 'DocumentSnapshot' is from 'package:cloud_firestore/cloud_firestore.dart' ('/C:/flutter/.pub-cache/hosted/pub.dartlang.org/cloud_firestore-3.1.0/lib/cloud_firestore.dart').

  • 'Object' is from 'dart:core'.

     MyUser user = MyUser.fromDocument(snapshot.data);
                                                ^
    

这是我的用户参考:

final CollectionReference usersRef =  FirebaseFirestore.instance.collection('users');

这是我要构建的小部件:

Widget buildProfileHeader(context) {

    final myuser = Provider.of<MyUser>(context);

    return FutureBuilder<DocumentSnapshot>(
      future: usersRef.doc(myuser.id).get(),
      builder: (context, snapshot) {
        if(!snapshot.hasData){
          return circularProgress();
        }
        MyUser user = MyUser.fromDocument(snapshot.data);

        return Row(...)

这是我的用户工厂:

import 'package:cloud_firestore/cloud_firestore.dart';

class MyUser{
  final String id;
  final String email;
  final String photoUrl;
  final String displayName;
  final String username;

  MyUser({
    required this.id,
    required this.email,
    required this.photoUrl,
    required this.displayName,
    required this.username,
  });

  factory MyUser.fromDocument(DocumentSnapshot doc){
    return MyUser(
        id: doc['id'].toString(),
        username: doc['username'].toString(),
        email: doc['email'].toString(),
        photoUrl: doc['photoUrl'].toString(),
        displayName: doc['displayName'].toString(),
    );
  }

我不明白我该如何解决这个问题。我尝试使用 snapshot.data.data(),但是虽然它修复了我当前的错误,但它给了我新的错误消息:

error: The method 'data' can't be unconditionally invoked because the receiver can be 'null'. (unchecked_use_of_nullable_value at [flutter_app] lib\pages\profile_screen.dart:58)

Yuu 只需要使用 :

MyUser user = MyUser.fromDocument(snapshot.data!);

因为此时在您的代码中,即使您测试了 snapshot.hasData,dart 也会告诉您数据可能为空...但是您已经处理了这种情况,所以可以添加一个 !