From 40794d320d287c13e011078d09b3669af77e120f Mon Sep 17 00:00:00 2001 From: Mica White Date: Sun, 28 Dec 2025 17:45:53 -0500 Subject: Implement about page --- lib/main.dart | 113 +------------------------ linux/flutter/generated_plugin_registrant.cc | 4 + linux/flutter/generated_plugins.cmake | 1 + macos/Flutter/GeneratedPluginRegistrant.swift | 2 + pubspec.lock | 68 ++++++++++++++- pubspec.yaml | 5 ++ windows/flutter/generated_plugin_registrant.cc | 3 + windows/flutter/generated_plugins.cmake | 1 + 8 files changed, 84 insertions(+), 113 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 createState() => _HomePageState(); -} - -class _HomePageState extends State { - StreamSubscription? _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, - ), - ], - ), - ), - ); - } -} diff --git a/linux/flutter/generated_plugin_registrant.cc b/linux/flutter/generated_plugin_registrant.cc index e71a16d..f6f23bf 100755 --- a/linux/flutter/generated_plugin_registrant.cc +++ b/linux/flutter/generated_plugin_registrant.cc @@ -6,6 +6,10 @@ #include "generated_plugin_registrant.h" +#include void fl_register_plugins(FlPluginRegistry* registry) { + g_autoptr(FlPluginRegistrar) url_launcher_linux_registrar = + fl_plugin_registry_get_registrar_for_plugin(registry, "UrlLauncherPlugin"); + url_launcher_plugin_register_with_registrar(url_launcher_linux_registrar); } diff --git a/linux/flutter/generated_plugins.cmake b/linux/flutter/generated_plugins.cmake index 2e1de87..f16b4c3 100755 --- a/linux/flutter/generated_plugins.cmake +++ b/linux/flutter/generated_plugins.cmake @@ -3,6 +3,7 @@ # list(APPEND FLUTTER_PLUGIN_LIST + url_launcher_linux ) list(APPEND FLUTTER_FFI_PLUGIN_LIST diff --git a/macos/Flutter/GeneratedPluginRegistrant.swift b/macos/Flutter/GeneratedPluginRegistrant.swift index d7ee0bc..cae8434 100755 --- a/macos/Flutter/GeneratedPluginRegistrant.swift +++ b/macos/Flutter/GeneratedPluginRegistrant.swift @@ -7,8 +7,10 @@ import Foundation import geolocator_apple import package_info_plus +import url_launcher_macos func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { GeolocatorPlugin.register(with: registry.registrar(forPlugin: "GeolocatorPlugin")) FPPPackageInfoPlusPlugin.register(with: registry.registrar(forPlugin: "FPPPackageInfoPlusPlugin")) + UrlLauncherPlugin.register(with: registry.registrar(forPlugin: "UrlLauncherPlugin")) } diff --git a/pubspec.lock b/pubspec.lock index 0d6352e..90cad5f 100755 --- a/pubspec.lock +++ b/pubspec.lock @@ -305,7 +305,7 @@ packages: source: hosted version: "1.17.0" package_info_plus: - dependency: transitive + dependency: "direct main" description: name: package_info_plus sha256: "16eee997588c60225bda0488b6dcfac69280a6b7a3cf02c741895dd370a02968" @@ -413,6 +413,70 @@ packages: url: "https://pub.dev" source: hosted version: "1.4.0" + url_launcher: + dependency: "direct main" + description: + name: url_launcher + sha256: f6a7e5c4835bb4e3026a04793a4199ca2d14c739ec378fdfe23fc8075d0439f8 + url: "https://pub.dev" + source: hosted + version: "6.3.2" + url_launcher_android: + dependency: transitive + description: + name: url_launcher_android + sha256: "767344bf3063897b5cf0db830e94f904528e6dd50a6dfaf839f0abf509009611" + url: "https://pub.dev" + source: hosted + version: "6.3.28" + url_launcher_ios: + dependency: transitive + description: + name: url_launcher_ios + sha256: cfde38aa257dae62ffe79c87fab20165dfdf6988c1d31b58ebf59b9106062aad + url: "https://pub.dev" + source: hosted + version: "6.3.6" + url_launcher_linux: + dependency: transitive + description: + name: url_launcher_linux + sha256: d5e14138b3bc193a0f63c10a53c94b91d399df0512b1f29b94a043db7482384a + url: "https://pub.dev" + source: hosted + version: "3.2.2" + url_launcher_macos: + dependency: transitive + description: + name: url_launcher_macos + sha256: "368adf46f71ad3c21b8f06614adb38346f193f3a59ba8fe9a2fd74133070ba18" + url: "https://pub.dev" + source: hosted + version: "3.2.5" + url_launcher_platform_interface: + dependency: transitive + description: + name: url_launcher_platform_interface + sha256: "552f8a1e663569be95a8190206a38187b531910283c3e982193e4f2733f01029" + url: "https://pub.dev" + source: hosted + version: "2.3.2" + url_launcher_web: + dependency: transitive + description: + name: url_launcher_web + sha256: "4bd2b7b4dc4d4d0b94e5babfffbca8eac1a126c7f3d6ecbc1a11013faa3abba2" + url: "https://pub.dev" + source: hosted + version: "2.4.1" + url_launcher_windows: + dependency: transitive + description: + name: url_launcher_windows + sha256: "712c70ab1b99744ff066053cbe3e80c73332b38d46e5e945c98689b2e66fc15f" + url: "https://pub.dev" + source: hosted + version: "3.1.5" uuid: dependency: transitive description: @@ -479,4 +543,4 @@ packages: version: "3.1.3" sdks: dart: ">=3.9.2 <4.0.0" - flutter: ">=3.19.0" + flutter: ">=3.35.0" diff --git a/pubspec.yaml b/pubspec.yaml index def6cb1..14cd1f1 100755 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -12,6 +12,8 @@ dependencies: flutter: sdk: flutter geolocator: ^14.0.2 + package_info_plus: ^8.3.1 + url_launcher: ^6.3.2 dev_dependencies: flutter_launcher_icons: ^0.14.4 @@ -22,6 +24,9 @@ dev_dependencies: flutter: uses-material-design: true + assets: + - LICENSE + flutter_launcher_icons: image_path: "assets/speed.png" android: true diff --git a/windows/flutter/generated_plugin_registrant.cc b/windows/flutter/generated_plugin_registrant.cc index 1ece8f2..94586cc 100755 --- a/windows/flutter/generated_plugin_registrant.cc +++ b/windows/flutter/generated_plugin_registrant.cc @@ -7,8 +7,11 @@ #include "generated_plugin_registrant.h" #include +#include void RegisterPlugins(flutter::PluginRegistry* registry) { GeolocatorWindowsRegisterWithRegistrar( registry->GetRegistrarForPlugin("GeolocatorWindows")); + UrlLauncherWindowsRegisterWithRegistrar( + registry->GetRegistrarForPlugin("UrlLauncherWindows")); } diff --git a/windows/flutter/generated_plugins.cmake b/windows/flutter/generated_plugins.cmake index 7f101a7..f0bcafd 100755 --- a/windows/flutter/generated_plugins.cmake +++ b/windows/flutter/generated_plugins.cmake @@ -4,6 +4,7 @@ list(APPEND FLUTTER_PLUGIN_LIST geolocator_windows + url_launcher_windows ) list(APPEND FLUTTER_FFI_PLUGIN_LIST -- cgit v1.2.3