Browse Source

feat(agent): 添加动态发送按钮显示逻辑

在输入框有内容时显示发送按钮,否则显示图片选择按钮
weicu
lxm 1 year ago
parent
commit
3d5d5dd6dc
  1. 12
      lib/modules/agent/controllers/agent_controller.dart
  2. 44
      lib/modules/agent/views/agent_view.dart

12
lib/modules/agent/controllers/agent_controller.dart

@ -68,6 +68,9 @@ class AgentController extends GetxController {
final isImageInputActive = false.obs; // 是否处于图片输入模式 final isImageInputActive = false.obs; // 是否处于图片输入模式
final selectedImagePath = Rx<String?>(null); // 当前选择的图片路径 final selectedImagePath = Rx<String?>(null); // 当前选择的图片路径
// 输入状态控制 - 用于动态显示发送按钮
final hasTextInput = false.obs; // 是否有文本输入
// 流事件订阅 // 流事件订阅
StreamSubscription<AgentServiceEvent>? _eventSubscription; StreamSubscription<AgentServiceEvent>? _eventSubscription;
@ -107,6 +110,7 @@ class AgentController extends GetxController {
_subscribeToEvents(); //订阅代理服务事件 _subscribeToEvents(); //订阅代理服务事件
_initMusicStatus(); //初始化音乐状态 _initMusicStatus(); //初始化音乐状态
_setupMediaSessionCallbacks(); //设置媒体会话回调 _setupMediaSessionCallbacks(); //设置媒体会话回调
_setupTextInputListener(); //设置文本输入监听器
} }
// 初始化音乐播放状态 // 初始化音乐播放状态
@ -178,6 +182,14 @@ class AgentController extends GetxController {
} }
} }
// 设置文本输入监听器
void _setupTextInputListener() {
textController.addListener(() {
final text = textController.text.trim();
hasTextInput.value = text.isNotEmpty;
});
}
// 加载聊天历史记录 // 加载聊天历史记录
Future<void> _loadChatHistory() async { Future<void> _loadChatHistory() async {
try { try {

44
lib/modules/agent/views/agent_view.dart

@ -390,17 +390,6 @@ class AgentView extends StatelessWidget {
); );
}), }),
), ),
GestureDetector(
onTap: () => controller.sendMessage(),
child: Container(
padding: const EdgeInsets.all(6),
child: Icon(
Icons.send,
color: primaryColor,
size: 22,
),
),
),
], ],
), ),
); );
@ -482,8 +471,33 @@ class AgentView extends StatelessWidget {
const SizedBox(width: 8), const SizedBox(width: 8),
// 图片选择按钮 // 动态按钮:图片选择按钮 或 发送按钮
Container( Obx(() {
final hasText = controller.hasTextInput.value;
final hasImage = controller.isImageInputActive.value;
final shouldShowSend = hasText || hasImage;
if (shouldShowSend) {
// 显示发送按钮
return GestureDetector(
onTap: () => controller.sendMessage(),
child: Container(
width: 44,
height: 44,
decoration: BoxDecoration(
color: primaryColor,
borderRadius: BorderRadius.circular(22),
),
child: const Icon(
Icons.send,
color: Colors.white,
size: 22,
),
),
);
} else {
// 显示图片选择按钮
return Container(
width: 44, width: 44,
height: 44, height: 44,
decoration: BoxDecoration( decoration: BoxDecoration(
@ -535,7 +549,9 @@ class AgentView extends StatelessWidget {
), ),
], ],
), ),
), );
}
}),
], ],
), ),
], ],

Loading…
Cancel
Save