The question is published on by Tutorial Guruji team.
Is there any official way to capture location on the foreground in Flutter? Or Please give your feedback for my way is okay or not. (both Android and IOS)
The trip will start if the user clicks the start button. The trip will finish if the user clicks the end button.
Currently, I am storing current geo point to the Array
List<GeoPoint> tripGeoPoint = []; @override Widget build(BuildContext context) { //Stream location data using this plugin -> `location` UserLocation userLocation = Provider.of<UserLocation>(context); if (startTrip) { tripGeoPoint.add(GeoPoint(userLocation.latitude, userLocation.longitude)); }
I am currently using this way to capture location on the foreground. (I think this is not the right solution for capture location on the foreground)
Timer _timer; @override void didChangeAppLifecycleState(AppLifecycleState state) { switch (state) { case AppLifecycleState.resumed: { if (_timer != null) _timer.cancel(); print("app in resumed"); break; } case AppLifecycleState.inactive://foreground { print("app in inactive"); const oneSec = const Duration(seconds: 3); _timer = Timer.periodic(oneSec, (Timer t) async { UserLocation _loc = await getLocation(); GeoPoint geoPoint = GeoPoint(_loc.latitude, _loc.longitude); tripGeoPoint.add(geoPoint); }); break; } case AppLifecycleState.paused: break; case AppLifecycleState.detached: break; } }
Top-Level function for capture location on foreground
var location = Location(); UserLocation _currentLocation; Future<UserLocation> getLocation() async { try { var userLocation = await location.getLocation(); _currentLocation = UserLocation(latitude: userLocation.latitude, longitude: userLocation.longitude); } on Exception catch (e) { print('Could not get location: $e'); } return _currentLocation; }
Answer
I found two plugins to achieve this.
(paid) Currently, I am using this plugin for production projects flutter_background_geolocation
alternative (free) background_locator