mirror of
https://github.com/FoggedLens/deflock-app.git
synced 2026-02-12 16:52:51 +00:00
124 lines
4.3 KiB
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,
|
|
);
|
|
}
|
|
}
|