Files
gps-speedo/lib/main.dart
T
Mikkeli Matlock f5239d4a2a Implement complete GPS speedometer functionality
Features implemented:
- Real-time GPS speed tracking with permission handling
- Customizable speed units (km/h, mph) with persistent settings
- Digital and analog speedometer display styles
- Dark/light theme support with system integration
- Optional metrics: coordinates, distance, trip time, GPS accuracy
- Trip reset functionality and error handling
- Modular architecture with Provider state management

Technical details:
- Added dependencies: geolocator, permission_handler, provider, shared_preferences
- Configured Android location permissions (FINE_LOCATION, COARSE_LOCATION)
- Portrait orientation lock for mobile-first experience
- Extensible settings system for future customization options
- Clean separation of concerns: providers, screens, widgets

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-08-20 23:30:14 +09:00

48 lines
1.3 KiB
Dart

import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:provider/provider.dart';
import 'providers/location_provider.dart';
import 'providers/settings_provider.dart';
import 'screens/speedometer_screen.dart';
void main() {
runApp(const SpeedometerApp());
}
class SpeedometerApp extends StatelessWidget {
const SpeedometerApp({super.key});
@override
Widget build(BuildContext context) {
SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]);
return MultiProvider(
providers: [
ChangeNotifierProvider(create: (_) => SettingsProvider()),
ChangeNotifierProvider(create: (_) => LocationProvider()),
],
child: Consumer<SettingsProvider>(
builder: (context, settings, child) {
return MaterialApp(
title: 'GPS Speedometer',
debugShowCheckedModeBanner: false,
theme: _buildTheme(settings.isDarkMode),
home: const SpeedometerScreen(),
);
},
),
);
}
ThemeData _buildTheme(bool isDarkMode) {
return ThemeData(
useMaterial3: true,
brightness: isDarkMode ? Brightness.dark : Brightness.light,
colorScheme: ColorScheme.fromSeed(
seedColor: Colors.blue,
brightness: isDarkMode ? Brightness.dark : Brightness.light,
),
);
}
}