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:
parent
d05ff9ee17
commit
1f852d1fca
|
|
@ -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<ProfilePage> {
|
||||
// 模拟用户数据
|
||||
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<ProfilePage> {
|
|||
void initState() {
|
||||
super.initState();
|
||||
_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
|
||||
|
|
@ -261,17 +282,18 @@ class _ProfilePageState extends ConsumerState<ProfilePage> {
|
|||
),
|
||||
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),
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
|
|
|
|||
Loading…
Reference in New Issue