Files
flutterApp/lib/features/v2/my/presentation/pages/profile_detail_page.dart
2026-08-18 08:52:33 +08:00

285 lines
7.7 KiB
Dart

import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:maibu_satabot_v2/core/app/app_user_cubit.dart';
import 'package:maibu_satabot_v2/core/app/app_user_state.dart';
import 'package:maibu_satabot_v2/core/domain/entities/user_entity.dart';
import 'package:maibu_satabot_v2/core/theme/AppTheme.dart';
/// 个人信息详情页
class ProfileDetailPage extends StatelessWidget {
const ProfileDetailPage({super.key});
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: context.appColors.pageBackground,
appBar: AppBar(
elevation: 0,
leading: IconButton(
icon: Icon(Icons.arrow_back, color: context.appColors.textPrimary),
onPressed: () => Navigator.pop(context),
),
title: const Text(
'个人信息',
style: TextStyle(
fontSize: 18,
fontWeight: FontWeight.bold,
),
),
centerTitle: true,
),
body: BlocBuilder<AppUserCubit, AppUserState>(
builder: (context, state) {
final user = state.user;
if (user == null) {
return const Center(
child: Text('未登录'),
);
}
return ListView(
padding: const EdgeInsets.all(16),
children: [
// 头像卡片
_buildAvatarCard(context, user),
const SizedBox(height: 16),
// 信息列表
_buildInfoCard(context, user),
const SizedBox(height: 16),
// 操作按钮
_buildActionButtons(context),
],
);
},
),
);
}
/// 头像卡片
Widget _buildAvatarCard(BuildContext context, UserEntity user) {
return Container(
padding: const EdgeInsets.symmetric(vertical: 32),
decoration: BoxDecoration(
color: context.appColors.cardBackground,
borderRadius: BorderRadius.circular(12),
boxShadow: [
BoxShadow(
color: context.appColors.cardShadow,
blurRadius: 8,
offset: const Offset(0, 2),
),
],
),
child: Column(
children: [
// 头像
Container(
width: 100,
height: 100,
decoration: BoxDecoration(
shape: BoxShape.circle,
border: Border.all(
color: const Color(0xFF165DFF),
width: 3,
),
),
child: ClipOval(
child: _buildAvatar(user.avatar),
),
),
const SizedBox(height: 16),
// 昵称
Text(
user.nickname,
style: TextStyle(
fontSize: 20,
fontWeight: FontWeight.bold,
color: context.appColors.textPrimary,
),
),
const SizedBox(height: 8),
// 用户名
Text(
'@${user.username}',
style: TextStyle(
fontSize: 14,
color: context.appColors.textTertiary,
),
),
],
),
);
}
/// 构建头像
Widget _buildAvatar(String? avatarUrl) {
if (avatarUrl != null && avatarUrl.isNotEmpty) {
return Image.network(
avatarUrl,
fit: BoxFit.cover,
errorBuilder: (context, error, stackTrace) {
return _buildDefaultAvatar();
},
);
}
return _buildDefaultAvatar();
}
/// 默认头像
Widget _buildDefaultAvatar() {
return Container(
color: const Color(0xFFF5F7FA),
child: const Icon(
Icons.person,
size: 50,
color: Color(0xFF165DFF),
),
);
}
/// 信息卡片
Widget _buildInfoCard(BuildContext context, UserEntity user) {
return Container(
decoration: BoxDecoration(
color: context.appColors.cardBackground,
borderRadius: BorderRadius.circular(12),
boxShadow: [
BoxShadow(
color: context.appColors.cardShadow,
blurRadius: 8,
offset: const Offset(0, 2),
),
],
),
child: Column(
children: [
_buildInfoItem(
context,
icon: Icons.person_outline,
label: '用户ID',
value: user.userId,
showDivider: true,
),
_buildInfoItem(
context,
icon: Icons.account_circle_outlined,
label: '用户名',
value: user.username,
showDivider: true,
),
_buildInfoItem(
context,
icon: Icons.badge_outlined,
label: '昵称',
value: user.nickname,
showDivider: user.email != null || user.phone != null,
),
if (user.email != null)
_buildInfoItem(
context,
icon: Icons.email_outlined,
label: '邮箱',
value: user.email!,
showDivider: user.phone != null,
),
if (user.phone != null)
_buildInfoItem(
context,
icon: Icons.phone_outlined,
label: '手机号',
value: user.phone!,
showDivider: false,
),
],
),
);
}
/// 信息项
Widget _buildInfoItem(
BuildContext context, {
required IconData icon,
required String label,
required String value,
required bool showDivider,
}) {
return Column(
children: [
Padding(
padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 14),
child: Row(
children: [
Icon(icon, size: 22, color: context.appColors.textTertiary),
const SizedBox(width: 12),
Text(
label,
style: TextStyle(
fontSize: 15,
color: context.appColors.textTertiary,
),
),
const Spacer(),
Expanded(
flex: 2,
child: Text(
value,
style: TextStyle(
fontSize: 15,
color: context.appColors.textPrimary,
fontWeight: FontWeight.w500,
),
textAlign: TextAlign.right,
overflow: TextOverflow.ellipsis,
),
),
],
),
),
if (showDivider)
Divider(
height: 1,
thickness: 1,
color: context.appColors.divider,
),
],
);
}
/// 操作按钮
Widget _buildActionButtons(BuildContext context) {
return Column(
children: [
// 编辑资料按钮(预留)
SizedBox(
width: double.infinity,
height: 48,
child: ElevatedButton.icon(
onPressed: () {
// TODO: 跳转到编辑资料页面
ScaffoldMessenger.of(context).showSnackBar(
const SnackBar(content: Text('编辑功能开发中...')),
);
},
icon: const Icon(Icons.edit, size: 20),
label: const Text(
'编辑资料',
style: TextStyle(fontSize: 16),
),
style: ElevatedButton.styleFrom(
backgroundColor: const Color(0xFF165DFF),
foregroundColor: Colors.white,
elevation: 0,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(12),
),
),
),
),
],
);
}
}