import 'dart:io'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:worldhopper/l10n/app_localizations.dart'; import 'package:worldhopper/config/constants.dart'; import 'package:worldhopper/helpers/snackbar_helper.dart'; import 'package:worldhopper/providers/developer_mode_provider.dart'; import 'package:worldhopper/providers/package_info_provider.dart'; import 'package:worldhopper/screens/settings/dev_tests_screen.dart'; import 'package:worldhopper/widgets/worldhopper_app_bar.dart'; /// Screen for advanced settings class AdvancedSettingsScreen extends ConsumerWidget { const AdvancedSettingsScreen({super.key}); @override Widget build(BuildContext context, WidgetRef ref) { final l10n = AppLocalizations.of(context); final packageInfoAsync = ref.watch(packageInfoProvider); final isDeveloperMode = ref.watch(developerModeNotifierProvider); return Scaffold( appBar: WorldhopperAppBar( title: Text(l10n.advancedTitle), ), body: ListView( children: [ const SizedBox(height: 8), Card( margin: const EdgeInsets.symmetric(horizontal: 16, vertical: 8), child: Column( children: [ SwitchListTile( secondary: const Icon(Icons.developer_mode), title: Text(l10n.advancedDeveloperMode), subtitle: Text(l10n.advancedDeveloperModeSubtitle), value: isDeveloperMode, onChanged: (value) { ref .read(developerModeNotifierProvider.notifier) .setDeveloperMode(value); }, ), if (isDeveloperMode) ...[ const Divider(height: 1), ListTile( leading: const Icon(Icons.science_outlined), title: Text(l10n.advancedTests), subtitle: Text(l10n.advancedTestsSubtitle), trailing: const Icon(Icons.chevron_right), onTap: () { Navigator.of(context).push( MaterialPageRoute( builder: (_) => const DevTestsScreen(), ), ); }, ), ], ], ), ), _buildSectionHeader(context, l10n.advancedDebuggingInfo), Card( margin: const EdgeInsets.symmetric(horizontal: 16, vertical: 8), child: packageInfoAsync.when( data: (info) { final platform = '${Platform.operatingSystem} ${Platform.operatingSystemVersion}'; return Column( children: [ ListTile( leading: const Icon(Icons.label_outline), title: Text(l10n.advancedVersion), subtitle: Text(info.version), ), ListTile( leading: const Icon(Icons.build_outlined), title: Text(l10n.advancedBuildNumber), subtitle: Text(info.buildNumber), ), ListTile( leading: const Icon(Icons.inventory_2_outlined), title: Text(l10n.advancedPackageName), subtitle: Text(info.packageName), ), ListTile( leading: const Icon(Icons.storage_outlined), title: Text(l10n.advancedDatabaseVersion), subtitle: const Text('${AppConstants.databaseVersion}'), ), ListTile( leading: Icon(Platform.isIOS ? Icons.phone_iphone : Icons.phone_android), title: Text(l10n.advancedPlatform), subtitle: Text(platform), ), ListTile( leading: const Icon(Icons.copy), title: Text(l10n.advancedCopyToClipboard), subtitle: Text(l10n.advancedCopyToClipboardSubtitle), onTap: () { final debugInfo = StringBuffer() ..writeln('Version: ${info.version}') ..writeln('Build number: ${info.buildNumber}') ..writeln('Package name: ${info.packageName}') ..writeln( 'Database version: ${AppConstants.databaseVersion}') ..writeln('Platform: $platform'); Clipboard.setData( ClipboardData(text: debugInfo.toString().trim())); context.showInfoSnackBar(l10n.advancedDebugInfoCopied); }, ), ], ); }, loading: () => const Padding( padding: EdgeInsets.all(16), child: Center(child: CircularProgressIndicator()), ), error: (error, _) => ListTile( leading: const Icon(Icons.error_outline), title: Text(l10n.advancedFailedToLoadInfo), subtitle: Text('$error'), ), ), ), const SizedBox(height: 16), ], ), ); } Widget _buildSectionHeader(BuildContext context, String title) { return Padding( padding: const EdgeInsets.fromLTRB(32, 24, 16, 8), child: Text( title, style: Theme.of(context).textTheme.titleSmall?.copyWith( color: Theme.of(context).colorScheme.primary, fontWeight: FontWeight.bold, ), ), ); } }