Files
video/app/lib/screens/settings/settings_screen.dart
2026-10-17 09:41:11 +08:00

68 lines
2.3 KiB
Dart

import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:go_router/go_router.dart';
import '../../core/config/app_config.dart';
import '../../core/theme/app_theme.dart';
import '../../providers/auth_provider.dart';
/// 设置页(《01-开发文档》5.1 /settings):版本信息 + 退出登录
class SettingsScreen extends ConsumerWidget {
const SettingsScreen({super.key});
@override
Widget build(BuildContext context, WidgetRef ref) {
final isLoggedIn = ref.watch(authProvider).isLoggedIn;
return Scaffold(
appBar: AppBar(title: const Text('设置')),
body: ListView(
children: [
// 版本信息
ListTile(
leading: const Icon(Icons.info_outline, color: AppColors.textSecondary),
title: const Text('当前版本'),
trailing: Text(
'v${AppConfig.appVersion} (${AppConfig.appVersionCode})',
style: TextStyle(color: AppColors.textWeak, fontSize: 13),
),
),
if (isLoggedIn) ...[
const Divider(height: 32, indent: 16, endIndent: 16),
ListTile(
leading: const Icon(Icons.logout, color: AppColors.primary),
title: const Text('退出登录',
style: TextStyle(color: AppColors.primary)),
onTap: () => _confirmLogout(context, ref),
),
],
],
),
);
}
Future<void> _confirmLogout(BuildContext context, WidgetRef ref) async {
final ok = await showDialog<bool>(
context: context,
builder: (ctx) => AlertDialog(
backgroundColor: AppColors.surface,
title: const Text('退出登录', style: TextStyle(fontSize: 16)),
content: const Text('确定退出当前账号吗?'),
actions: [
TextButton(
onPressed: () => Navigator.pop(ctx, false),
child: const Text('取消'),
),
TextButton(
onPressed: () => Navigator.pop(ctx, true),
child: const Text('退出', style: TextStyle(color: AppColors.primary)),
),
],
),
);
if (ok == true && context.mounted) {
await ref.read(authProvider.notifier).logout();
if (context.mounted) context.go('/home');
}
}
}