Я пытаюсь сделать приложение, похожее на Snapchat, во Флаттере с помощью сообщений и прочего.Проблема странная.Когда текущий пользователь не имеет истории чата и отправляет первое сообщение, создается новый чат, а затем сообщение отправляется.и если он отправляет другое сообщение под историей, а не просмотр чата, то сообщение отправляется, и журнал чата обновляется.
Вот проблема.Когда я отправляю новое сообщение в историю другого пользователя в первый раз, уже имея одну историю чата, так что это будет второй журнал чата, он создает новый журнал чата и отправляет сообщение, но когда я отправляю второе сообщениетот же пользователь создает второй журнал чата для того же пользователя, отправляет сообщение, затем по каким-то причинам неожиданно находит предыдущий журнал чата, обновляет этот журнал и снова отправляет сообщение.Он продолжает делать это -> Создание нового журнала чата и неоднократно обновляет старый журнал чата.И когда я отправляю еще одно сообщение предыдущему пользователю, он создает несколько чатов и обновляет их все новым сообщением.
Цель состоит в том, чтобы проверить, существует ли чат между пользователями, и если это так, просто добавьтеновое сообщение обновите журнал чата, а если этого не произойдет, просто создайте новый чат и отправьте сообщение, затем обновите журнал чата.
Под журналом я имею в виду последнее сообщение и метку времени, которые вы видите.перед входом в реальный чат.
Журнал выглядит следующим образом: пронумерованные сообщения предназначены для первого пользователя, а письма - для второго пользователя.
Чат добавляется в текущийпеременная чатов пользователя в качестве унаследованного виджета.
Журнал:
flutter: No chats for me
flutter: ----------------------------------------
flutter: STARTED
flutter: Message: 1 // Numbers are for the first user
flutter: User chats length: 0
flutter: CHAT IS EMPTY, CREATE NEW CHAT, AND SENT MESSAGE
flutter: New Chat Added
flutter: Message Sent
flutter: ----------------------------------------
flutter: STARTED
flutter: Message: 2
flutter: User chats length: 1
flutter: CHAT IS NOT EMPTY
flutter: LOOKING FOR CHATS
flutter: FOUND CHAT, MESSAGE SENT, UPDATING CHAT
flutter: Message Sent
flutter: ----------------------------------------
flutter: STARTED
flutter: Message: 3
flutter: User chats length: 1
flutter: CHAT IS NOT EMPTY
flutter: LOOKING FOR CHATS
flutter: FOUND CHAT, MESSAGE SENT, UPDATING CHAT
flutter: Message Sent
flutter: ----------------------------------------
flutter: STARTED
flutter: Message: 4
flutter: User chats length: 1
flutter: CHAT IS NOT EMPTY
flutter: LOOKING FOR CHATS
flutter: FOUND CHAT, MESSAGE SENT, UPDATING CHAT
flutter: Message Sent
flutter: ----------------------------------------
flutter: STARTED
flutter: Message: A // Letters are for the second user
flutter: User chats length: 1
flutter: CHAT IS NOT EMPTY
flutter: LOOKING FOR CHATS
flutter: DID NOT FIND CHAT, CREATED NEW CHAT, MESSAGE SENT
flutter: New Chat Added
flutter: Message Sent
flutter: ----------------------------------------
flutter: STARTED
flutter: Message: B
flutter: User chats length: 2
flutter: CHAT IS NOT EMPTY
flutter: LOOKING FOR CHATS
flutter: DID NOT FIND CHAT, CREATED NEW CHAT, MESSAGE SENT
flutter: LOOKING FOR CHATS
flutter: FOUND CHAT, MESSAGE SENT, UPDATING CHAT
flutter: New Chat Added
flutter: Message Sent
flutter: Message Sent
flutter: ----------------------------------------
flutter: STARTED
flutter: Message: C
flutter: User chats length: 3
flutter: CHAT IS NOT EMPTY
flutter: LOOKING FOR CHATS
flutter: DID NOT FIND CHAT, CREATED NEW CHAT, MESSAGE SENT
flutter: LOOKING FOR CHATS
flutter: FOUND CHAT, MESSAGE SENT, UPDATING CHAT
flutter: LOOKING FOR CHATS
flutter: FOUND CHAT, MESSAGE SENT, UPDATING CHAT
flutter: New Chat Added
flutter: Message Sent
flutter: Message Sent
flutter: Message Sent
flutter: ----------------------------------------
flutter: STARTED
flutter: Message: D
flutter: User chats length: 4
flutter: CHAT IS NOT EMPTY
flutter: LOOKING FOR CHATS
flutter: DID NOT FIND CHAT, CREATED NEW CHAT, MESSAGE SENT
flutter: LOOKING FOR CHATS
flutter: FOUND CHAT, MESSAGE SENT, UPDATING CHAT
flutter: LOOKING FOR CHATS
flutter: FOUND CHAT, MESSAGE SENT, UPDATING CHAT
flutter: LOOKING FOR CHATS
flutter: FOUND CHAT, MESSAGE SENT, UPDATING CHAT
flutter: New Chat Added
flutter: Message Sent
flutter: Message Sent
flutter: Message Sent
flutter: Message Sent
flutter: ----------------------------------------
flutter: STARTED
flutter: Message: 5 // When I send a message back to the first user
flutter: User chats length: 5
flutter: CHAT IS NOT EMPTY
flutter: LOOKING FOR CHATS
flutter: FOUND CHAT, MESSAGE SENT, UPDATING CHAT
flutter: LOOKING FOR CHATS
flutter: DID NOT FIND CHAT, CREATED NEW CHAT, MESSAGE SENT
flutter: LOOKING FOR CHATS
flutter: DID NOT FIND CHAT, CREATED NEW CHAT, MESSAGE SENT
flutter: LOOKING FOR CHATS
flutter: DID NOT FIND CHAT, CREATED NEW CHAT, MESSAGE SENT
flutter: LOOKING FOR CHATS
flutter: DID NOT FIND CHAT, CREATED NEW CHAT, MESSAGE SENT
flutter: New Chat Added
flutter: New Chat Added
flutter: New Chat Added
flutter: New Chat Added
flutter: Message Sent
flutter: Message Sent
flutter: Message Sent
flutter: Message Sent
flutter: Message Sent
Код:
Expanded(
child: TextBox(
margin: EdgeInsets.only(left: 25.0, right: 25.0),
controller: this._textEditingController,
focusNode: this._focusNode,
hintText: 'Send a message',
hintStyle: TextStyle(
color: Config.tColor.withOpacity(0.8),
fontSize: 15.0,
fontWeight: FontWeight.w500,
),
keyboardType: TextInputType.text,
textInputAction: TextInputAction.next,
textCapitalization: TextCapitalization.sentences,
fontSize: 15.0,
fontWeight: FontWeight.w500,
autoFocus: false,
autoCorrect: true,
maxLines: null,
onChanged: (s) {},
onSubmitted: (s) async {
User cUser = InheritedUser.of(context).user;
print('----------------------------------------');
print('STARTED');
print('Message: $s');
print('User chats length: ${cUser.chats.length}');
DateTime now = DateTime.now();
if (cUser.chats.isNotEmpty) {
print('CHAT IS NOT EMPTY');
cUser.chats.forEach((chat) async {
print('LOOKING FOR CHATS');
if (chat.users.contains(widget.posts[this._index].user) && chat.users.contains(APIs().users.collection.document(cUser.userID))) {
print('FOUND CHAT, MESSAGE SENT, UPDATING CHAT');
await this._sendMessage(
cUser: cUser,
chatID: chat.chatID,
messageID: APIs().chats.collection.document().documentID,
type: 'Text',
message: s,
now: now,
onSuccess: () {
print('Message Sent');
this._textEditingController.text = '';
FocusScope.of(context).requestFocus(FocusNode());
this._countDownSubscription.resume();
return;
});
return;
} else {
print('DID NOT FIND CHAT, CREATED NEW CHAT, MESSAGE SENT');
await this._createChat(
cUser: cUser,
now: now,
then: (chatID) async {
await this._sendMessage(
cUser: cUser,
chatID: chatID,
messageID: APIs().chats.collection.document().documentID,
type: 'Text',
message: s,
now: now,
onSuccess: () {
print('Message Sent');
this._textEditingController.text = '';
FocusScope.of(context).requestFocus(FocusNode());
this._countDownSubscription.resume();
return;
});
return;
});
return;
}
});
} else {
print('CHAT IS EMPTY, CREATE NEW CHAT, AND SENT MESSAGE');
await this._createChat(
cUser: cUser,
now: now,
then: (chatID) async {
await this._sendMessage(
cUser: cUser,
chatID: chatID,
messageID: APIs().chats.collection.document().documentID,
type: 'Text',
message: s,
now: now,
onSuccess: () {
print('Message Sent');
this._textEditingController.text = '';
FocusScope.of(context).requestFocus(FocusNode());
this._countDownSubscription.resume();
return;
});
return;
});
return;
}
},
onTap: () {
this._countDownSubscription.pause();
}),
)
Почему это работает, если под текущим пользователем есть только один чат, ностановится грязно, когда их больше одного?