Flutter Chat - SwipeTo回复,回复错误消息[带有代码片段]

问题描述 投票:0回答:2

我有一个 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() 会收到错误的消息(如果第一个事件是我回复,则工作正常)。

flutter chat swipe reply
2个回答
1
投票

有一些问题,我认为是因为 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"),
)

0
投票

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。

© www.soinside.com 2019 - 2024. All rights reserved.