Browse Source

fix(agent): 修复消息气泡卡片数据可能为null时的处理

添加对卡片数据可能为null的检查,并为各类型卡片提供默认值以避免空指针异常
newdev_shunjiawei
lxm 1 year ago
parent
commit
317b42d11f
  1. 40
      lib/modules/agent/views/message_bubble.dart

40
lib/modules/agent/views/message_bubble.dart

@ -233,29 +233,33 @@ class MessageBubble extends GetView<AgentController> {
// 判断消息类型,显示不同的卡片 // 判断消息类型,显示不同的卡片
if (meta!.keys.contains('music_play')) { if (meta!.keys.contains('music_play')) {
final card_music = final card_music =
meta!["music_play"]['card_music'] as Map<String, dynamic>; meta!["music_play"]['card_music'] as Map<String, dynamic>?;
final musicId = card_music!['id']; if (card_music != null) {
final musicName = card_music!['name'] as String; final musicId = card_music['id'];
final musicUrl = card_music!['url'] as String; final musicName = card_music['name'] as String? ?? '未知歌曲';
final musicSinger = card_music!['sgener'] as String; final musicUrl = card_music['url'] as String? ?? '';
final musicImage = card_music!['image'] as String; final musicSinger = card_music['sgener'] as String? ?? '未知歌手';
final musicImage = card_music['image'] as String? ?? '';
//音乐卡片 //音乐卡片
return buildMusicItem( return buildMusicItem(
context, musicId, musicName, musicUrl, musicSinger, musicImage); context, musicId, musicName, musicUrl, musicSinger, musicImage);
}
} else if (meta!.keys.contains('music_playlist')) { } else if (meta!.keys.contains('music_playlist')) {
final card_musiclist = final card_musiclist =
meta!["music_playlist"]['card_musiclist'] as Map<String, dynamic>; meta!["music_playlist"]['card_musiclist'] as Map<String, dynamic>?;
final rawList = card_musiclist['musics'] as List; if (card_musiclist != null) {
final rawList = card_musiclist['musics'] as List? ?? [];
final playlist = final playlist =
rawList.map((e) => Map<String, dynamic>.from(e)).toList(); rawList.map((e) => Map<String, dynamic>.from(e)).toList();
//音乐播放列表 //音乐播放列表
return buildMusicContent(context, playlist); return buildMusicContent(context, playlist);
}
} else if (meta!.keys.contains('maps_weather')) { } else if (meta!.keys.contains('maps_weather')) {
final city = meta!['maps_weather']['city'] as String; final city = meta!['maps_weather']['city'] as String? ?? '未知城市';
final rawList = meta!['maps_weather']['forecasts'] as List; final rawList = meta!['maps_weather']['forecasts'] as List? ?? [];
final daylist = final daylist =
rawList.map((e) => Map<String, dynamic>.from(e)).toList(); rawList.map((e) => Map<String, dynamic>.from(e)).toList();
final now = daylist[0] as Map<String, dynamic>; final now = daylist.isNotEmpty ? daylist[0] : <String, dynamic>{};
//天气 //天气
return buildWeatherContent( return buildWeatherContent(
context, context,
@ -264,18 +268,19 @@ class MessageBubble extends GetView<AgentController> {
daylist, daylist,
); );
} else if (meta!.keys.contains('card_travel')) { } else if (meta!.keys.contains('card_travel')) {
final rawList = meta!['card_travel']['items'] as List; final rawList = meta!['card_travel']['items'] as List? ?? [];
final travellist = final travellist =
rawList.map((e) => Map<String, dynamic>.from(e)).toList(); rawList.map((e) => Map<String, dynamic>.from(e)).toList();
// 旅游 // 旅游
return buildTravelContent(context, travellist); return buildTravelContent(context, travellist);
} else if (meta!.keys.contains('maps_route_navigation')) { } else if (meta!.keys.contains('maps_route_navigation')) {
final card_navigation = meta!['maps_route_navigation'] final card_navigation = meta!['maps_route_navigation']
['card_navigation'] as Map<String, dynamic>; ['card_navigation'] as Map<String, dynamic>?;
final start = card_navigation['start'] as String; if (card_navigation != null) {
final end = card_navigation['end'] as String; final start = card_navigation['start'] as String? ?? '';
final destination = card_navigation['destination'] as String; final end = card_navigation['end'] as String? ?? '';
final rawList = card_navigation['items'] as List; final destination = card_navigation['destination'] as String? ?? '';
final rawList = card_navigation['items'] as List? ?? [];
final list = rawList.map((e) => Map<String, dynamic>.from(e)).toList(); final list = rawList.map((e) => Map<String, dynamic>.from(e)).toList();
final rawNavigation = card_navigation['navigation']; final rawNavigation = card_navigation['navigation'];
final Map<String, dynamic>? navigation = final Map<String, dynamic>? navigation =
@ -289,6 +294,7 @@ class MessageBubble extends GetView<AgentController> {
modes: list, modes: list,
navigation: navigation); navigation: navigation);
} }
}
// if (message.contains('播放列表') || message.contains('音乐')) { // if (message.contains('播放列表') || message.contains('音乐')) {
// return _buildMusicContent(context); // return _buildMusicContent(context);

Loading…
Cancel
Save