Files
ai_chat_assistant/lib/screens/full_screen.dart

100 lines
3.0 KiB
Dart
Raw Normal View History

2025-08-13 15:17:13 +08:00
import 'package:ai_chat_assistant/models/chat_message.dart';
import 'package:basic_intl/intl.dart';
2025-08-12 13:36:42 +08:00
import 'package:flutter/material.dart';
2025-08-13 15:17:13 +08:00
import '../enums/message_status.dart';
2025-08-12 13:36:42 +08:00
import '../widgets/chat_box.dart';
import '../widgets/gradient_background.dart';
import '../services/message_service.dart';
import 'package:provider/provider.dart';
import '../widgets/chat_header.dart';
import '../widgets/chat_footer.dart';
class FullScreen extends StatefulWidget {
const FullScreen({super.key});
@override
State<FullScreen> createState() => _FullScreenState();
}
class _FullScreenState extends State<FullScreen> {
final ScrollController _scrollController = ScrollController();
@override
void initState() {
super.initState();
}
@override
void dispose() {
_scrollController.dispose();
super.dispose();
}
void _scrollToBottom() {
if (_scrollController.hasClients) {
_scrollController.animateTo(
0.0,
duration: const Duration(milliseconds: 200),
curve: Curves.easeOut,
);
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: GradientBackground(
colors: const [
Color(0XFF3B0A3F),
Color(0xFF0E0E24),
Color(0xFF0C0B33),
],
child: SafeArea(
child: Column(
children: [
ChatHeader(
onClose: () {
Provider.of<MessageService>(context, listen: false)
.abortReply();
Navigator.pop(context);
},
),
const SizedBox(height: 12),
Expanded(
child: Consumer<MessageService>(
builder: (context, handler, child) {
WidgetsBinding.instance.addPostFrameCallback((_) {
_scrollToBottom();
});
2025-08-13 15:17:13 +08:00
final messageService = context.read<MessageService>();
List<ChatMessage> fullScreenMessages = List.from(handler.messages);
if (fullScreenMessages.isEmpty) {
String text = Intl.getCurrentLocale().startsWith('zh')
? "您好,我是众众,请问有什么可以帮您?"
: "Hi, I'm Zhongzhong, may I help you ? ";
messageService.addMessage(text, false, MessageStatus.normal);
}
2025-08-12 13:36:42 +08:00
return ChatBox(
scrollController: _scrollController,
messages: handler.messages,
);
},
),
),
const SizedBox(height: 12),
Consumer<MessageService>(
builder: (context, messageService, child) => ChatFooter(
onClear: () {
messageService.abortReply();
messageService.clearMessages();
},
),
),
],
),
),
),
);
}
}