diff --git a/apps/lib/features/home/ui/screens/home_screen.dart b/apps/lib/features/home/ui/screens/home_screen.dart index b36c753..a4699be 100644 --- a/apps/lib/features/home/ui/screens/home_screen.dart +++ b/apps/lib/features/home/ui/screens/home_screen.dart @@ -792,54 +792,43 @@ class _HomeScreenState extends State borderRadius: BorderRadius.circular(_inputRadius), border: Border.all(color: AppColors.slate300), ), - child: Row( - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - Expanded( - child: _isRecording - ? _buildListeningIndicator() - : _isTranscribing - ? _buildTranscribingIndicator() - : TextField( - controller: _messageController, - minLines: 1, - maxLines: 3, - decoration: const InputDecoration( - hintText: '输入消息...', - border: InputBorder.none, - enabledBorder: InputBorder.none, - focusedBorder: InputBorder.none, - disabledBorder: InputBorder.none, - errorBorder: InputBorder.none, - focusedErrorBorder: InputBorder.none, - isDense: true, - contentPadding: EdgeInsets.zero, - filled: false, - ), - onSubmitted: (_) => _sendMessage(context), - ), - ), - const SizedBox(width: 8), - _buildInputActionIcon(state), - ], - ), + child: _isRecording + ? _buildListeningIndicator() + : _isTranscribing + ? _buildTranscribingIndicator() + : TextField( + controller: _messageController, + minLines: 1, + maxLines: 3, + decoration: const InputDecoration( + hintText: '输入消息...', + border: InputBorder.none, + enabledBorder: InputBorder.none, + focusedBorder: InputBorder.none, + disabledBorder: InputBorder.none, + errorBorder: InputBorder.none, + focusedErrorBorder: InputBorder.none, + isDense: true, + contentPadding: EdgeInsets.zero, + filled: false, + ), + onSubmitted: (_) => _sendMessage(context), + ), ); } - Widget _buildInputActionIcon(ChatState state) { + Widget _buildRightActionButton(ChatState state) { final isWaitingAgent = state.isWaitingFirstToken || state.isStreaming || state.isCancelling; return GestureDetector( key: _inputActionButtonKey, onTap: _isTranscribing ? null - : _isRecording - ? () => _stopRecording(autoSendAfterTranscribe: true) : isWaitingAgent ? () => _onStopGenerating(context) : _hasMessage ? () => _sendMessage(context) - : _startRecording, + : _toggleHoldToSpeakMode, child: _isTranscribing ? const SizedBox( width: _transcribingSpinnerSize, @@ -853,43 +842,19 @@ class _HomeScreenState extends State key: _inputActionIconKey, isWaitingAgent ? LucideIcons.square - : _isRecording || _hasMessage + : _hasMessage ? LucideIcons.send - : LucideIcons.mic, + : _isHoldToSpeakMode + ? LucideIcons.keyboard + : LucideIcons.activity, size: _iconSize, - color: isWaitingAgent || _isRecording || _hasMessage + color: isWaitingAgent || _hasMessage ? AppColors.blue600 : AppColors.slate500, ), ); } - Widget _buildRightActionButton(ChatState state) { - return GestureDetector( - key: _inputActionButtonKey, - onTap: _isTranscribing - ? null - : _isHoldToSpeakMode - ? _toggleHoldToSpeakMode - : _startRecording, - child: _isTranscribing - ? const SizedBox( - width: _transcribingSpinnerSize, - height: _transcribingSpinnerSize, - child: CircularProgressIndicator( - strokeWidth: _transcribingStrokeWidth, - color: AppColors.blue600, - ), - ) - : Icon( - key: _inputActionIconKey, - _isHoldToSpeakMode ? LucideIcons.keyboard : LucideIcons.activity, - size: _iconSize, - color: AppColors.slate500, - ), - ); - } - Widget _buildHoldToSpeakHint() { return Column( children: [