Browse Source

feat(message): 添加语音消息展示功能

- 引入 VoiceItem 组件用于展示语音消息
- 在 MessageItem 中增加对 VOICE 类型消息的处理逻辑
- 根据消息类型动态渲染语音消息组件
- 优化时间标签构建逻辑,提升代码可读性- 移除冗余的空行和不必要的间距设置- 保持非文本消息的占位符显示方式不变
ios
Jolie 4 months ago
parent
commit
59c80423fc
1 changed files with 20 additions and 21 deletions
  1. 41
      lib/widget/message/message_item.dart

41
lib/widget/message/message_item.dart

@ -4,6 +4,7 @@ import 'package:im_flutter_sdk/im_flutter_sdk.dart';
import 'text_item.dart';
import 'image_item.dart';
import 'voice_item.dart';
class MessageItem extends StatelessWidget {
final EMMessage message;
@ -39,16 +40,23 @@ class MessageItem extends StatelessWidget {
formattedTime: formatMessageTime(message.serverTime),
);
}
//
else if (message.body.type == MessageType.VOICE) {
final voiceBody = message.body as EMVoiceMessageBody;
return VoiceItem(
voiceBody: voiceBody,
isSentByMe: isSentByMe,
showTime: shouldShowTime(),
formattedTime: formatMessageTime(message.serverTime),
);
}
//
return Column(
children: [
if (shouldShowTime()) _buildTimeLabel(),
Container(
padding: EdgeInsets.symmetric(
horizontal: 16.w,
vertical: 8.h,
),
padding: EdgeInsets.symmetric(horizontal: 16.w, vertical: 8.h),
child: Text('不支持的消息类型'),
),
],
@ -60,7 +68,7 @@ class MessageItem extends StatelessWidget {
if (previousMessage == null) {
return true; //
}
// 201200000
return (message.serverTime - previousMessage!.serverTime) > 1200000;
}
@ -68,22 +76,15 @@ class MessageItem extends StatelessWidget {
//
Widget _buildTimeLabel() {
final formattedTime = formatMessageTime(message.serverTime);
return Container(
alignment: Alignment.center,
padding: EdgeInsets.symmetric(
horizontal: 16.w,
),
padding: EdgeInsets.symmetric(horizontal: 16.w),
child: Container(
padding: EdgeInsets.symmetric(
horizontal: 12.w,
),
padding: EdgeInsets.symmetric(horizontal: 12.w),
child: Text(
formattedTime,
style: TextStyle(
fontSize: 12.sp,
color: Colors.grey,
),
style: TextStyle(fontSize: 12.sp, color: Colors.grey),
),
),
);
@ -96,7 +97,7 @@ class MessageItem extends StatelessWidget {
final today = DateTime(now.year, now.month, now.day);
final yesterday = DateTime(now.year, now.month, now.day - 1);
final messageDate = DateTime(date.year, date.month, date.day);
if (messageDate.isAtSameMomentAs(today)) {
//
return '今天 ${date.hour.toString().padLeft(2, '0')}:${date.minute.toString().padLeft(2, '0')}';
@ -108,6 +109,4 @@ class MessageItem extends StatelessWidget {
return '${date.month}${date.day}${date.hour.toString().padLeft(2, '0')}:${date.minute.toString().padLeft(2, '0')}';
}
}
}
}
Loading…
Cancel
Save