From ab0035c91b8d8d0b8589745d1037d240904087f3 Mon Sep 17 00:00:00 2001 From: liwei1dao Date: Sat, 10 May 2025 19:22:29 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=8A=E4=BC=A0=E5=A4=A9=E6=B0=94=E9=A2=84?= =?UTF-8?q?=E6=8A=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../agent/controllers/agent_controller.dart | 2 +- lib/modules/agent/views/message_bubble.dart | 59 ++++++++++++++----- 2 files changed, 45 insertions(+), 16 deletions(-) diff --git a/lib/modules/agent/controllers/agent_controller.dart b/lib/modules/agent/controllers/agent_controller.dart index 614266ebb..07f5532a9 100644 --- a/lib/modules/agent/controllers/agent_controller.dart +++ b/lib/modules/agent/controllers/agent_controller.dart @@ -108,7 +108,7 @@ class AgentController extends GetxController { if (result.messages.isNotEmpty) { // 转换并添加消息到列表 final historyMessages = result.messages.map((msg) { - final meta = msg.metadata != null + final meta = msg.metadata != null && msg.metadata != "" ? jsonDecode(msg.metadata!) : null; // 如果为空,使用空对象 return Message( diff --git a/lib/modules/agent/views/message_bubble.dart b/lib/modules/agent/views/message_bubble.dart index 2bc3ea534..fa0c81478 100644 --- a/lib/modules/agent/views/message_bubble.dart +++ b/lib/modules/agent/views/message_bubble.dart @@ -1,3 +1,4 @@ +import 'package:common_utils/common_utils.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:intl/intl.dart'; @@ -211,8 +212,19 @@ class MessageBubble extends GetView { //音乐播放列表 return _buildMusicContent(context, playlist); } else if (mate!.keys.contains('card_weather')) { + final city = mate!['card_weather']['city'] as String; + + final rawList = mate!['card_weather']['dayweather'] as List; + final daylist = + rawList.map((e) => Map.from(e)).toList(); + final now = daylist[0]; //天气 - return _buildWeatherContent(context); + return _buildWeatherContent( + context, + city, + now, + daylist, + ); } // if (message.contains('播放列表') || message.contains('音乐')) { @@ -659,7 +671,8 @@ class MessageBubble extends GetView { } /// 构建天气内容卡片 - Widget _buildWeatherContent(BuildContext context) { + Widget _buildWeatherContent(BuildContext context, String city, + Map now, List> days) { return Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ @@ -701,7 +714,7 @@ class MessageBubble extends GetView { crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( - '北京', + city, style: TextStyle( fontSize: 16, fontWeight: FontWeight.w600, @@ -710,7 +723,7 @@ class MessageBubble extends GetView { ), SizedBox(height: 4), Text( - '晴朗', + now["weatherCondition"], style: TextStyle( fontSize: 14, color: Colors.white.withOpacity(0.9), @@ -720,7 +733,7 @@ class MessageBubble extends GetView { Row( children: [ Text( - '25°', + "${now["temperature"]}°", style: TextStyle( fontSize: 36, fontWeight: FontWeight.bold, @@ -732,14 +745,14 @@ class MessageBubble extends GetView { crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( - '最高: 29°', + '最高: ${now["maxTemperature"]}°', style: TextStyle( fontSize: 12, color: Colors.white.withOpacity(0.9), ), ), Text( - '最低: 18°', + '最低: ${now["minTemperature"]}°', style: TextStyle( fontSize: 12, color: Colors.white.withOpacity(0.9), @@ -773,15 +786,31 @@ class MessageBubble extends GetView { ), ), SizedBox(height: 8), + // Row( + // mainAxisAlignment: MainAxisAlignment.spaceBetween, + // children: [ + // _buildForecastDay('周一', Icons.wb_sunny, '28°'), + // _buildForecastDay('周二', Icons.cloud, '25°'), + // _buildForecastDay('周三', Icons.wb_cloudy, '26°'), + // _buildForecastDay('周四', Icons.grain, '24°'), + // _buildForecastDay('周五', Icons.wb_sunny, '27°'), + // ], + // ), Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - _buildForecastDay('周一', Icons.wb_sunny, '28°'), - _buildForecastDay('周二', Icons.cloud, '25°'), - _buildForecastDay('周三', Icons.wb_cloudy, '26°'), - _buildForecastDay('周四', Icons.grain, '24°'), - _buildForecastDay('周五', Icons.wb_sunny, '27°'), - ], + children: List.generate( + days.length, + (index) { + String dateStr = days[index]['date']; + DateTime? date = DateUtil.getDateTime(dateStr); + String weekday = DateUtil.getWeekday(date); + return _buildForecastDay( + weekday, + Icons.wb_sunny, + days[index]['temperature'], + ); + }, + ), ), SizedBox(height: 16), Container( @@ -790,7 +819,7 @@ class MessageBubble extends GetView { color: Colors.white.withOpacity(0.2), borderRadius: BorderRadius.circular(8), ), - child: Row( + child: const Row( children: [ Icon( Icons.info_outline,