Files
App.K12.Student.Miniapp_Flu…/lib/features/my/settings/about_app_page.dart
T
2026-09-09 16:15:05 +08:00

137 lines
3.9 KiB
Dart

import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:go_router/go_router.dart';
import 'package:new_learn/core/version/app_version_service.dart';
/// ============================================================
/// 【AboutAppPage】关于APP页 —— 对齐 Vue pages/myPackage/aboutApp/index.vue
///
/// 菜单:隐私政策 / 用户协议 / 版本号(只读)
/// 底部:APP备案号
/// ============================================================
class AboutAppPage extends ConsumerStatefulWidget {
const AboutAppPage({super.key});
@override
ConsumerState<AboutAppPage> createState() => _AboutAppPageState();
}
class _AboutAppPageState extends ConsumerState<AboutAppPage> {
String _version = '';
static const _recordNumber = '京ICP备2026019420号-2A';
@override
void initState() {
super.initState();
_loadVersion();
}
Future<void> _loadVersion() async {
final service = AppVersionService.instance;
if (service.versionName.isEmpty) {
await service.init();
}
if (mounted) setState(() => _version = service.versionName);
}
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: const Color(0xFFF5F8FA),
appBar: AppBar(
title: const Text('关于APP'),
backgroundColor: Colors.white,
surfaceTintColor: Colors.transparent,
leading: IconButton(
icon: const Icon(Icons.arrow_back),
onPressed: () => context.canPop() ? context.pop() : context.go('/my'),
),
),
body: ListView(
padding: EdgeInsets.all(12.w),
children: [
// 隐私政策
_buildRow(
title: '隐私政策',
trailing: const Icon(
Icons.chevron_right,
size: 22,
color: Color(0xFF7FB0F2),
),
onTap: () => context.push('/privacy-policy'),
showBorder: true,
),
// 用户协议
_buildRow(
title: '用户协议',
trailing: const Icon(
Icons.chevron_right,
size: 22,
color: Color(0xFF7FB0F2),
),
onTap: () => context.push('/user-agreement'),
showBorder: true,
),
// 版本号(只读,无跳转)
_buildRow(
title: '版本号',
trailing: Text(
_version,
style: TextStyle(fontSize: 14.sp, color: const Color(0xFF687FAD)),
),
onTap: null,
showBorder: false,
),
SizedBox(height: 48.h),
// 备案号
Center(
child: Text(
'APP备案编号:$_recordNumber',
style: TextStyle(fontSize: 12.sp, color: const Color(0xFF687FAD)),
),
),
],
),
);
}
Widget _buildRow({
required String title,
required Widget trailing,
required VoidCallback? onTap,
required bool showBorder,
}) {
return InkWell(
onTap: onTap,
child: Column(
children: [
Container(
height: 52.h,
padding: EdgeInsets.symmetric(horizontal: 16.w),
color: Colors.white,
child: Row(
children: [
Text(
title,
style: TextStyle(
fontSize: 16.sp,
color: const Color(0xFF1D2B47),
),
),
const Spacer(),
trailing,
],
),
),
if (showBorder)
Padding(
padding: EdgeInsets.symmetric(horizontal: 16.w),
child: Container(height: 1, color: const Color(0xFFEDF3F7)),
),
],
),
);
}
}