import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import '../../providers/auth_provider.dart'; import '../../providers/user_provider.dart'; import '../../navigation/bottom_nav_bar.dart'; import 'profile_detail_screen.dart'; import '../../widgets/custom/protected_widget.dart'; class ProfileScreen extends StatelessWidget { const ProfileScreen({super.key}); @override Widget build(BuildContext context) { return ProtectedWidget( child: _ProfileContent(), loadingWidget: const Center( child: CircularProgressIndicator(), ), ); } } class _ProfileContent extends StatefulWidget { @override State<_ProfileContent> createState() => _ProfileContentState(); } class _ProfileContentState extends State<_ProfileContent> { @override void initState() { super.initState(); WidgetsBinding.instance.addPostFrameCallback((_) { final userProvider = Provider.of(context, listen: false); userProvider.loadUserProfile(); }); } @override Widget build(BuildContext context) { final authProvider = Provider.of(context); // final userProvider = Provider.of(context); return Scaffold( appBar: AppBar( title: const Text('我的'), actions: [ IconButton( icon: const Icon(Icons.settings_outlined), onPressed: () { // 跳转到设置页面 }, ), ], ), body: SingleChildScrollView( child: Column( children: [ // 用户信息卡片 Card( margin: const EdgeInsets.all(16), shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(16), ), elevation: 2, child: Padding( padding: const EdgeInsets.all(20), child: Column( children: [ GestureDetector( onTap: () { // 点击头像 }, child: Stack( children: [ CircleAvatar( radius: 50, backgroundColor: Colors.blue[100], backgroundImage: authProvider.user?.avatarUrl != null ? NetworkImage(authProvider.user!.avatarUrl!) : null, child: authProvider.user?.avatarUrl == null ? const Icon( Icons.person, size: 60, color: Colors.blue, ) : null, ), Positioned( bottom: 0, right: 0, child: Container( padding: const EdgeInsets.all(6), decoration: BoxDecoration( color: Colors.blue, borderRadius: BorderRadius.circular(20), border: Border.all( color: Colors.white, width: 2, ), ), child: const Icon( Icons.edit, size: 16, color: Colors.white, ), ), ), ], ), ), const SizedBox(height: 16), Text( authProvider.user?.name ?? '用户', style: const TextStyle( fontSize: 22, fontWeight: FontWeight.bold, ), ), const SizedBox(height: 8), Text( authProvider.user?.email ?? '', style: TextStyle( fontSize: 14, color: Colors.grey[600], ), ), if (authProvider.user?.phone != null) Padding( padding: const EdgeInsets.only(top: 4), child: Text( authProvider.user!.phone!, style: TextStyle( fontSize: 14, color: Colors.grey[600], ), ), ), const SizedBox(height: 16), Row( mainAxisAlignment: MainAxisAlignment.center, children: [ _buildStatItem('关注', '128'), _buildVerticalDivider(), _buildStatItem('粉丝', '256'), _buildVerticalDivider(), _buildStatItem('积分', '1024'), ], ), ], ), ), ), // 菜单项 Padding( padding: const EdgeInsets.symmetric(horizontal: 16), child: Column( children: [ _buildMenuCard( title: '账户设置', items: [ _buildMenuItem( icon: Icons.person_outline, title: '个人信息', subtitle: '查看和编辑个人信息', onTap: () { Navigator.of(context).push( MaterialPageRoute( builder: (_) => const ProfileDetailScreen(), ), ); }, ), _buildMenuItem( icon: Icons.lock_outline, title: '账号安全', subtitle: '修改密码和安全设置', onTap: () {}, ), _buildMenuItem( icon: Icons.notifications_none, title: '消息通知', subtitle: '管理通知偏好设置', onTap: () {}, ), ], ), const SizedBox(height: 16), _buildMenuCard( title: '我的内容', items: [ _buildMenuItem( icon: Icons.bookmark_border, title: '我的收藏', subtitle: '查看收藏的内容', onTap: () {}, ), _buildMenuItem( icon: Icons.history, title: '浏览历史', subtitle: '查看最近浏览记录', onTap: () {}, ), _buildMenuItem( icon: Icons.download, title: '我的下载', subtitle: '管理下载的文件', onTap: () {}, ), ], ), const SizedBox(height: 16), _buildMenuCard( title: '其他', items: [ _buildMenuItem( icon: Icons.help_outline, title: '帮助中心', subtitle: '常见问题和帮助文档', onTap: () {}, ), _buildMenuItem( icon: Icons.info_outline, title: '关于我们', subtitle: '了解应用信息', onTap: () {}, ), _buildMenuItem( icon: Icons.logout, title: '退出登录', subtitle: '安全退出当前账号', onTap: () async { await authProvider.logout(); Navigator.of(context).pushReplacementNamed('/'); }, ), ], ), const SizedBox(height: 20), // 版本信息 Padding( padding: const EdgeInsets.symmetric(vertical: 20), child: Text( '版本 v1.0.0', style: TextStyle( fontSize: 12, color: Colors.grey[500], ), ), ), ], ), ), ], ), ), bottomNavigationBar: const BottomNavBar(initialIndex: 3), ); } Widget _buildStatItem(String label, String value) { return Expanded( child: Column( children: [ Text( value, style: const TextStyle( fontSize: 18, fontWeight: FontWeight.bold, ), ), const SizedBox(height: 4), Text( label, style: TextStyle( fontSize: 12, color: Colors.grey[600], ), ), ], ), ); } Widget _buildVerticalDivider() { return Container( width: 1, height: 40, color: Colors.grey[300], margin: const EdgeInsets.symmetric(horizontal: 16), ); } Widget _buildMenuCard({ required String title, required List items, }) { return Card( elevation: 2, shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(12), ), child: Padding( padding: const EdgeInsets.all(16), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( title, style: const TextStyle( fontSize: 16, fontWeight: FontWeight.bold, ), ), const SizedBox(height: 12), Column(children: items), ], ), ), ); } Widget _buildMenuItem({ required IconData icon, required String title, required String subtitle, required VoidCallback onTap, }) { return ListTile( contentPadding: EdgeInsets.zero, leading: Icon(icon), title: Text(title), subtitle: Text(subtitle), trailing: const Icon(Icons.chevron_right), onTap: onTap, ); } }