import 'dart:io'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_riverpod/flutter_riverpod.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 packageInfoAsync = ref.watch(packageInfoProvider); final isDeveloperMode = ref.watch(developerModeNotifierProvider); return Scaffold( appBar: const WorldhopperAppBar( title: Text('Advanced'), ), 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: const Text('Developer mode'), subtitle: const Text('Enable debugging tools'), value: isDeveloperMode, onChanged: (value) { ref .read(developerModeNotifierProvider.notifier) .setDeveloperMode(value); }, ), if (isDeveloperMode) ...[ const Divider(height: 1), ListTile( leading: const Icon(Icons.science_outlined), title: const Text('Tests'), subtitle: const Text('Preview UI components'), trailing: const Icon(Icons.chevron_right), onTap: () { Navigator.of(context).push( MaterialPageRoute( builder: (_) => const DevTestsScreen(), ), ); }, ), ], ], ), ), _buildSectionHeader(context, 'Debugging info'), 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: const Text('Version'), subtitle: Text(info.version), ), ListTile( leading: const Icon(Icons.build_outlined), title: const Text('Build number'), subtitle: Text(info.buildNumber), ), ListTile( leading: const Icon(Icons.inventory_2_outlined), title: const Text('Package name'), subtitle: Text(info.packageName), ), const ListTile( leading: Icon(Icons.storage_outlined), title: Text('Database version'), subtitle: Text('${AppConstants.databaseVersion}'), ), ListTile( leading: Icon(Platform.isIOS ? Icons.phone_iphone : Icons.phone_android), title: const Text('Platform'), subtitle: Text(platform), ), ListTile( leading: const Icon(Icons.copy), title: const Text('Copy to clipboard'), subtitle: const Text('Copy all debug info for bug reports'), 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('Debug info copied to clipboard'); }, ), ], ); }, loading: () => const Padding( padding: EdgeInsets.all(16), child: Center(child: CircularProgressIndicator()), ), error: (error, _) => ListTile( leading: const Icon(Icons.error_outline), title: const Text('Failed to load info'), 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, ), ), ); } }