import 'package:flutter/material.dart'; import 'package:flutter_gen/gen_l10n/app_localizations.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'package:traccar_client/preferences.dart'; import 'package:flutter_background_geolocation/flutter_background_geolocation.dart' as bg; import 'status_screen.dart'; import 'settings_screen.dart'; class MainScreen extends StatefulWidget { const MainScreen({super.key}); @override State createState() => _MainScreenState(); } class _MainScreenState extends State { bool loading = true; late SharedPreferences preferences; bool trackingEnabled = false; @override void initState() { super.initState(); _initState(); } void _initState() async { preferences = await SharedPreferences.getInstance(); final state = await bg.BackgroundGeolocation.ready( Preferences.geolocationConfig(preferences), ); setState(() { loading = false; trackingEnabled = state.enabled; }); bg.BackgroundGeolocation.onEnabledChange((bool enabled) { setState(() { trackingEnabled = enabled; }); }); } Widget _buildTrackingCard() { return Card( child: Padding( padding: const EdgeInsets.all(16), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ ListTile( contentPadding: EdgeInsets.zero, title: Text(AppLocalizations.of(context)!.trackingTitle), titleTextStyle: Theme.of(context).textTheme.headlineMedium, ), ListTile( contentPadding: EdgeInsets.zero, title: Text(AppLocalizations.of(context)!.idLabel), trailing: Text(preferences.getString(Preferences.id) ?? ''), leadingAndTrailingTextStyle: Theme.of(context).textTheme.bodyLarge, ), SwitchListTile( contentPadding: EdgeInsets.zero, title: Text(AppLocalizations.of(context)!.trackingLabel), value: trackingEnabled, onChanged: (bool value) { if (value) { bg.BackgroundGeolocation.start(); } else { bg.BackgroundGeolocation.stop(); } }, ), const SizedBox(height: 8), FilledButton.tonal( onPressed: () { Navigator.push(context, MaterialPageRoute(builder: (_) => const StatusScreen())); }, child: Text(AppLocalizations.of(context)!.statusButton), ), ], ), ), ); } Widget _buildSettingsCard() { return Card( child: Padding( padding: const EdgeInsets.all(16), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ ListTile( contentPadding: EdgeInsets.zero, title: Text(AppLocalizations.of(context)!.settingsTitle), titleTextStyle: Theme.of(context).textTheme.headlineMedium, ), ListTile( contentPadding: EdgeInsets.zero, title: Text(AppLocalizations.of(context)!.urlLabel), trailing: Text(preferences.getString(Preferences.url) ?? ''), leadingAndTrailingTextStyle: Theme.of(context).textTheme.bodyLarge, ), const SizedBox(height: 8), FilledButton.tonal( onPressed: () { Navigator.push(context, MaterialPageRoute(builder: (_) => const SettingsScreen())); }, child: Text(AppLocalizations.of(context)!.settingsButton), ), ] ), ), ); } @override Widget build(BuildContext context) { if (loading) { return const Center(child: CircularProgressIndicator()); } return Scaffold( appBar: AppBar( title: Text(AppLocalizations.of(context)!.mainTitle), ), body: SingleChildScrollView( padding: const EdgeInsets.all(16.0), child: Column( children: [ _buildTrackingCard(), const SizedBox(height: 16), _buildSettingsCard(), ], ), ), ); } }