From 317b42d11f5d003703fc2dca0f697ea20894f9a1 Mon Sep 17 00:00:00 2001 From: lxm <1274844347@qq.com> Date: Fri, 27 Jun 2025 20:03:12 +0800 Subject: [PATCH] =?UTF-8?q?fix(agent):=20=E4=BF=AE=E5=A4=8D=E6=B6=88?= =?UTF-8?q?=E6=81=AF=E6=B0=94=E6=B3=A1=E5=8D=A1=E7=89=87=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E5=8F=AF=E8=83=BD=E4=B8=BAnull=E6=97=B6=E7=9A=84=E5=A4=84?= =?UTF-8?q?=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 添加对卡片数据可能为null的检查,并为各类型卡片提供默认值以避免空指针异常 --- lib/modules/agent/views/message_bubble.dart | 78 +++++++++++---------- 1 file changed, 42 insertions(+), 36 deletions(-) diff --git a/lib/modules/agent/views/message_bubble.dart b/lib/modules/agent/views/message_bubble.dart index 819c822b9..0c4e2d782 100644 --- a/lib/modules/agent/views/message_bubble.dart +++ b/lib/modules/agent/views/message_bubble.dart @@ -233,29 +233,33 @@ class MessageBubble extends GetView { // 判断消息类型,显示不同的卡片 if (meta!.keys.contains('music_play')) { final card_music = - meta!["music_play"]['card_music'] as Map; - 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?; + 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; - final rawList = card_musiclist['musics'] as List; - final playlist = - rawList.map((e) => Map.from(e)).toList(); - //音乐播放列表 - return buildMusicContent(context, playlist); + meta!["music_playlist"]['card_musiclist'] as Map?; + if (card_musiclist != null) { + final rawList = card_musiclist['musics'] as List? ?? []; + final playlist = + rawList.map((e) => Map.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.from(e)).toList(); - final now = daylist[0] as Map; + final now = daylist.isNotEmpty ? daylist[0] : {}; //天气 return buildWeatherContent( context, @@ -264,30 +268,32 @@ class MessageBubble extends GetView { 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.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; - 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.from(e)).toList(); - final rawNavigation = card_navigation['navigation']; - final Map? navigation = - rawNavigation is Map ? rawNavigation : null; - print("导航实时数据 ${rawNavigation}"); - // 导航 - return navigationCard(context, - start: start, - end: end, - destination: destination, - modes: list, - navigation: navigation); + ['card_navigation'] as Map?; + 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.from(e)).toList(); + final rawNavigation = card_navigation['navigation']; + final Map? navigation = + rawNavigation is Map ? rawNavigation : null; + print("导航实时数据 ${rawNavigation}"); + // 导航 + return navigationCard(context, + start: start, + end: end, + destination: destination, + modes: list, + navigation: navigation); + } } // if (message.contains('播放列表') || message.contains('音乐')) {