feat(mobile-app): use real user data in profile page

- Load username, serial number, and avatar from account service
- Display SVG avatar from backend instead of static image
- Show loading state while fetching user data

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
hailin 2025-12-07 20:47:42 -08:00
parent d05ff9ee17
commit 1f852d1fca
1 changed files with 36 additions and 14 deletions

View File

@ -1,7 +1,9 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:flutter_svg/flutter_svg.dart';
import 'package:go_router/go_router.dart'; import 'package:go_router/go_router.dart';
import '../../../../core/di/injection_container.dart';
import '../../../../routes/route_paths.dart'; import '../../../../routes/route_paths.dart';
import 'dart:async'; import 'dart:async';
@ -15,9 +17,10 @@ class ProfilePage extends ConsumerStatefulWidget {
} }
class _ProfilePageState extends ConsumerState<ProfilePage> { class _ProfilePageState extends ConsumerState<ProfilePage> {
// //
final String _nickname = '用户昵称'; String _nickname = '加载中...';
final String _serialNumber = '12345678'; String _serialNumber = '--';
String? _avatarSvg;
final String _referrerSerial = '87654321'; final String _referrerSerial = '87654321';
final String _community = '星空社区'; final String _community = '星空社区';
final String _parentCommunity = '银河社区'; final String _parentCommunity = '银河社区';
@ -58,6 +61,24 @@ class _ProfilePageState extends ConsumerState<ProfilePage> {
void initState() { void initState() {
super.initState(); super.initState();
_startCountdown(); _startCountdown();
_loadUserData();
}
///
Future<void> _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 @override
@ -261,17 +282,18 @@ class _ProfilePageState extends ConsumerState<ProfilePage> {
), ),
child: ClipRRect( child: ClipRRect(
borderRadius: BorderRadius.circular(40), borderRadius: BorderRadius.circular(40),
child: Image.asset( child: _avatarSvg != null
'assets/images/Button@2x.png', ? SvgPicture.string(
fit: BoxFit.cover, _avatarSvg!,
errorBuilder: (context, error, stackTrace) { width: 80,
return const Icon( height: 80,
Icons.person, fit: BoxFit.cover,
size: 40, )
color: Color(0xFF8B5A2B), : const Icon(
); Icons.person,
}, size: 40,
), color: Color(0xFF8B5A2B),
),
), ),
), ),
), ),