我有一个 Flutter Chat,可以从 Firestore 传输消息,一切都很好。现在我添加了回复功能。我用 SwipeTo 小部件包装聊天气泡,滑动时会将消息信息添加到聊天页面中的消息字段中。 如果我进入屏幕时做的第一件事是回复消息,它会正常工作,但添加的任何消息(此回复或任何其他消息)似乎会弄乱一些索引,因为如果我继续回复消息,它就会开始“选择”错误的消息,对于任何添加的,1 与正确的相距更远,如果我离开聊天屏幕并重新打开,这个问题就可以解决。 我不知道当气泡本身传递信息来创建回复时,怎么会选择错误的。
聊天列表(我删除了混乱的内容以验证发件人、已读等):
Widget chatMessages() {
return StreamBuilder(
stream: messageStream,
builder: (context, AsyncSnapshot snapshot) {
return snapshot.hasData
? ListView.builder(
controller: scrollController,
physics: const BouncingScrollPhysics(),
padding: const EdgeInsets.only(bottom: 70, top: 16),
itemCount: snapshot.data!.docs.length,
reverse: true,
itemBuilder: (context, index) {
DocumentSnapshot ds = snapshot.data!.docs[index];
Map<String, dynamic> map = ds.data() as Map<String, dynamic>;
ChatMessage message = ChatMessage.fromMap(map);
return chatMessageTile(message);
})
: const Center(child: CircularProgressIndicator());
},
);
}
聊天板块:
Widget chatMessageTile(
ChatMessage message) {
return SwipeTo(
animationDuration: const Duration(milliseconds: 100),
offsetDx: 0.2,
iconColor: Colors.transparent,
onRightSwipe: () => onSwipedMessage(message),
child: Container(
child: ChatBubble(
chatMessage: message,
lastSender: lastSender,
lastSenderTs: lastSenderTs,
),
),
);
}
仅此而已,如果在初始加载后有消息添加到列表视图,则 onSwipedMessage() 会收到错误的消息(如果第一个事件是我回复,则工作正常)。
有一些问题,我认为是因为 swipe_to 包。这个问题仍然在他们的存储库中打开https://github.com/Purvik/SwipeTo/issues/17。但是您可以使用 GestureDetector 创建自定义小部件(例如 swipe_to)来检测用户滑动方向,如下所示。
GestureDetector(
onHorizontalDragEnd: (value) {
// Check swipe is to right or left
if (value.primaryVelocity! > 0) {
print("Right");
} else {
print("Left");
}
},
child: Text("your message"),
)
swipe_to 时出现问题,
德本用户:
swipe_to:^0.1.0-nullsafety.1
Aqui funciona sin Problemas,por alguna razón en las versiones más Modernas no funciona.
Tambien 探针与 GestureDetector,但动画中存在问题,是的,没有 pude hacerlo de forma unitaria para cada burbuja de chat。