diff --git a/frontend/mobile-app/lib/features/profile/presentation/pages/profile_page.dart b/frontend/mobile-app/lib/features/profile/presentation/pages/profile_page.dart index 6be14bb8..46cf00fd 100644 --- a/frontend/mobile-app/lib/features/profile/presentation/pages/profile_page.dart +++ b/frontend/mobile-app/lib/features/profile/presentation/pages/profile_page.dart @@ -1,7 +1,9 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:flutter_svg/flutter_svg.dart'; import 'package:go_router/go_router.dart'; +import '../../../../core/di/injection_container.dart'; import '../../../../routes/route_paths.dart'; import 'dart:async'; @@ -15,9 +17,10 @@ class ProfilePage extends ConsumerStatefulWidget { } class _ProfilePageState extends ConsumerState { - // 模拟用户数据 - final String _nickname = '用户昵称'; - final String _serialNumber = '12345678'; + // 用户数据(从存储加载) + String _nickname = '加载中...'; + String _serialNumber = '--'; + String? _avatarSvg; final String _referrerSerial = '87654321'; final String _community = '星空社区'; final String _parentCommunity = '银河社区'; @@ -58,6 +61,24 @@ class _ProfilePageState extends ConsumerState { void initState() { super.initState(); _startCountdown(); + _loadUserData(); + } + + /// 加载用户数据 + Future _loadUserData() async { + final accountService = ref.read(accountServiceProvider); + + final username = await accountService.getUsername(); + final serialNum = await accountService.getUserSerialNum(); + final avatarSvg = await accountService.getAvatarSvg(); + + if (mounted) { + setState(() { + _nickname = username ?? '未设置昵称'; + _serialNumber = serialNum?.toString() ?? '--'; + _avatarSvg = avatarSvg; + }); + } } @override @@ -261,17 +282,18 @@ class _ProfilePageState extends ConsumerState { ), child: ClipRRect( borderRadius: BorderRadius.circular(40), - child: Image.asset( - 'assets/images/Button@2x.png', - fit: BoxFit.cover, - errorBuilder: (context, error, stackTrace) { - return const Icon( - Icons.person, - size: 40, - color: Color(0xFF8B5A2B), - ); - }, - ), + child: _avatarSvg != null + ? SvgPicture.string( + _avatarSvg!, + width: 80, + height: 80, + fit: BoxFit.cover, + ) + : const Icon( + Icons.person, + size: 40, + color: Color(0xFF8B5A2B), + ), ), ), ),