import 'package:flutter/material.dart'; import '../models/message.dart'; import '../services/ai_service.dart'; class AIChatScreen extends StatefulWidget { @override State createState() => _AIChatScreenState(); } class _AIChatScreenState extends State { final List _messages = [ Message( text: '您好!我是伴享智能助手,有什么可以帮您的吗?', isUser: false, ), ]; final _textController = TextEditingController(); final _scrollController = ScrollController(); void _sendMessage() { if (_textController.text.trim().isEmpty) return; final newMessages = AIService.mockChat(_textController.text); setState(() { _messages.addAll(newMessages); }); _textController.clear(); // 滚动到底部 Future.delayed(Duration(milliseconds: 100), () { _scrollController.animateTo( _scrollController.position.maxScrollExtent, duration: Duration(milliseconds: 300), curve: Curves.easeOut, ); }); } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text('AI智能助手'), ), body: Column( children: [ // 快捷指令 Container( height: 60, padding: EdgeInsets.symmetric(horizontal: 16, vertical: 8), child: ListView( scrollDirection: Axis.horizontal, children: [ _buildQuickButton('附近活动'), _buildQuickButton('我要挂号'), _buildQuickButton('帮我买菜'), ], ), ), Divider(height: 1), // 消息列表 Expanded( child: ListView.builder( controller: _scrollController, padding: EdgeInsets.all(16), itemCount: _messages.length, itemBuilder: (context, index) { final message = _messages[index]; return _buildMessageBubble(message); }, ), ), // 输入框 Container( padding: EdgeInsets.all(8), decoration: BoxDecoration( color: Colors.white, boxShadow: [ BoxShadow( color: Colors.black12, blurRadius: 4, offset: Offset(0, -2), ), ], ), child: Row( children: [ // 语音按钮 IconButton( icon: Icon(Icons.mic, color: Color(0xFF333333)), onPressed: () { ScaffoldMessenger.of(context).showSnackBar( SnackBar(content: Text('语音功能开发中')), ); }, ), // 文字输入 Expanded( child: TextField( controller: _textController, decoration: InputDecoration( hintText: '输入您的问题...', border: OutlineInputBorder( borderRadius: BorderRadius.circular(24), ), contentPadding: EdgeInsets.symmetric(horizontal: 16, vertical: 8), ), onSubmitted: (_) => _sendMessage(), ), ), SizedBox(width: 8), // 发送按钮 IconButton( icon: Icon(Icons.send, color: Color(0xFF333333)), onPressed: _sendMessage, ), ], ), ), ], ), ); } Widget _buildQuickButton(String text) { return Padding( padding: EdgeInsets.only(right: 8), child: OutlinedButton( onPressed: () { _textController.text = text; _sendMessage(); }, style: OutlinedButton.styleFrom( side: BorderSide(color: Color(0xFF333333)), ), child: Text(text, style: TextStyle(color: Color(0xFF333333))), ), ); } Widget _buildMessageBubble(Message message) { return Align( alignment: message.isUser ? Alignment.centerRight : Alignment.centerLeft, child: Container( margin: EdgeInsets.only(bottom: 12), padding: EdgeInsets.symmetric(horizontal: 16, vertical: 12), constraints: BoxConstraints(maxWidth: MediaQuery.of(context).size.width * 0.7), decoration: BoxDecoration( color: message.isUser ? Color(0xFF333333) : Color(0xFFF0F0F0), borderRadius: BorderRadius.circular(16), ), child: Text( message.text, style: TextStyle( color: message.isUser ? Colors.white : Color(0xFF333333), fontSize: 16, ), ), ), ); } }