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')) {
final card_music =
meta!["music_play"]['card_music'] as Map<String, dynamic>;
final musicId = card_music!['id'];
final musicName = card_music!['name'] as String;
final musicUrl = card_music!['url'] as String;
final musicSinger = card_music!['sgener'] as String;
final musicImage = card_music!['image'] as String;
//音乐卡片
return buildMusicItem(
context, musicId, musicName, musicUrl, musicSinger, musicImage);
meta!["music_play"]['card_music'] as Map<String, dynamic>?;
if (card_music != null) {
final musicId = card_music['id'];
final musicName = card_music['name'] as String? ?? '未知歌曲';
final musicUrl = card_music['url'] as String? ?? '';
final musicSinger = card_music['sgener'] as String? ?? '未知歌手';
final musicImage = card_music['image'] as String? ?? '';
//音乐卡片
return buildMusicItem(
context, musicId, musicName, musicUrl, musicSinger, musicImage);
}
} else if (meta!.keys.contains('music_playlist')) {
final card_musiclist =
meta!["music_playlist"]['card_musiclist'] as Map<String, dynamic>;
final rawList = card_musiclist['musics'] as List;
final playlist =
rawList.map((e) => Map<String, dynamic>.from(e)).toList();
//音乐播放列表
return buildMusicContent(context, playlist);
meta!["music_playlist"]['card_musiclist'] as Map<String, dynamic>?;
if (card_musiclist != null) {
final rawList = card_musiclist['musics'] as List? ?? [];
final playlist =
rawList.map((e) => Map<String, dynamic>.from(e)).toList();
//音乐播放列表
return buildMusicContent(context, playlist);
}
} else if (meta!.keys.contains('maps_weather')) {
final city = meta!['maps_weather']['city'] as String;
final rawList = meta!['maps_weather']['forecasts'] as List;
final city = meta!['maps_weather']['city'] as String? ?? '未知城市';
final rawList = meta!['maps_weather']['forecasts'] as List? ?? [];
final daylist =
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(
context,
@ -264,30 +268,32 @@ class MessageBubble extends GetView<AgentController> {
daylist,
);
} 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 =
rawList.map((e) => Map<String, dynamic>.from(e)).toList();
// 旅游
return buildTravelContent(context, travellist);
} else if (meta!.keys.contains('maps_route_navigation')) {
final card_navigation = meta!['maps_route_navigation']
['card_navigation'] as Map<String, dynamic>;
final start = card_navigation['start'] as String;
final end = card_navigation['end'] as String;
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 rawNavigation = card_navigation['navigation'];
final Map<String, dynamic>? navigation =
rawNavigation is Map<String, dynamic> ? rawNavigation : null;
print("导航实时数据 ${rawNavigation}");
// 导航
return navigationCard(context,
start: start,
end: end,
destination: destination,
modes: list,
navigation: navigation);
['card_navigation'] as Map<String, dynamic>?;
if (card_navigation != null) {
final start = card_navigation['start'] as String? ?? '';
final end = card_navigation['end'] as String? ?? '';
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 rawNavigation = card_navigation['navigation'];
final Map<String, dynamic>? navigation =
rawNavigation is Map<String, dynamic> ? rawNavigation : null;
print("导航实时数据 ${rawNavigation}");
// 导航
return navigationCard(context,
start: start,
end: end,
destination: destination,
modes: list,
navigation: navigation);
}
}
// if (message.contains('播放列表') || message.contains('音乐')) {

Loading…
Cancel
Save