diff --git a/lib/screen/home.dart b/lib/screen/home.dart index 4a9564b..e9e2e0a 100644 --- a/lib/screen/home.dart +++ b/lib/screen/home.dart @@ -1,6 +1,5 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; -import 'package:flutter_ringtone_player/flutter_ringtone_player.dart'; import 'package:loc/style/colors.dart'; import 'package:loc/utils/location.dart'; import 'package:loc/utils/states.dart'; @@ -12,7 +11,6 @@ class HomeScreen extends StatelessWidget { @override Widget build(BuildContext context) { final provider = Provider.of(context); - final providerNoListening = Provider.of(context, listen: false); return Scaffold( resizeToAvoidBottomInset: false, @@ -161,12 +159,7 @@ class HomeScreen extends StatelessWidget { 'Latitude, Longitude, and Radius are required!'); return; } - - FlutterRingtonePlayer.playNotification( - looping: true, - volume: 0.1, - asAlarm: true, - ); + provider.setListening(true); getCurrentLocation().then((value) { provider.setCurrLatitude(value.latitude); @@ -201,14 +194,14 @@ class HomeScreen extends StatelessWidget { ), ), ), - provider.isListening && providerNoListening.isLocValid() == false + provider.isListening && provider.isLocValid() == false ? Container( padding: const EdgeInsets.only( top: 16, left: 16, right: 16, ), - child: LinearProgressIndicator( + child: const LinearProgressIndicator( value: null, ), ) @@ -336,7 +329,7 @@ class HomeScreen extends StatelessWidget { ), child: Text( provider.isListening - ? '${calcDistance(context).toString()} KM' + ? '${toKiloMeter(calcDistance(context))} KM' : '', textAlign: TextAlign.center, ), diff --git a/lib/utils/location.dart b/lib/utils/location.dart index 23a72c9..f693f88 100644 --- a/lib/utils/location.dart +++ b/lib/utils/location.dart @@ -29,9 +29,9 @@ Future getCurrentLocation() async { void listenToLocationUpdate(BuildContext context) { final provider = Provider.of(context, listen: false); - geo.LocationSettings settings = geo.LocationSettings( + geo.LocationSettings settings = const geo.LocationSettings( accuracy: geo.LocationAccuracy.high, - distanceFilter: double.parse(provider.radiusText.text).toInt(), + distanceFilter: 50, ); final subscription = @@ -39,9 +39,17 @@ void listenToLocationUpdate(BuildContext context) { .listen((position) { provider.setCurrLatitude(position.latitude); provider.setCurrLongitude(position.longitude); + + if (calcDistance(context) <= double.parse(provider.radiusText.text)) { + FlutterRingtonePlayer.playAlarm( + looping: true, + volume: 0.1, + asAlarm: true, + ); + } }); + provider.setPositionStream(subscription); - provider.setListening(true); } void cancelLocationUpdate(BuildContext context) { @@ -56,7 +64,7 @@ void cancelLocationUpdate(BuildContext context) { double calcDistance(BuildContext context) { final provider = Provider.of(context, listen: false); - if (provider.isLocValid() == false) return 0.0; + if (provider.isLocValid() == false) return 0; final currentLatitude = provider.currLatitude!; final currentLongitude = provider.currLongitude!; @@ -66,10 +74,14 @@ double calcDistance(BuildContext context) { final inMeters = geo.Geolocator.distanceBetween( destLatitude, destLongitude, currentLatitude, currentLongitude); - return toKiloMeter(inMeters); + return inMeters; } double toKiloMeter(double distanceInMeters) { + if (distanceInMeters <= 1000) { + return distanceInMeters; + } distanceInMeters /= 1000; - return double.parse(distanceInMeters.toStringAsFixed(2)); + + return double.parse(distanceInMeters.toStringAsPrecision(3)); } diff --git a/test/widget_test.dart b/test/widget_test.dart index 5758acd..1bb5d65 100644 --- a/test/widget_test.dart +++ b/test/widget_test.dart @@ -13,7 +13,7 @@ import 'package:loc/main.dart'; void main() { testWidgets('Counter increments smoke test', (WidgetTester tester) async { // Build our app and trigger a frame. - await tester.pumpWidget(const MyApp()); + await tester.pumpWidget(const App()); // Verify that our counter starts at 0. expect(find.text('0'), findsOneWidget);