javascript - NoSuchMethodError:在 null 上调用了方法“[]”。I/flutter(23049):接收者:null I/flutter(23049):尝试调用:[](“conversationID”)
问题描述
我正在尝试使用 Flutter/dart 语言在我的应用程序中使用 firebase firestore 实现消息功能,但出现以下错误。
NoSuchMethodError:在 null 上调用了方法“[]”。
I/颤振(23049):接收器:空
I/flutter(23049):尝试调用:[](“conversationID”)
火库功能:
"use strict";
Object.defineProperty(exports, "__esModule",{value: true});
const functions = require("firebase-functions");
const admin = require("firebase-admin");
admin.initializeApp();
exports.onConversationCreated =
functions.firestore.document("Conversations/{conversationID}")
.onCreate((snapshot, context) => {
let data = snapshot.data();
let conversationID = context.params.conversationID;
if (data) {
let members = data.members;
for (let index = 0; index < members.length; index++) {
let currentUserID = members[index];
let remainingUserIDs = members.filter((u) => u !== currentUserID);
remainingUserIDs.forEach((m) => {
return admin.firestore().collection("Users").doc(m).get().then((_doc) => {
let userData = _doc.data();
if (userData) {
return admin.firestore().collection("Users").doc(currentUserID).collection("Conversations").doc(m).create({
"conversationID": conversationID,
"image": userData.image,
"name": userData.name,
"unseenCount": 0,
});
}
return null;
}).catch(() => { return null; });
});
}
}
return null;
});
Flutter 数据库服务类:
Future<void> createOrGetConversartion(String _currentID, String _recepientID,
Future<void> _onSuccess(String _conversationID)) async {
var _ref = _db.collection(_conversationsCollection);
var _userConversationRef = _db
.collection(_userCollection)
.doc(_currentID)
.collection(_conversationsCollection);
try {
var conversation =
await _userConversationRef.doc(_recepientID).get();
if (conversation.data != null) {
return _onSuccess(conversation.data()["conversationID"]);
} else {
var _conversationRef = _ref.doc();
await _conversationRef.set(
{
"members": [_currentID, _recepientID],
"ownerID": _currentID,
'messages': [],
},
);
return _onSuccess(_conversationRef.id);
}
} catch (e) {
print(e);
}
}
解决方案
您的空检查在这里似乎不正确。
if (conversation.data != null) {
return _onSuccess(conversation.data()["conversationID"]);
}
您正在检查是否为conversation.data
空,但conversation.data()
在空检查后使用。这仅检查该方法是否存在。
而不是这个,你应该做这样的事情。
final data = conversation.data();
if (data != null) {
return _onSuccess(data["conversationID"]);
}
推荐阅读
- javascript - 在我的打字代码开始之前需要一个时间延迟,在第二次迭代之前需要一个时间延迟
- android - onRangeStart() 在阅读段落时停止获取回调(遇到标点符号后)
- cors - Access-Control-Allow-Methods 没有停止 POST 调用
- python - 无法通过 API 响应排序
- python - 用于返回 jitclass 的函数的 Numba jit() 函数签名
- javascript - 如何在window.open javascript中将自定义对象作为参数传递
- django - 如何在django模板中显示其他地方的图像
- vue.js - v-mask 将电话号码屏蔽为巴西格式
- autodesk-forge - VS Code 的 Forge 扩展
- mysql - SQL noob 尝试使用连接进行更新查询