我已经做了几个月的Flutter 翼了,我知道如何解决无效的安全问题,但这个问题对我来说真的很复杂,我希望得到帮助.

我的问题是:

每当我try 登录时,我都会收到这样的错误:‘Null’类型不是类型映射、字符串、动态类型的子类型.我尽了最大努力找出哪里出了问题,但我无法, 任何帮助都是拯救生命...

import 'package:cloud_firestore/cloud_firestore.dart';

class User {
 final String email;
 final String uid;
 final String photoUrl;
 final String username;
 final String bio;
 final List followers;
 final List following;

const User({
  required this.email,
  required this.uid,
  required this.photoUrl,
  required this.username,
  required this.bio,
  required this.followers,
  required this.following,
 });

然后我继续在这里

Map<String, dynamic> toJson() => {
    "username": username,
    "uid": uid,
    "email": email,
    "photoUrl": photoUrl,
    "bio": bio,
    "followers": followers,
    "following": following,
  };

   static User fromSnap(DocumentSnapshot snap) {
   var snapshot = snap.data() as Map<String, dynamic>;

  return User(
     username: snapshot['username'],
     uid: snapshot['uid'],
     email: snapshot['email'],
     photoUrl: snapshot['photoUrl'],
     bio: snapshot['bio'],
     followers: snapshot['followers'],
     following: snapshot['following'],
      );
     }
    }

现在我在这一行得到了错误:空类型不是映射&lt;字符串,动态&>;的子类型

var snapshot = snap.data() as Map<String, dynamic>;

这都是我的问题, 提前谢谢你.

推荐答案

您的snapshot值是nullable,您try 将其强制转换为map,而不是如下所示:

var snapshot = snap.data() as Map<String, dynamic>;

试试这个:

var snapshot = snap.data() != null ? snap.data() as Map<String, dynamic> : {};

另外,请将您的返还更改为:

return User(
     username: snapshot['username']??””,
     uid: snapshot['uid'] ??””,
     email: snapshot['email'] ??””,
     photoUrl: snapshot['photoUrl'] ??””,
     bio: snapshot['bio'] ??””,
     followers: snapshot['followers'] ??[],
     following: snapshot['following'] ??[],
  );

Flutter相关问答推荐

flutter:如何将字体大小设置得更大(更大)

为什么我需要等待重新访问Firestore数据库,即使它已经做了之前?

Flutter 中的多页表现

如何正确处理Flutter 翼中使用火基时发生的碰撞?

如何让经过Firebase身份验证的用户能够将Zip文件上载到Firebase云存储?

Flutter /dart 列表.第一个子类列表中的Where()错误

如何在Flutter Webview包中触发基于URL导航的事件

Dart/Flutter 泛型:类型 '(SearchFilterItemModel) => String' 不是类型 '(SearchFilterItemModel) => String' 的子类型

Flutter记录返回类型问题

有没有办法在 google_map 上移动标记(向左或向右移动一些像素)?

点击后,将按钮的 colored颜色 禁用/更改一段时间

使 Row 中的元素保持在中间的空间,如果它们太大,则将它们包裹起来

Flutter - 展开图标无法正常工作

Flutterfire Configure - 未处理的异常和没有 firebase 初始化

如何将 chrome web 模拟器添加到 vs code

无法在Flutter 图像小部件中打开大尺寸(500MB)图像

如何使按钮被选中?

如何将图像网络装箱到具有边界半径的容器中

如何在没有上下文的情况下使用国际Flutter ?

Flutter audioplayers错误-单击音频按钮时不播放音频