Files
deflock-app/lib/screens/settings_screen.dart

124 lines
4.3 KiB
Dart

import 'package:flutter/material.dart';
import 'settings/sections/auth_section.dart';
import 'settings/sections/upload_mode_section.dart';
import 'settings/sections/queue_section.dart';
import '../services/localization_service.dart';
import '../services/version_service.dart';
import '../dev_config.dart';
class SettingsScreen extends StatelessWidget {
const SettingsScreen({super.key});
@override
Widget build(BuildContext context) {
final locService = LocalizationService.instance;
return AnimatedBuilder(
animation: LocalizationService.instance,
builder: (context, child) => Scaffold(
appBar: AppBar(title: Text(locService.t('settings.title'))),
body: ListView(
padding: const EdgeInsets.all(16),
children: [
// Only show upload mode section in development builds
if (kEnableDevelopmentModes) ...[
const UploadModeSection(),
const Divider(),
],
const AuthSection(),
const Divider(),
const QueueSection(),
const Divider(),
// Navigation to sub-pages
_buildNavigationTile(
context,
icon: Icons.account_tree,
title: locService.t('settings.profiles'),
subtitle: locService.t('settings.profilesSubtitle'),
onTap: () => Navigator.pushNamed(context, '/settings/profiles'),
),
const Divider(),
// Only show navigation settings in development builds
if (kEnableNavigationFeatures) ...[
_buildNavigationTile(
context,
icon: Icons.navigation,
title: locService.t('navigation.navigationSettings'),
subtitle: locService.t('navigation.navigationSettingsSubtitle'),
onTap: () => Navigator.pushNamed(context, '/settings/navigation'),
),
const Divider(),
],
_buildNavigationTile(
context,
icon: Icons.cloud_off,
title: locService.t('settings.offlineSettings'),
subtitle: locService.t('settings.offlineSettingsSubtitle'),
onTap: () => Navigator.pushNamed(context, '/settings/offline'),
),
const Divider(),
_buildNavigationTile(
context,
icon: Icons.tune,
title: locService.t('settings.advancedSettings'),
subtitle: locService.t('settings.advancedSettingsSubtitle'),
onTap: () => Navigator.pushNamed(context, '/settings/advanced'),
),
const Divider(),
_buildNavigationTile(
context,
icon: Icons.language,
title: locService.t('settings.language'),
subtitle: locService.t('settings.languageSubtitle'),
onTap: () => Navigator.pushNamed(context, '/settings/language'),
),
const Divider(),
_buildNavigationTile(
context,
icon: Icons.info_outline,
title: locService.t('settings.aboutInfo'),
subtitle: locService.t('settings.aboutSubtitle'),
onTap: () => Navigator.pushNamed(context, '/settings/about'),
),
const Divider(),
// Version display
Padding(
padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 8),
child: Text(
'Version: ${VersionService().version}',
style: Theme.of(context).textTheme.bodySmall?.copyWith(
color: Theme.of(context).textTheme.bodySmall?.color?.withOpacity(0.6),
),
textAlign: TextAlign.center,
),
),
],
),
),
);
}
Widget _buildNavigationTile(
BuildContext context, {
required IconData icon,
required String title,
required String subtitle,
required VoidCallback onTap,
}) {
return ListTile(
leading: Icon(icon),
title: Text(title),
subtitle: Text(subtitle),
trailing: const Icon(Icons.arrow_forward_ios, size: 16),
onTap: onTap,
);
}
}