import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import '../core/app_colors.dart'; import '../core/navigation_provider.dart'; import '../providers/auth_provider.dart'; import '../pages/doctor/doctor_home_page.dart' show doctorPageProvider; class DoctorDrawer extends ConsumerWidget { const DoctorDrawer({super.key}); @override Widget build(BuildContext context, WidgetRef ref) { final auth = ref.watch(authProvider); final currentPage = ref.watch(doctorPageProvider); return Drawer( width: MediaQuery.of(context).size.width * 0.8, child: Container( color: Colors.white, child: SafeArea( child: Column(children: [ // 医生信息头部 Container( width: double.infinity, padding: const EdgeInsets.fromLTRB(20, 20, 20, 16), decoration: const BoxDecoration( gradient: AppColors.doctorGradient, ), child: Column(children: [ GestureDetector( onTap: () { Navigator.pop(context); pushRoute(ref, 'doctorProfile'); }, child: CircleAvatar( radius: 30, backgroundColor: Colors.white24, child: Text( (auth.user?.name ?? '医生')[0], style: const TextStyle(fontSize: 24, color: Colors.white, fontWeight: FontWeight.w600), ), ), ), const SizedBox(height: 10), Text(auth.user?.name ?? '未设置姓名', style: const TextStyle(color: Colors.white, fontSize: 16, fontWeight: FontWeight.w600)), const Text('点击完善信息', style: TextStyle(color: Colors.white70, fontSize: 12)), ]), ), const SizedBox(height: 8), _DrawerItem(icon: Icons.dashboard_outlined, label: '工作台', selected: currentPage == 'dashboard', onTap: () { Navigator.pop(context); ref.read(doctorPageProvider.notifier).set('dashboard'); }), _DrawerItem(icon: Icons.people_outline, label: '患者管理', selected: currentPage == 'patients', onTap: () { Navigator.pop(context); ref.read(doctorPageProvider.notifier).set('patients'); }), _DrawerItem(icon: Icons.chat_outlined, label: '问诊列表', selected: currentPage == 'consultations', onTap: () { Navigator.pop(context); ref.read(doctorPageProvider.notifier).set('consultations'); }), _DrawerItem(icon: Icons.description_outlined, label: '报告审核', selected: currentPage == 'reports', onTap: () { Navigator.pop(context); ref.read(doctorPageProvider.notifier).set('reports'); }), _DrawerItem(icon: Icons.event_note_outlined, label: '复查随访', selected: currentPage == 'followups', onTap: () { Navigator.pop(context); ref.read(doctorPageProvider.notifier).set('followups'); }), const Spacer(), const Divider(), _DrawerItem(icon: Icons.settings_outlined, label: '设置', selected: false, onTap: () { Navigator.pop(context); pushRoute(ref, 'doctorSettings'); }), _DrawerItem(icon: Icons.logout, label: '退出登录', selected: false, onTap: () async { Navigator.pop(context); await ref.read(authProvider.notifier).logout(); goRoute(ref, 'login'); }), const SizedBox(height: 16), ]), ), ), ); } } class _DrawerItem extends StatelessWidget { final IconData icon; final String label; final bool selected; final VoidCallback onTap; const _DrawerItem({required this.icon, required this.label, required this.selected, required this.onTap}); @override Widget build(BuildContext context) { return Padding( padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 3), child: Material( color: selected ? AppColors.doctorBlue.withOpacity(0.08) : Colors.transparent, borderRadius: BorderRadius.circular(14), child: InkWell( borderRadius: BorderRadius.circular(14), onTap: onTap, child: Container( padding: const EdgeInsets.symmetric(horizontal: 14, vertical: 12), decoration: BoxDecoration( borderRadius: BorderRadius.circular(14), border: Border.all(color: selected ? AppColors.doctorBlue.withOpacity(0.15) : const Color(0xFFF0F0F0), width: 1), ), child: Row(children: [ Icon(icon, size: 20, color: selected ? AppColors.doctorBlue : AppColors.textHint), const SizedBox(width: 12), Expanded(child: Text(label, style: TextStyle(fontSize: 15, fontWeight: FontWeight.w500, color: selected ? AppColors.doctorBlue : AppColors.textPrimary))), ]), ), ), ), ); } }