flutter_map_background_location 0.0.1
flutter_map_background_location: ^0.0.1 copied to clipboard
A Flutter plugin for tracking location in both foreground and background modes, similar to flutter_background_geolocation.
Background Location Tracker #
Flutter kitabxanası - həm foreground, həm də background rejimdə location tracking üçün.
Xüsusiyyətlər #
- ✅ Foreground və background location tracking
- ✅ Yüksək dəqiqlik və konfiqurasiya imkanları
- ✅ Permission idarəetməsi
- ✅ Real-time location stream
- ✅ Distance və bearing hesablamaları
- ✅ Mock location filtrasiyası
- ✅ Android və iOS dəstəyi
- ✅ Notification dəstəyi (Android)
Quraşdırma #
pubspec.yaml faylınıza əlavə edin:
dependencies:
background_location_tracker:
path: ../background_location_tracker # və ya pub.dev-dən
Platform Konfiqurasiyası #
Android #
android/app/src/main/AndroidManifest.xml faylına əlavə edin:
<manifest>
<!-- Foreground location permission -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<!-- Background location permission (Android 10+) -->
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
<!-- Foreground service permission (Android 9+) -->
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_LOCATION" />
<application>
...
</application>
</manifest>
iOS #
ios/Runner/Info.plist faylına əlavə edin:
<dict>
<!-- Foreground location permission -->
<key>NSLocationWhenInUseUsageDescription</key>
<string>Bu tətbiq sizin məkanınızı izləmək üçün icazə tələb edir</string>
<!-- Background location permission -->
<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
<string>Bu tətbiq arxa planda məkanınızı izləmək üçün icazə tələb edir</string>
<key>NSLocationAlwaysUsageDescription</key>
<string>Bu tətbiq arxa planda məkanınızı izləmək üçün icazə tələb edir</string>
<!-- Background modes -->
<key>UIBackgroundModes</key>
<array>
<string>location</string>
</array>
</dict>
İstifadə #
1. Sadə istifadə #
import 'package:background_location_tracker/background_location_tracker_library.dart';
final locationTracker = BackgroundLocationTracker();
// Permission yoxla
final permission = await locationTracker.checkPermission();
// Permission tələb et
if (!permission.isGranted) {
await locationTracker.requestPermission();
}
// Cari məkanı al
final location = await locationTracker.getCurrentLocation();
print('Lat: ${location?.latitude}, Lng: ${location?.longitude}');
2. Real-time tracking #
// Location stream-ə qoşul
locationTracker.onLocationUpdate.listen((location) {
print('Yeni məkan: ${location.latitude}, ${location.longitude}');
print('Dəqiqlik: ${location.accuracy}m');
print('Sürət: ${location.speed}m/s');
});
// Error stream-ə qoşul
locationTracker.onError.listen((error) {
print('Xəta: $error');
});
// Tracking başlat
await locationTracker.startTracking();
// Tracking dayandır
await locationTracker.stopTracking();
3. Konfiqurasiya ilə tracking #
final settings = LocationSettings(
accuracy: LocationAccuracy.high,
distanceFilter: 10.0, // 10 metr
timeInterval: 5000, // 5 saniyə
enableBackgroundTracking: true,
showBackgroundNotification: true,
notificationTitle: 'Məkan İzləmə',
notificationText: 'Məkanınız izlənilir',
allowMockLocations: false,
);
await locationTracker.startTracking(settings);
4. Background tracking #
// Background permission tələb et
final permission = await locationTracker.requestPermission(
requestBackgroundPermission: true,
);
if (permission == LocationPermissionStatus.always) {
// Background tracking başlat
final settings = LocationSettings(
accuracy: LocationAccuracy.high,
distanceFilter: 10.0,
enableBackgroundTracking: true,
showBackgroundNotification: true,
);
await locationTracker.startTracking(settings);
}
5. Distance hesablama #
final distance = locationTracker.getDistanceBetween(
40.4093, // start lat
49.8671, // start lng
40.4105, // end lat
49.8680, // end lng
);
print('Məsafə: ${distance}m');
final bearing = locationTracker.getBearingBetween(
40.4093, 49.8671,
40.4105, 49.8680,
);
print('İstiqamət: ${bearing}°');
6. Utility metodlar #
// Location service aktivdir?
final isEnabled = await locationTracker.isLocationServiceEnabled();
// App settings-i aç
await locationTracker.openAppSettings();
// Location settings-i aç
await locationTracker.openLocationSettings();
// Son məkan
final lastLocation = locationTracker.lastLocation;
// Tracking aktivdir?
final isTracking = locationTracker.isTracking;
LocationData Model #
class LocationData {
final double latitude;
final double longitude;
final double accuracy;
final double? altitude;
final double? speed;
final double? speedAccuracy;
final double? heading;
final DateTime timestamp;
final bool isMocked;
}
LocationSettings Model #
class LocationSettings {
final LocationAccuracy accuracy;
final double distanceFilter;
final int? timeInterval;
final bool enableBackgroundTracking;
final bool showBackgroundNotification;
final String? notificationTitle;
final String? notificationText;
final bool pauseLocationUpdatesAutomatically;
final bool allowMockLocations;
}
LocationAccuracy Enum #
enum LocationAccuracy {
lowest, // Ən aşağı dəqiqlik
low, // Aşağı dəqiqlik (~10km)
medium, // Orta dəqiqlik (~100m)
high, // Yüksək dəqiqlik (~10m)
best, // Ən yaxşı dəqiqlik (GPS)
bestForNavigation, // Naviqasiya üçün ən yaxşı
}
LocationPermissionStatus Enum #
enum LocationPermissionStatus {
denied, // İmtina edilib
deniedForever, // Həmişəlik imtina edilib
whileInUse, // Yalnız istifadə zamanı
always, // Həmişə (background daxil)
notDetermined, // Müəyyən edilməyib
}
Məsləhətlər #
- Background tracking üçün: Android 10+ və iOS-da background permission ayrıca tələb edilməlidir
- Battery optimization:
distanceFiltervətimeIntervalparametrlərini düzgün seçin - Mock location: Production-da
allowMockLocations: falseistifadə edin - Notification: Android-də background tracking üçün notification məcburidir
- Dispose: Widget dispose olduqda
locationTracker.dispose()çağırın
Lisenziya #
MIT License
Müəllif #
Fermayi Hesenov