import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; import 'package:lucide_icons/lucide_icons.dart'; import '../../../../core/theme/design_tokens.dart'; import 'home_sheet.dart'; class HomeScreen extends StatefulWidget { const HomeScreen({super.key}); @override State createState() => _HomeScreenState(); } class _HomeScreenState extends State { final TextEditingController _messageController = TextEditingController(); bool get _hasMessage => _messageController.text.trim().isNotEmpty; @override void initState() { super.initState(); _messageController.addListener(_onMessageChanged); } @override void dispose() { _messageController.removeListener(_onMessageChanged); _messageController.dispose(); super.dispose(); } void _onMessageChanged() { setState(() {}); } @override Widget build(BuildContext context) { return Scaffold( backgroundColor: const Color(0xFFF8FAFC), body: SafeArea( child: Column( children: [ _buildHeader(context), Expanded(child: _buildChatArea()), _buildInputContainer(context), ], ), ), ); } Widget _buildHeader(BuildContext context) { return SizedBox( height: 60, child: Padding( padding: const EdgeInsets.symmetric(horizontal: 20), child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ IconButton( icon: const Icon( LucideIcons.settings, size: 24, color: AppColors.slate900, ), onPressed: () => context.push('/settings'), ), Row( children: [ IconButton( icon: const Icon( LucideIcons.calendar, size: 24, color: AppColors.slate900, ), onPressed: () => context.push('/calendar/dayweek?from=home'), ), const SizedBox(width: 16), IconButton( icon: const Icon( LucideIcons.messageSquare, size: 24, color: AppColors.slate900, ), onPressed: () => context.push('/messages/invites'), ), ], ), ], ), ), ); } Widget _buildChatArea() { return Padding( padding: const EdgeInsets.all(20), child: Column( children: [ _buildUserMessageRow(), const SizedBox(height: 16), _buildTodoCard(), ], ), ); } Widget _buildUserMessageRow() { return Row( crossAxisAlignment: CrossAxisAlignment.center, children: [ const Expanded(child: SizedBox()), Container( padding: const EdgeInsets.symmetric(horizontal: 13, vertical: 9), decoration: BoxDecoration( color: const Color(0xFFEAF1FB), borderRadius: const BorderRadius.only( topLeft: Radius.circular(12), topRight: Radius.circular(12), bottomLeft: Radius.circular(12), bottomRight: Radius.circular(0), ), ), child: const Text( '明天提醒我开会', style: TextStyle(fontSize: 14, color: AppColors.slate900), ), ), ], ); } Widget _buildTodoCard() { return Container( width: double.infinity, padding: const EdgeInsets.all(16), decoration: BoxDecoration( color: AppColors.white, borderRadius: BorderRadius.circular(16), ), child: Row( children: [ Container( width: 4, height: 60, decoration: const BoxDecoration( color: AppColors.blue500, borderRadius: BorderRadius.only( topLeft: Radius.circular(4), bottomLeft: Radius.circular(4), ), ), ), const SizedBox(width: 12), const Expanded( child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( '明天 10:00', style: TextStyle(fontSize: 12, color: AppColors.slate500), ), SizedBox(height: 4), Text( '开会', style: TextStyle( fontSize: 16, fontWeight: FontWeight.w500, color: AppColors.slate900, ), ), ], ), ), ], ), ); } Widget _buildInputContainer(BuildContext context) { return Container( padding: const EdgeInsets.all(16), color: const Color(0xFFF8FAFC), child: Row( crossAxisAlignment: CrossAxisAlignment.center, children: [ GestureDetector( onTap: () => _showBottomSheet(context), child: Container( width: 36, height: 36, decoration: BoxDecoration( color: AppColors.white, shape: BoxShape.circle, border: Border.all(color: AppColors.slate300), ), child: const Icon( LucideIcons.plus, size: 20, color: AppColors.slate500, ), ), ), const SizedBox(width: 8), Expanded( child: Container( constraints: const BoxConstraints(minHeight: 48), padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 8), decoration: BoxDecoration( color: Colors.transparent, borderRadius: BorderRadius.circular(24), border: Border.all(color: AppColors.slate300), ), child: Row( crossAxisAlignment: CrossAxisAlignment.center, children: [ Expanded( child: 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, ), ), ), const SizedBox(width: 8), Icon( _hasMessage ? LucideIcons.send : LucideIcons.mic, size: 24, color: _hasMessage ? AppColors.blue600 : AppColors.slate500, ), ], ), ), ), ], ), ); } void _showBottomSheet(BuildContext context) { showModalBottomSheet( context: context, backgroundColor: Colors.transparent, isScrollControlled: true, builder: (context) => const HomeSheet(), ); } }