This commit is contained in:
Developer
2026-03-31 23:31:38 +08:00
parent b081f09895
commit 2f785d6279
11 changed files with 549 additions and 94 deletions

View File

@@ -39,6 +39,7 @@ class PersonalCardState extends State<PersonalCard> {
late String _currentTip;
bool _isOnline = true;
bool _isEditingNickname = false;
bool _isUserPlanJoined = false;
late TextEditingController _nicknameController;
// 累计数据
@@ -55,6 +56,7 @@ class PersonalCardState extends State<PersonalCard> {
text: widget.userData['nickname'] ?? '诗词爱好者',
);
_loadOnlineStatus();
_loadUserPlanStatus();
_loadTotalStats();
}
@@ -78,6 +80,7 @@ class PersonalCardState extends State<PersonalCard> {
// 刷新数据(公共方法,供外部调用)
Future<void> refreshData() async {
await _loadTotalStats();
await _loadUserPlanStatus();
}
Future<void> _loadOnlineStatus() async {
@@ -101,6 +104,13 @@ class PersonalCardState extends State<PersonalCard> {
});
}
Future<void> _loadUserPlanStatus() async {
final prefs = await SharedPreferences.getInstance();
setState(() {
_isUserPlanJoined = prefs.getBool('user_plan_joined') ?? false;
});
}
Future<void> _toggleOnlineStatus() async {
// 如果当前是离线状态,要切换到在线状态,需要先检测网络
if (!_isOnline) {
@@ -502,11 +512,16 @@ class PersonalCardState extends State<PersonalCard> {
GestureDetector(
onTap: () {
setState(() {
_isEditingNickname = !_isEditingNickname;
if (_isEditingNickname) {
// 保存昵称
widget.userData['nickname'] =
_nicknameController.text;
} else {
// 进入编辑模式,初始化文本
_nicknameController.text =
widget.userData['nickname'] ?? '诗词爱好者';
}
_isEditingNickname = !_isEditingNickname;
});
},
child: Icon(
@@ -516,24 +531,25 @@ class PersonalCardState extends State<PersonalCard> {
),
),
const SizedBox(width: 8),
Container(
padding: const EdgeInsets.symmetric(
horizontal: 8,
vertical: 2,
),
decoration: BoxDecoration(
color: Colors.white.withOpacity(0.2),
borderRadius: BorderRadius.circular(12),
),
child: Text(
widget.userData['level'] ?? 'Lv.1',
style: const TextStyle(
color: Colors.white,
fontSize: 12,
fontWeight: FontWeight.w500,
if (_isUserPlanJoined)
Container(
padding: const EdgeInsets.symmetric(
horizontal: 8,
vertical: 2,
),
decoration: BoxDecoration(
color: Colors.amber.withOpacity(0.8),
borderRadius: BorderRadius.circular(12),
),
child: const Text(
'UEP',
style: TextStyle(
color: Colors.white,
fontSize: 12,
fontWeight: FontWeight.bold,
),
),
),
),
],
),
const SizedBox(height: 4),