background_location_2 0.16.3
background_location_2: ^0.16.3 copied to clipboard
A Flutter plugin to get location updates in the background for both Android and iOS. Uses CoreLocation for iOS and FusedLocationProvider for Android. Based on the background_location library by almoullim
import 'dart:developer';
import 'package:background_location_2/background_location.dart';
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatefulWidget {
const MyApp({super.key});
@override
State createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
String latitude = 'waiting...';
String longitude = 'waiting...';
String altitude = 'waiting...';
String accuracy = 'waiting...';
String bearing = 'waiting...';
String speed = 'waiting...';
String time = 'waiting...';
bool? serviceRunning;
@override
void initState() {
super.initState();
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: const Text('Background Location Service'),
),
body: Center(
child: ListView(
children: <Widget>[
locationData('Latitude: $latitude'),
locationData('Longitude: $longitude'),
locationData('Altitude: $altitude'),
locationData('Accuracy: $accuracy'),
locationData('Bearing: $bearing'),
locationData('Speed: $speed'),
locationData('Time: $time'),
locationData('IsServiceRunning: $serviceRunning'),
ElevatedButton(
onPressed: () async {
await BackgroundLocation.setAndroidNotification(
title: 'Background service is running',
message: 'Background location in progress',
icon: '@mipmap/ic_launcher',
actionText: "Test",
actionCallback: (value) {
log('''Notification callback: \n
Latitude: ${value?.latitude}
Longitude: ${value?.longitude}
Altitude: ${value?.altitude}
Accuracy: ${value?.accuracy}
Bearing: ${value?.bearing}
Speed: ${value?.speed}
Time: ${value?.time}
''');
},
);
//await BackgroundLocation.setAndroidConfiguration(1000);
await BackgroundLocation.startLocationService(
distanceFilter: 20);
BackgroundLocation.getLocationUpdates((location) {
setState(() {
latitude = location.latitude.toString();
longitude = location.longitude.toString();
accuracy = location.accuracy.toString();
altitude = location.altitude.toString();
bearing = location.bearing.toString();
speed = location.speed.toString();
time = DateTime.fromMillisecondsSinceEpoch(
location.time.toInt())
.toString();
});
log('''\n
Latitude: $latitude
Longitude: $longitude
Altitude: $altitude
Accuracy: $accuracy
Bearing: $bearing
Speed: $speed
Time: $time
IsServiceRunning: $serviceRunning
''');
});
},
child: const Text('Start Location Service')),
ElevatedButton(
onPressed: () {
BackgroundLocation.stopLocationService();
},
child: const Text('Stop Location Service')),
ElevatedButton(
onPressed: () {
BackgroundLocation.isServiceRunning().then((value) {
setState(() {
serviceRunning = value;
});
log("Is Running: $value");
});
},
child: const Text('Check service')),
ElevatedButton(
onPressed: () {
getCurrentLocation();
},
child: const Text('Get Current Location')),
],
),
),
),
);
}
Widget locationData(String data) {
return Text(
data,
style: const TextStyle(
fontWeight: FontWeight.bold,
fontSize: 18,
),
textAlign: TextAlign.center,
);
}
void getCurrentLocation() {
BackgroundLocation().getCurrentLocation().then((location) {
log('This is current Location ${location.toMap()}');
});
}
@override
void dispose() {
BackgroundLocation.stopLocationService();
super.dispose();
}
}