import 'package:cloudreve4_flutter/presentation/providers/auth_provider.dart'; import 'package:cloudreve4_flutter/presentation/providers/user_setting_provider.dart'; import 'package:cloudreve4_flutter/presentation/pages/profile/widgets/thick_storage_bar.dart'; import 'package:cloudreve4_flutter/presentation/widgets/user_avatar.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; /// 顶部用户信息卡片 class ProfileInfoCard extends StatelessWidget { const ProfileInfoCard({super.key}); @override Widget build(BuildContext context) { final theme = Theme.of(context); final colorScheme = theme.colorScheme; final authProvider = context.watch(); final user = authProvider.user; final displayName = user?.nickname ?? '用户'; return Card( child: Padding( padding: const EdgeInsets.all(20), child: Column( children: [ Row( crossAxisAlignment: CrossAxisAlignment.center, children: [ UserAvatar( userId: user?.id ?? '', email: user?.email, displayName: displayName, radius: 32, ), const SizedBox(width: 16), Expanded( child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( displayName, style: theme.textTheme.titleMedium?.copyWith( fontWeight: FontWeight.w600, ), ), const SizedBox(height: 6), Row( children: [ Text( 'ID: ${user?.id ?? '-'}', style: theme.textTheme.bodySmall?.copyWith( color: theme.hintColor, ), ), if (authProvider.isAdmin) ...[ const SizedBox(width: 8), Container( padding: const EdgeInsets.symmetric( horizontal: 8, vertical: 2), decoration: BoxDecoration( color: colorScheme.primaryContainer, borderRadius: BorderRadius.circular(10), ), child: Text( '管理员', style: theme.textTheme.labelSmall?.copyWith( color: colorScheme.onPrimaryContainer, fontWeight: FontWeight.w600, ), ), ), ], ], ), const SizedBox(height: 4), if (user?.email != null) Text( user!.email!, style: theme.textTheme.bodySmall?.copyWith( color: theme.hintColor, ), ), const SizedBox(height: 4), Text( '注册于 ${_formatDate(user?.createdAt)}', style: theme.textTheme.bodySmall?.copyWith( color: theme.hintColor, ), ), ], ), ), ], ), const SizedBox(height: 16), Consumer( builder: (context, userSetting, _) { final capacity = userSetting.capacity; return ThickStorageBar( used: capacity?.used ?? 0, total: capacity?.total ?? 0, percentage: capacity?.usagePercentage ?? 0, ); }, ), ], ), ), ); } String _formatDate(DateTime? date) { if (date == null) return '-'; return '${date.year}-${date.month.toString().padLeft(2, '0')}-${date.day.toString().padLeft(2, '0')}'; } }