The easiest way to get a device's location in real-time — on every platform Flutter runs.
One simple API for GPS coordinates, live location streams and background tracking on Android, iOS, macOS, Web, Windows and Linux.
📖 Documentation · 🌐 Live web demo · 📦 pub.dev · 💬 Feedback
- 🌍 Truly cross-platform — the same code runs on all six Flutter targets, no per-platform branching.
- ⚡ One-line to a fix —
await location.getLocation()and you're done. - 🔴 Real-time streams — subscribe to
onLocationChangedfor continuous updates. - 🌙 Background tracking — keep receiving locations while your app is backgrounded on Android & iOS.
- 🎛️ Tunable — pick accuracy, update interval and distance filter to balance precision vs. battery.
- 🔔 Customizable notification — full control over the Android foreground-service notification.
- 📊 Rich data — latitude, longitude, altitude, speed, heading, accuracy, mock detection and more.
- 🛡️ Battle-tested — one of the most-used location plugins in the Flutter ecosystem, maintained since 2017.
| Feature | Android | iOS | macOS | Web | Windows | Linux |
|---|---|---|---|---|---|---|
| One-time location | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| Location stream | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| Background updates | ✅ | ✅ | — | — | — | — |
| Permission handling | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
Windows uses
Windows.Devices.Geolocation; Linux talks to GeoClue2 over D-Bus. Both require the system location service to be enabled.
Add the package:
dependencies:
location: ^10.0.0Get a location:
import 'package:location/location.dart';
final location = Location();
// Make sure the service is on and permission is granted.
if (!await location.serviceEnabled() && !await location.requestService()) return;
if (await location.requestPermission() != PermissionStatus.granted) return;
// One-time fix…
final current = await location.getLocation();
print('${current.latitude}, ${current.longitude}');
// …or a live stream.
location.onLocationChanged.listen((loc) {
print('Moved to ${loc.latitude}, ${loc.longitude}');
});That's it. Platform setup (permissions, background mode, sandbox entitlements) and the full API are covered in the package README and the documentation website.
| Package | Description | pub.dev |
|---|---|---|
location |
The plugin you use in your app. | |
location_platform_interface |
Shared platform interface. | |
location_web |
Web implementation. |
Issues and pull requests are very welcome — this plugin is community-maintained and we're always looking for help. Browse the open issues to get started, or open a new one to report a bug or request a feature.
- Guillaume Bernos (original creator)
- Bartek Pacia
Released under the MIT License. © 2017 Guillaume Bernos.