成功注册并登录第一个用户,但在注册第二个用户时出现以下错误

时间:2021-06-24 18:08:06

标签: firebase flutter dart

**我已成功注册并登录第一个用户,但现在控制台指向这两个 dart 文件,同时注册另一个用户并显示错误,例如 -The method '[]' was called on null and type '_InternalLinkedHashMap' 不是类型 'Map' 的子类型。请检查和帮助。谢谢。 **

usermodal

 import 'package:cloud_firestore/cloud_firestore.dart';

import 'cart_modal.dart';

class UserModel {
  static const ID = "uid";
  static const NAME = "name";
  static const EMAIL = "email";
  static const STRIPE_ID = "stripeId";
  static const CART = "cart";

  String _name;
  String _email;
  String _id;
  String _stripeId;

//  getters
  String get name => _name;

  String get email => _email;

  String get id => _id;

  String get stripeId => _stripeId;

  // public variables
  List<CartItemModel> cart;

  UserModel.fromDocument(DocumentSnapshot doc) {
    _name = doc.data()[NAME];
    _email = doc.data()[EMAIL];
    _id = doc.data()[ID];
    cart = _convertCartItems(doc.data()[CART] ?? []);

    _stripeId = doc.data()[STRIPE_ID] ?? '';
  }

  List<CartItemModel> _convertCartItems(List cart) {
    List<CartItemModel> convertedCart = [];
    for (Map cartItem in cart) {
      convertedCart.add(CartItemModel.fromMap(cartItem));
    }
    return convertedCart;
  }
}

用户服务

import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:vanfly/modals/cart_modal.dart';
import 'package:vanfly/modals/user_modal.dart';

class UserServices {
  FirebaseFirestore _firestore = FirebaseFirestore.instance;
  String collection = "users";

  createUser(Map data) async {
    _firestore.collection(collection).doc(data["uid"]).set(data);
  }

  Future<UserModel> getUserById(String id) async =>
      await _firestore.collection(collection).doc(id).get().then((doc) {
        return UserModel.fromDocument(doc);
      });

  void addToCart({String userId, CartItemModel cartItem}) {
    _firestore.collection(collection).doc(userId).update({
      "cart": FieldValue.arrayUnion([cartItem.toMap()])
    });
  }

  void removeFromCart({String userId, CartItemModel cartItem}) {
    _firestore.collection(collection).doc(userId).update({
      "cart": FieldValue.arrayRemove([cartItem.toMap()])
    });
  }
}

错误

> E/flutter ( 6087): [ERROR:flutter/lib/ui/ui_dart_state.cc(199)] Unhandled Exception: type '_InternalLinkedHashMap<dynamic, dynamic>' is not a subtype of type 'Map<String, dynamic>'
> E/flutter ( 6087): #0      UserServices.createUser (package:vanfly/services/user_services.dart:10:60)
> E/flutter ( 6087): #1      UserProvider.signUp.<anonymous closure> (package:vanfly/providers/user_provider.dart:49:23)
> E/flutter ( 6087): #2      UserProvider.signUp.<anonymous closure> (package:vanfly/providers/user_provider.dart:48:17)
E/flutter ( 6087): #3      _rootRunUnary (dart:async/zone.dart:1362:47)
E/flutter ( 6087): #4      _CustomZone.runUnary (dart:async/zone.dart:1265:19)
E/flutter ( 6087): <asynchronous suspension>
E/flutter ( 6087): #5      UserProvider.signUp (package:vanfly/providers/user_provider.dart:46:7)
E/flutter ( 6087): <asynchronous suspension>
E/flutter ( 6087): #6      _SignUpState.build.<anonymous closure> (package:vanfly/screens/signup.dart:155:46)
E/flutter ( 6087): <asynchronous suspension>
E/flutter ( 6087): 
E/flutter ( 6087): [ERROR:flutter/lib/ui/ui_dart_state.cc(199)] Unhandled Exception: NoSuchMethodError: The method '[]' was called on null.
E/flutter ( 6087): Receiver: null
E/flutter ( 6087): Tried calling: []("name")
E/flutter ( 6087): #0      Object.noSuchMethod (dart:core-patch/object_patch.dart:54:5)
E/flutter ( 6087): #1      new UserModel.fromDocument (package:vanfly/modals/user_modal.dart:30:23)
E/flutter ( 6087): #2      UserServices.getUserById.<anonymous closure> (package:vanfly/services/user_services.dart:15:22)
E/flutter ( 6087): #3      _rootRunUnary (dart:async/zone.dart:1362:47)
E/flutter ( 6087): #4      _CustomZone.runUnary (dart:async/zone.dart:1265:19)
E/flutter ( 6087): <asynchronous suspension>
E/flutter ( 6087): #5      UserServices.getUserById (package:vanfly/services/user_services.dart:13:53)
E/flutter ( 6087): <asynchronous suspension>
E/flutter ( 6087): #6      UserProvider._onStateChanged (package:vanfly/providers/user_provider.dart:78:20)
E/flutter ( 6087): <asynchronous suspension>
E/flutter ( 6087): 

0 个答案:

没有答案
相关问题