release
This commit is contained in:
@@ -118,7 +118,7 @@ class _LoginRegisterDialogState extends State<LoginRegisterDialog> {
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
const Text(
|
||||
'填写投票凭证',
|
||||
'填写 投票凭证',
|
||||
style: TextStyle(fontSize: 20, fontWeight: FontWeight.bold),
|
||||
),
|
||||
IconButton(
|
||||
@@ -127,7 +127,14 @@ class _LoginRegisterDialogState extends State<LoginRegisterDialog> {
|
||||
),
|
||||
],
|
||||
),
|
||||
const SizedBox(height: 20),
|
||||
// const SizedBox(height: 8),
|
||||
// 副标题
|
||||
const Text(
|
||||
'微信号或手机号或邮箱作为投票凭证,\n任何人都可以填写,限时开放投票,\n投票凭证仅用于投票,不会泄露隐私.\n结束后删除会所有凭证,仅保留投票结果',
|
||||
style: TextStyle(fontSize: 14, color: Colors.grey),
|
||||
textAlign: TextAlign.center,
|
||||
),
|
||||
const SizedBox(height: 2),
|
||||
Form(
|
||||
key: _formKey,
|
||||
child: Column(
|
||||
@@ -135,7 +142,7 @@ class _LoginRegisterDialogState extends State<LoginRegisterDialog> {
|
||||
TextFormField(
|
||||
controller: _usernameController,
|
||||
decoration: const InputDecoration(
|
||||
labelText: '投票凭证',
|
||||
labelText: '点击填写',
|
||||
hintText: '手机号/邮箱/微信号',
|
||||
border: OutlineInputBorder(),
|
||||
prefixIcon: Icon(Icons.person),
|
||||
|
||||
@@ -3,6 +3,7 @@ import 'package:flutter/services.dart';
|
||||
import 'package:share_plus/share_plus.dart';
|
||||
import '../../../constants/app_constants.dart';
|
||||
import 'package:wakelock_plus/wakelock_plus.dart';
|
||||
import 'dart:io' as io;
|
||||
|
||||
class PopMenu extends StatelessWidget {
|
||||
final VoidCallback? onRefresh;
|
||||
@@ -44,32 +45,38 @@ class PopMenu extends StatelessWidget {
|
||||
|
||||
static Future<void> toggleScreenWake(BuildContext context) async {
|
||||
try {
|
||||
// 检查当前状态
|
||||
final bool isEnabled = await WakelockPlus.enabled;
|
||||
// 使用 io.Platform 检测平台
|
||||
final String osName = io.Platform.operatingSystem;
|
||||
final String osVersion = io.Platform.operatingSystemVersion;
|
||||
print('Current platform: $osName, version: $osVersion');
|
||||
|
||||
// 直接尝试启用屏幕常亮
|
||||
await WakelockPlus.enable();
|
||||
|
||||
// 切换状态
|
||||
if (isEnabled) {
|
||||
await WakelockPlus.disable();
|
||||
if (context.mounted) {
|
||||
ScaffoldMessenger.of(
|
||||
context,
|
||||
).showSnackBar(const SnackBar(content: Text('屏幕常亮已关闭')));
|
||||
}
|
||||
} else {
|
||||
await WakelockPlus.enable();
|
||||
if (context.mounted) {
|
||||
ScaffoldMessenger.of(
|
||||
context,
|
||||
).showSnackBar(const SnackBar(content: Text('屏幕常亮已开启')));
|
||||
}
|
||||
}
|
||||
} catch (e) {
|
||||
if (context.mounted) {
|
||||
ScaffoldMessenger.of(
|
||||
context,
|
||||
).showSnackBar(const SnackBar(content: Text('屏幕常亮已开启')));
|
||||
}
|
||||
} catch (e, stackTrace) {
|
||||
print('WakelockPlus error: $e');
|
||||
print('Stack trace: $stackTrace');
|
||||
if (context.mounted) {
|
||||
// 检查错误类型,判断是否是设备不支持
|
||||
String errorMessage;
|
||||
if (e.toString().contains('not supported') ||
|
||||
e.toString().contains('unsupported') ||
|
||||
e.toString().contains('不支持')) {
|
||||
errorMessage = '该设备不支持屏幕常亮功能';
|
||||
} else {
|
||||
errorMessage = '屏幕常亮功能异常: $e';
|
||||
}
|
||||
|
||||
showDialog(
|
||||
context: context,
|
||||
builder: (context) => AlertDialog(
|
||||
title: const Text('提示'),
|
||||
content: const Text('该设备不支持屏幕常亮功能'),
|
||||
content: Text(errorMessage),
|
||||
actions: [
|
||||
TextButton(
|
||||
onPressed: () => Navigator.pop(context),
|
||||
@@ -134,9 +141,11 @@ class PopMenu extends StatelessWidget {
|
||||
Icons.screen_lock_rotation,
|
||||
() => toggleScreenWake(context),
|
||||
),
|
||||
_buildBottomSheetItem(context, '夜间模式', Icons.dark_mode, onDarkMode),
|
||||
_buildBottomSheetItem(context, '取消', Icons.settings, onSettings),
|
||||
const SizedBox(height: 20),
|
||||
_buildBottomSheetItem(context, '设置', Icons.settings, onSettings),
|
||||
_buildBottomSheetItem(context, '返回桌面', Icons.exit_to_app, () {
|
||||
SystemNavigator.pop();
|
||||
}),
|
||||
],
|
||||
),
|
||||
);
|
||||
|
||||
@@ -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),
|
||||
|
||||
@@ -5,9 +5,11 @@
|
||||
|
||||
import 'dart:convert';
|
||||
import 'dart:math' show Random;
|
||||
import 'dart:io' as io;
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:wakelock_plus/wakelock_plus.dart';
|
||||
|
||||
import '../../constants/app_constants.dart';
|
||||
import '../../controllers/history_controller.dart';
|
||||
@@ -44,6 +46,7 @@ class _ProfilePageState extends State<ProfilePage>
|
||||
int _currentPage = 1; // 默认显示第2页(设置)
|
||||
bool _isCardExpanded = false; // 个人卡片展开状态
|
||||
bool _isStatsHidden = false; // 统计数据隐藏状态
|
||||
bool _isScreenWakeEnabled = false; // 屏幕常亮状态
|
||||
double _startY = 0.0;
|
||||
// 历史记录相关
|
||||
List<Map<String, dynamic>> _poetryHistory = [];
|
||||
@@ -409,7 +412,7 @@ class _ProfilePageState extends State<ProfilePage>
|
||||
if (!_isStatsHidden) ...[
|
||||
_buildInfoItem('今日浏览', '$_todayViews 条'),
|
||||
_buildInfoItem('本周浏览', '$_weekViews 条'),
|
||||
_buildInfoItem('天数', '$_useDays 天'),
|
||||
_buildInfoItem('已用', '$_useDays 天'),
|
||||
_buildInfoItem('数据', _dataSize),
|
||||
_buildInfoItem('笔记', '$_noteCount 个'),
|
||||
_buildInfoItem('今日答题', '$_todayQuestions 题'),
|
||||
@@ -521,6 +524,12 @@ class _ProfilePageState extends State<ProfilePage>
|
||||
children: [
|
||||
// === 账户设置组 ===
|
||||
_buildSettingsGroup('软件设置', [
|
||||
_buildSettingsItem(
|
||||
'功能设置',
|
||||
Icons.verified_user,
|
||||
() => _navigateToAppFunSettings(),
|
||||
),
|
||||
|
||||
_buildSettingsItem(
|
||||
'离线使用',
|
||||
Icons.volunteer_activism,
|
||||
@@ -531,11 +540,7 @@ class _ProfilePageState extends State<ProfilePage>
|
||||
Icons.history,
|
||||
() => _navigateToHistoryPage(),
|
||||
),
|
||||
_buildSettingsItem(
|
||||
'功能设置',
|
||||
Icons.verified_user,
|
||||
() => _navigateToAppFunSettings(),
|
||||
),
|
||||
|
||||
_buildSettingsItem(
|
||||
'主题风格',
|
||||
Icons.palette,
|
||||
@@ -580,11 +585,7 @@ class _ProfilePageState extends State<ProfilePage>
|
||||
Icons.cleaning_services,
|
||||
() => showBugListBottomSheet(context),
|
||||
),
|
||||
_buildSettingsItem(
|
||||
'关闭退出',
|
||||
Icons.palette,
|
||||
() => _showSnackBar('重启 关闭?'),
|
||||
),
|
||||
_buildScreenWakeItem(),
|
||||
]),
|
||||
],
|
||||
);
|
||||
@@ -800,6 +801,173 @@ class _ProfilePageState extends State<ProfilePage>
|
||||
);
|
||||
}
|
||||
|
||||
Widget _buildScreenWakeItem() {
|
||||
// === 屏幕常亮设置项:显示图标、标题和开关 ===
|
||||
return ListTile(
|
||||
leading: Icon(
|
||||
Icons.screen_lock_rotation,
|
||||
color: AppConstants.primaryColor,
|
||||
size: 20,
|
||||
),
|
||||
title: Text(
|
||||
'屏幕常亮',
|
||||
style: const TextStyle(fontSize: 14, color: Colors.black87),
|
||||
),
|
||||
trailing: Switch(
|
||||
value: _isScreenWakeEnabled,
|
||||
onChanged: (value) async {
|
||||
if (value) {
|
||||
// 显示提示对话框
|
||||
showDialog(
|
||||
context: context,
|
||||
builder: (context) => AlertDialog(
|
||||
shape: RoundedRectangleBorder(
|
||||
borderRadius: BorderRadius.circular(16),
|
||||
),
|
||||
title: Row(
|
||||
children: [
|
||||
Icon(
|
||||
Icons.info_outline,
|
||||
color: AppConstants.primaryColor,
|
||||
size: 20,
|
||||
),
|
||||
const SizedBox(width: 8),
|
||||
const Text(
|
||||
'屏幕常亮提示',
|
||||
style: TextStyle(
|
||||
fontSize: 16,
|
||||
fontWeight: FontWeight.bold,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
content: Column(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
const SizedBox(height: 8),
|
||||
Text(
|
||||
'⚠️ 注意事项',
|
||||
style: TextStyle(
|
||||
fontSize: 14,
|
||||
fontWeight: FontWeight.w500,
|
||||
color: Colors.orange[600],
|
||||
),
|
||||
),
|
||||
const SizedBox(height: 8),
|
||||
Text(
|
||||
'• OLED屏幕长时间显示相同内容可能会造成不可逆老化',
|
||||
style: const TextStyle(
|
||||
fontSize: 14,
|
||||
color: Colors.black87,
|
||||
),
|
||||
),
|
||||
const SizedBox(height: 6),
|
||||
Text(
|
||||
'• 开启常亮后,配合自动刷新内容的设置,实现常亮自动加载诗句',
|
||||
style: const TextStyle(
|
||||
fontSize: 14,
|
||||
color: Colors.black87,
|
||||
),
|
||||
),
|
||||
const SizedBox(height: 6),
|
||||
Text(
|
||||
'• 挂起常亮后,需保持该软件在屏幕中显示,记得关闭常亮哦!',
|
||||
style: const TextStyle(
|
||||
fontSize: 14,
|
||||
color: Colors.black87,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
actions: [
|
||||
TextButton(
|
||||
onPressed: () => Navigator.pop(context),
|
||||
style: TextButton.styleFrom(
|
||||
foregroundColor: Colors.grey[600],
|
||||
),
|
||||
child: const Text('取消'),
|
||||
),
|
||||
TextButton(
|
||||
onPressed: () async {
|
||||
Navigator.pop(context);
|
||||
await _toggleScreenWake(true);
|
||||
},
|
||||
style: TextButton.styleFrom(
|
||||
foregroundColor: AppConstants.primaryColor,
|
||||
textStyle: const TextStyle(fontWeight: FontWeight.bold),
|
||||
),
|
||||
child: const Text('确定'),
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
} else {
|
||||
await _toggleScreenWake(false);
|
||||
}
|
||||
},
|
||||
activeColor: AppConstants.primaryColor,
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
Future<void> _toggleScreenWake(bool enable) async {
|
||||
try {
|
||||
// 使用 io.Platform 检测平台
|
||||
final String osName = io.Platform.operatingSystem;
|
||||
final String osVersion = io.Platform.operatingSystemVersion;
|
||||
print('Current platform: $osName, version: $osVersion');
|
||||
|
||||
if (enable) {
|
||||
await WakelockPlus.enable();
|
||||
if (mounted) {
|
||||
ScaffoldMessenger.of(
|
||||
context,
|
||||
).showSnackBar(const SnackBar(content: Text('屏幕常亮已开启')));
|
||||
}
|
||||
} else {
|
||||
await WakelockPlus.disable();
|
||||
if (mounted) {
|
||||
ScaffoldMessenger.of(
|
||||
context,
|
||||
).showSnackBar(const SnackBar(content: Text('屏幕常亮已关闭')));
|
||||
}
|
||||
}
|
||||
|
||||
setState(() {
|
||||
_isScreenWakeEnabled = enable;
|
||||
});
|
||||
} catch (e, stackTrace) {
|
||||
print('WakelockPlus error: $e');
|
||||
print('Stack trace: $stackTrace');
|
||||
if (mounted) {
|
||||
// 检查错误类型,判断是否是设备不支持
|
||||
String errorMessage;
|
||||
if (e.toString().contains('not supported') ||
|
||||
e.toString().contains('unsupported') ||
|
||||
e.toString().contains('不支持')) {
|
||||
errorMessage = '该设备不支持屏幕常亮功能';
|
||||
} else {
|
||||
errorMessage = '屏幕常亮功能异常: $e';
|
||||
}
|
||||
|
||||
showDialog(
|
||||
context: context,
|
||||
builder: (context) => AlertDialog(
|
||||
title: const Text('提示'),
|
||||
content: Text(errorMessage),
|
||||
actions: [
|
||||
TextButton(
|
||||
onPressed: () => Navigator.pop(context),
|
||||
child: const Text('确定'),
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Widget _buildInteractionItem(String label, String value) {
|
||||
// === 互动统计项:显示标签和数值 ===
|
||||
return Expanded(
|
||||
|
||||
@@ -561,12 +561,19 @@ class _AppFunSettingsPageState extends State<AppFunSettingsPage> {
|
||||
TextButton(
|
||||
onPressed: () async {
|
||||
Navigator.of(context).pop();
|
||||
await _setAutoRefresh(false);
|
||||
await _setDebugInfo(false);
|
||||
// 重置所有设置为默认值
|
||||
await _setAutoRefresh(false); // 自动刷新:关闭
|
||||
await _setDebugInfo(false); // 调试信息:关闭
|
||||
await _setPreload(true); // 预加载:开启
|
||||
await _setHideSecondaryButtons(false); // 隐藏次要按钮:关闭
|
||||
await _setSoundEnabled(false); // 声音反馈:关闭
|
||||
// 全局Tips:开启
|
||||
final prefs = await SharedPreferences.getInstance();
|
||||
await prefs.setBool(_globalTipsKey, true);
|
||||
// 震动反馈:开启(不需要保存到SharedPreferences,直接更新状态)
|
||||
setState(() {
|
||||
_soundEnabled = true;
|
||||
_vibrationEnabled = true;
|
||||
_globalTipsEnabled = true; // 重置全局Tips开关为开启
|
||||
_globalTipsEnabled = true; // 全局Tips:开启
|
||||
});
|
||||
_showSnackBar('已恢复默认设置');
|
||||
},
|
||||
@@ -577,3 +584,10 @@ class _AppFunSettingsPageState extends State<AppFunSettingsPage> {
|
||||
);
|
||||
}
|
||||
}
|
||||
// - 自动刷新:关闭
|
||||
// - 调试信息:关闭
|
||||
// - 预加载:开启
|
||||
// - 隐藏次要按钮:关闭
|
||||
// - 声音反馈:关闭
|
||||
// - 震动反馈:开启
|
||||
// - 全局Tips:开启
|
||||
@@ -902,38 +902,70 @@ class _OfflineDataPageState extends State<OfflineDataPage> {
|
||||
children: [
|
||||
Row(
|
||||
children: [
|
||||
Icon(Icons.info_outline, color: Colors.blue[600], size: 16),
|
||||
Icon(Icons.info_outline, color: Colors.blue[600], size: 20),
|
||||
const SizedBox(width: 8),
|
||||
Text(
|
||||
'温馨提示',
|
||||
style: TextStyle(
|
||||
fontSize: 14,
|
||||
fontWeight: FontWeight.w600,
|
||||
fontSize: 16,
|
||||
fontWeight: FontWeight.bold,
|
||||
color: Colors.blue[600],
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
const SizedBox(height: 8),
|
||||
const Text(
|
||||
'• 开启离线模式后,将会循环加载本地的数据源',
|
||||
style: TextStyle(fontSize: 12, color: Colors.grey),
|
||||
),
|
||||
const Text(
|
||||
'• 下载的数据将保存在本地,可在无网络时使用',
|
||||
style: TextStyle(fontSize: 12, color: Colors.grey),
|
||||
),
|
||||
const Text(
|
||||
'• 下载过程中请保持网络连接',
|
||||
style: TextStyle(fontSize: 12, color: Colors.grey),
|
||||
),
|
||||
const Text(
|
||||
'• 缓存数据不会写入历史记录',
|
||||
style: TextStyle(fontSize: 12, color: Colors.grey),
|
||||
),
|
||||
const Text(
|
||||
'• 建议在WiFi环境下下载较多数据',
|
||||
style: TextStyle(fontSize: 12, color: Colors.grey),
|
||||
const SizedBox(height: 12),
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(left: 4),
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Text(
|
||||
'• 数据下载后 需手动开启离线状态',
|
||||
style: TextStyle(
|
||||
fontSize: 14,
|
||||
color: Colors.grey[700],
|
||||
fontWeight: FontWeight.w500,
|
||||
),
|
||||
),
|
||||
const SizedBox(height: 4),
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(left: 20),
|
||||
child: Text(
|
||||
'方法:个人 → 下拉 点击头像下面关闭按钮 头像显示离线',
|
||||
style: TextStyle(
|
||||
fontSize: 13,
|
||||
color: Colors.grey[600],
|
||||
),
|
||||
),
|
||||
),
|
||||
const SizedBox(height: 8),
|
||||
Text(
|
||||
'• 开启离线模式后,将会循环加载本地的数据源',
|
||||
style: TextStyle(fontSize: 14, color: Colors.grey[700]),
|
||||
),
|
||||
const SizedBox(height: 8),
|
||||
Text(
|
||||
'• 下载的数据将保存在本地,可在无网络时使用',
|
||||
style: TextStyle(fontSize: 14, color: Colors.grey[700]),
|
||||
),
|
||||
const SizedBox(height: 8),
|
||||
Text(
|
||||
'• 下载过程中请保持网络连接',
|
||||
style: TextStyle(fontSize: 14, color: Colors.grey[700]),
|
||||
),
|
||||
const SizedBox(height: 8),
|
||||
Text(
|
||||
'• 缓存数据不会写入历史记录',
|
||||
style: TextStyle(fontSize: 14, color: Colors.grey[700]),
|
||||
),
|
||||
const SizedBox(height: 8),
|
||||
Text(
|
||||
'• 建议在WiFi环境下下载较多数据',
|
||||
style: TextStyle(fontSize: 14, color: Colors.grey[700]),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
|
||||
@@ -409,8 +409,8 @@ class _UserPlanPageState extends State<UserPlanPage> {
|
||||
{'icon': Icons.how_to_vote, 'title': '参与投票', 'desc': '对产品功能进行投票'},
|
||||
{'icon': Icons.bar_chart, 'title': '查看统计数据', 'desc': '查看全站使用统计'},
|
||||
{'icon': Icons.edit_note, 'title': '开放投稿', 'desc': '投稿您的诗词作品'},
|
||||
{'icon': Icons.science, 'title': '体验Beta功能', 'desc': '抢先体验新功能'},
|
||||
{'icon': Icons.bug_report, 'title': '软件内测版', 'desc': '参与内测版本体验'},
|
||||
{'icon': Icons.science, 'title': '体验Beta功能', 'desc': '内测版本抢先体验'},
|
||||
{'icon': Icons.bug_report, 'title': '刷新次数', 'desc': '获得更多api调用次数'},
|
||||
{'icon': Icons.card_giftcard, 'title': '专属显示', 'desc': '获得不同的显示效果'},
|
||||
];
|
||||
|
||||
|
||||
Reference in New Issue
Block a user