Files
ai_english/client/lib/features/profile/screens/profile_home_screen.dart
2025-11-17 13:39:05 +08:00

86 lines
2.7 KiB
Dart

import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import '../../../core/theme/app_colors.dart';
import '../../../core/routes/app_routes.dart';
import '../../auth/providers/auth_provider.dart';
class ProfileHomeScreen extends ConsumerWidget {
const ProfileHomeScreen({super.key});
@override
Widget build(BuildContext context, WidgetRef ref) {
final authState = ref.watch(authProvider);
final user = authState.user;
final isAuthenticated = authState.isAuthenticated;
if (!isAuthenticated || user == null) {
return _buildLoginPrompt(context);
}
return Scaffold(
backgroundColor: AppColors.surface,
appBar: AppBar(
title: const Text('个人中心'),
backgroundColor: AppColors.primary,
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
CircleAvatar(
radius: 50,
backgroundColor: AppColors.primary,
child: Text(
user.username?.substring(0, 1).toUpperCase() ?? 'U',
style: const TextStyle(fontSize: 32, color: Colors.white),
),
),
const SizedBox(height: 16),
Text(
user.username ?? '用户',
style: const TextStyle(fontSize: 24, fontWeight: FontWeight.bold),
),
const SizedBox(height: 8),
Text(
user.email ?? '',
style: const TextStyle(fontSize: 16, color: Colors.grey),
),
const SizedBox(height: 32),
ElevatedButton(
onPressed: () async {
await ref.read(authProvider.notifier).logout();
if (context.mounted) {
Navigator.of(context).pushReplacementNamed(Routes.login);
}
},
child: const Text('退出登录'),
),
],
),
),
);
}
Widget _buildLoginPrompt(BuildContext context) {
return Scaffold(
backgroundColor: AppColors.surface,
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
const Icon(Icons.person_outline, size: 80, color: Colors.grey),
const SizedBox(height: 16),
const Text('请先登录', style: TextStyle(fontSize: 20)),
const SizedBox(height: 32),
ElevatedButton(
onPressed: () {
Navigator.of(context).pushNamed(Routes.login);
},
child: const Text('去登录'),
),
],
),
),
);
}
}