首页 > 解决方案 > 未处理的异常:NoSuchMethodError:在 null 上调用了方法“[]”。访问firestore时

问题描述

我成功地将新用户注册到 firebase,但无法在 firestore 中创建用户的文档。我收到以下错误

[ERROR:flutter/lib/ui/ui_dart_state.cc(186)] Unhandled Exception: NoSuchMethodError: The method '[]' was called on null.
E/flutter (18812): Receiver: null
E/flutter (18812): Tried calling: []("uid")
E/flutter (18812): #0      Object.noSuchMethod (dart:core-patch/object_patch.dart:54:5)
E/flutter (18812): #1      new UserModel.fromMap (package:hil_app/models/user_model.dart:17:16)
E/flutter (18812): #2      AuthController.streamFirestoreUser.<anonymous closure> (package:hil_app/controllers/auth_controller.dart:66:40)

这是我的控制器类

  Stream<UserModel> streamFirestoreUser() {
    if (firebaseUser?.value?.uid != null) {
      return _db
          .doc('/users/${firebaseUser.value.uid}')
          .snapshots()
          .map((snapshot) => UserModel.fromMap(snapshot.data()));
    }
    return null;
  }

这是我的用户模型

    return UserModel(
      uid: data['uid'],
      name: data['name'] ?? '',
      email: data['email'] ?? '',
      password: data['password'] ?? '',
      dob: data['dob'] ?? '',
      gender: data['gender'] ?? '',
      phone: data['phone'] ?? '',
      agree: data['accept_terms'] ?? '',
      photoUrl: data['photoUrl'] ?? '',
    );
  }

关于如何解决这个错误的任何想法?

标签: firebasefluttergoogle-cloud-firestore

解决方案


看起来文档不存在,所以data()调用失败:

UserModel.fromMap(snapshot.data())

解决此问题的一种简单方法是在快照不存在时传递一个空映射:

UserModel.fromMap(snapshot.exists ? snapshot.data() : {})

推荐阅读