Flutter聊天功能基于双用户ID生成唯一chatRoomId不一致问题
问题根因
现有getChatRoomIdByUserId方法仅对比两个用户ID的第一个字符的ASCII值,当两个ID首字符相同时(你给出的示例中两个ID均以1开头),会直接按照参数传入的顺序拼接ID,传入参数顺序不同就会生成两个不同的房间ID,不符合双向进入同一房间的要求。
修复方案
直接对两个完整的用户ID做全量字典序对比,保证无论参数传入顺序如何,最终拼接的ID顺序固定:
// 修复后的ID生成方法 String getChatRoomIdByUserId(String a, String b) { if (a.compareTo(b) > 0) { return "$b-$a"; } else { return "$a-$b"; } }
补充说明
- Dart的
String.compareTo方法会逐位对比两个字符串的字符编码,全量对比的结果是稳定的,不存在首字符相同就判断失效的问题 - 原代码中拼接ID时的
\-属于不必要的转义,Dart字符串拼接时-不需要加反斜杠,可直接删除避免ID中出现多余的转义符
内容的提问来源于stack exchange,提问作者raman shariati
相关产品推荐
相关产品推荐

