Browse Source

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

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

78
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( //音乐卡片
context, musicId, musicName, musicUrl, musicSinger, musicImage); return buildMusicItem(
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 playlist = final rawList = card_musiclist['musics'] as List? ?? [];
rawList.map((e) => Map<String, dynamic>.from(e)).toList(); final playlist =
//音乐播放列表 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,30 +268,32 @@ 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 list = rawList.map((e) => Map<String, dynamic>.from(e)).toList(); final rawList = card_navigation['items'] as List? ?? [];
final rawNavigation = card_navigation['navigation']; final list = rawList.map((e) => Map<String, dynamic>.from(e)).toList();
final Map<String, dynamic>? navigation = final rawNavigation = card_navigation['navigation'];
rawNavigation is Map<String, dynamic> ? rawNavigation : null; final Map<String, dynamic>? navigation =
print("导航实时数据 ${rawNavigation}"); rawNavigation is Map<String, dynamic> ? rawNavigation : null;
// 导航 print("导航实时数据 ${rawNavigation}");
return navigationCard(context, // 导航
start: start, return navigationCard(context,
end: end, start: start,
destination: destination, end: end,
modes: list, destination: destination,
navigation: navigation); modes: list,
navigation: navigation);
}
} }
// if (message.contains('播放列表') || message.contains('音乐')) { // if (message.contains('播放列表') || message.contains('音乐')) {

Loading…
Cancel
Save