import 'package:flutter/material.dart'; class ChatInput extends StatefulWidget { final void Function(String text) onSend; final double borderRadius; final double horizontalPadding; final double innerHorizontalPadding; final double maxHeight; const ChatInput({ super.key, required this.onSend, this.borderRadius = 12, this.horizontalPadding = 10, this.innerHorizontalPadding = 12, this.maxHeight = 150, }); @override State createState() => _ChatInputState(); } class _ChatInputState extends State { final TextEditingController _controller = TextEditingController(); void _handleSend() { final text = _controller.text.trim(); if (text.isEmpty) return; widget.onSend(text); _controller.clear(); } @override Widget build(BuildContext context) { final theme = Theme.of(context); final activeColor = theme.colorScheme.primary; return Container( color: Colors.grey[200], padding: EdgeInsets.symmetric(horizontal: 8, vertical: 6), child: Row( crossAxisAlignment: CrossAxisAlignment.end, children: [ SizedBox(width: 5), Expanded( child: Container( padding: EdgeInsets.symmetric(horizontal: 12), decoration: BoxDecoration( color: Colors.white, borderRadius: BorderRadius.circular(10), ), constraints: BoxConstraints(maxWidth: 300), // 限制最大宽度(可选) child: TextField( controller: _controller, onSubmitted: (_) => _handleSend, maxLines: 10, // 允许自动换行(关键) minLines: 1, // 最小1行 keyboardType: TextInputType.multiline, // 启用多行输入 decoration: InputDecoration( border: InputBorder.none, contentPadding: EdgeInsets.symmetric(vertical: 10), ), ), ), ), SizedBox(width: 5), Container( decoration: BoxDecoration( color: activeColor, borderRadius: BorderRadius.circular(10)), child: GestureDetector( onTap:_handleSend, child: Container( width: 60, height: 46, decoration: BoxDecoration( color:activeColor, borderRadius: BorderRadius.circular(5)), child: Icon(Icons.send, color: Colors.white, size: 24)))), SizedBox(width: 5) ], ), ); } }