diff options
| author | Mica White <botahamec@outlook.com> | 2025-12-28 17:45:53 -0500 |
|---|---|---|
| committer | Mica White <botahamec@outlook.com> | 2025-12-28 17:45:53 -0500 |
| commit | 40794d320d287c13e011078d09b3669af77e120f (patch) | |
| tree | 9ba0648104c53a7ba08a23ed9708d541b7878a9d /lib | |
| parent | b96491034b27ba614cb465e0d7bf92e855b95fff (diff) | |
Implement about page
Diffstat (limited to 'lib')
| -rwxr-xr-x | lib/main.dart | 113 |
1 files changed, 2 insertions, 111 deletions
diff --git a/lib/main.dart b/lib/main.dart index 273f93f..1bfbccc 100755 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,21 +1,8 @@ -import 'dart:async';
-
import 'package:flutter/material.dart';
-import 'package:geolocator/geolocator.dart';
-
-enum SpeedUnit { milesPerHour, kilometersPerHour }
-extension on SpeedUnit {
- double fromMetersPerSecond(double metersPerSecond) => switch (this) {
- SpeedUnit.kilometersPerHour => metersPerSecond * 3.6,
- SpeedUnit.milesPerHour => metersPerSecond * 2.236936,
- };
+import 'home.dart';
- String get acronym => switch (this) {
- SpeedUnit.kilometersPerHour => 'kmph',
- SpeedUnit.milesPerHour => 'mph',
- };
-}
+enum SpeedUnit { milesPerHour, kilometersPerHour }
void main() async {
runApp(const MyApp());
@@ -41,99 +28,3 @@ class MyApp extends StatelessWidget { );
}
}
-
-class HomePage extends StatefulWidget {
- const HomePage({super.key});
-
- @override
- State<HomePage> createState() => _HomePageState();
-}
-
-class _HomePageState extends State<HomePage> {
- StreamSubscription<Position>? _positionStream;
- double _speed = 0.0;
- double _speedAccuracy = 0.0;
- SpeedUnit _speedUnit = SpeedUnit.milesPerHour;
- LocationSettings _locationSettings = LocationSettings();
-
- _initPositionStream() {
- _positionStream =
- Geolocator.getPositionStream(
- locationSettings: _locationSettings,
- ).listen((Position? position) {
- if (position != null) {
- setState(() {
- _speed = position.speed;
- _speedAccuracy = position.speedAccuracy;
- });
- }
- });
- }
-
- @override
- void initState() {
- super.initState();
-
- Geolocator.checkPermission()
- .then(
- (permission) => permission == LocationPermission.denied
- ? Geolocator.requestPermission()
- : permission,
- )
- .then((permission) {
- if (![
- LocationPermission.deniedForever,
- LocationPermission.denied,
- ].contains(permission)) {
- _initPositionStream();
- }
- });
- }
-
- @override
- void dispose() {
- super.dispose();
- _positionStream?.cancel();
- }
-
- @override
- Widget build(BuildContext context) {
- return Scaffold(
- appBar: AppBar(
- backgroundColor: Theme.of(context).colorScheme.inversePrimary,
- title: Text("Speedometer"),
- actions: [
- MenuAnchor(
- builder: (context, controller, _child) => IconButton(
- icon: Icon(Icons.more_vert),
- onPressed: () =>
- controller.isOpen ? controller.close() : controller.open(),
- tooltip: "Navigation menu",
- ),
- menuChildren: [
- MenuItemButton(child: Text('Settings')),
- MenuItemButton(child: Text('About')),
- ],
- ),
- ],
- ),
- body: Center(
- child: Column(
- mainAxisAlignment: MainAxisAlignment.center,
- crossAxisAlignment: CrossAxisAlignment.center,
- children: [
- Flex(direction: Axis.horizontal),
- Text(
- '${_speedUnit.fromMetersPerSecond(_speed).round()} ${_speedUnit.acronym}',
- style: Theme.of(context).textTheme.displayLarge,
- ),
- Text(
- '± ${_speedUnit.fromMetersPerSecond(_speedAccuracy).round()} ${_speedUnit.acronym}',
- style: Theme.of(context).textTheme.displaySmall,
- ),
- ],
- ),
- ),
- );
- }
-}
|
