ഫ്ലട്ടർ SDK: ബ്രിഡ്ജിംഗ് ഡാർട്ടും നേറ്റീവ്
ട്രെയ്സ്ലെറ്റ് അദ്വിതീയമാണ്, കാരണം ഇത് ലോജിക്കിൻ്റെ ഏതാണ്ട് എല്ലാ നേറ്റീവ് iOS, Android SDK-കളിലേക്കും താഴേക്ക് തള്ളുന്നു. എന്തുകൊണ്ട്? ഡാർട്ട് ഐസൊലേറ്റുകൾ ഭാരമുള്ളതിനാൽ, ഉപയോക്താവ് ഓരോ തവണ ചുവടുവെക്കുമ്പോഴും പശ്ചാത്തലത്തിൽ ഒരു ഫ്ലട്ടർ എഞ്ചിൻ ഉണർത്തുന്നത് ബാറ്ററിയുടെ ആയുസ്സ് നശിപ്പിക്കുന്നു.
യഥാർത്ഥ ലോക സാഹചര്യങ്ങളിൽ ഫ്ലട്ടർ ലെയർ നേറ്റീവ് എഞ്ചിനുമായി എങ്ങനെ സംവദിക്കുന്നുവെന്ന് ഈ പേജ് വിശദീകരിക്കുന്നു.
സാഹചര്യം 1: UI സബ്സ്ക്രിപ്ഷൻ
പര്യവേക്ഷണം ചെയ്ത ആശയങ്ങൾ: ഇവൻ്റ് സ്ട്രീമുകൾ, തലയില്ലാത്ത നിർവ്വഹണം
പ്രശ്നം
നിങ്ങൾ ഒരു ഫിറ്റ്നസ് ആപ്പ് നിർമ്മിക്കുകയാണ്. ഉപയോക്താവ് സ്ക്രീനിൽ നോക്കുമ്പോൾ, തത്സമയം Google മാപ്പിൽ ഒരു ചെറിയ നീല ഡോട്ട് നീങ്ങാൻ നിങ്ങൾ ആഗ്രഹിക്കുന്നു. ഉപയോക്താവ് സ്ക്രീൻ ലോക്ക് ചെയ്യുമ്പോൾ, ഡാറ്റാബേസിലേക്കുള്ള റൺ റെക്കോർഡ് ചെയ്യാൻ നിങ്ങൾ ആഗ്രഹിക്കുന്നു, എന്നാൽ ആരും നോക്കാത്ത ഒരു യുഐ നിങ്ങൾ അപ്ഡേറ്റ് ചെയ്യേണ്ടതില്ല.
ട്രേസ്ലെറ്റ് ഇത് എങ്ങനെ പരിഹരിക്കുന്നു
ട്രെയ്സ്ലെറ്റ് നേറ്റീവ് ട്രാക്കിംഗ് എഞ്ചിനെ ഡാർട്ട് യുഐ സ്ട്രീമുകളിൽ നിന്ന് വേർതിരിക്കുന്നു.
നിങ്ങൾ Tracelet.start() എന്ന് വിളിക്കുമ്പോൾ, നേറ്റീവ് iOS/Android എഞ്ചിൻ ശക്തി പ്രാപിക്കുന്നു. ഇത് ചലനം കണ്ടെത്തൽ, GPS ഫിൽട്ടറിംഗ്, SQLite സേവിംഗ്, HTTP സമന്വയം എന്നിവ പൂർണ്ണമായും Swift/Kotlin-ൽ കൈകാര്യം ചെയ്യുന്നു.
നിങ്ങളുടെ Flutter UI-ൽ, നിങ്ങൾ സ്ട്രീം സബ്സ്ക്രൈബുചെയ്യുക:
import 'package:tracelet/tracelet.dart' as tl;
void initializeTracking() async {
// 1. Listen to events in the UI
tl.Tracelet.onLocation((tl.Location location) {
print('Update UI map marker: ${location.coords.latitude}, ${location.coords.longitude}');
});
tl.Tracelet.onMotionChange((tl.Location location) {
print('User started/stopped moving: ${location.isMoving}');
});
// 2. Start the native engine
await tl.Tracelet.ready(tl.Config.balanced());
await tl.Tracelet.start();
}The Magic: ഉപയോക്താവ് നിങ്ങളുടെ ആപ്പിനെ ബലം പ്രയോഗിച്ച് കൊല്ലുകയാണെങ്കിൽ, onLocation ഡാർട്ട് സ്ട്രീം മരിക്കും. എന്നാൽ നേറ്റീവ് ട്രാക്കിംഗ് എഞ്ചിൻ പ്രവർത്തിക്കുന്നത് തുടരുന്നു. ഇത് SQLite-ലേക്ക് ലൊക്കേഷനുകൾ സംരക്ഷിക്കുന്നത് തുടരുന്നു. ഉപയോക്താവ് പിന്നീട് ആപ്പ് വീണ്ടും തുറക്കുമ്പോൾ, അവരുടെ റൂട്ട് റെൻഡർ ചെയ്യുന്നതിന് നിങ്ങളുടെ ഡാറ്റാബേസ് അഡാപ്റ്റർ ഉപയോഗിച്ച് നിങ്ങൾക്ക് SQLite ഡാറ്റാബേസിൽ അന്വേഷിക്കാവുന്നതാണ്.
സാഹചര്യം 2: ഓൺബോർഡിംഗ് ഫ്ലോ
പര്യവേക്ഷണം ചെയ്ത ആശയങ്ങൾ: അനുമതി കൈകാര്യം ചെയ്യൽ, നിരസിക്കലുകൾ
പ്രശ്നം
അലഞ്ഞുതിരിയുന്നത് ട്രാക്ക് ചെയ്യാൻ പ്രായമായ രോഗികൾക്കായി നിങ്ങൾ ഒരു ആപ്പ് നിർമ്മിക്കുകയാണ്. നിങ്ങൾക്ക് “എല്ലായ്പ്പോഴും” പശ്ചാത്തല ലൊക്കേഷൻ അനുമതി ആവശ്യമാണ്. നിങ്ങൾ അവരുടെ നേരെ സിസ്റ്റം പെർമിഷൻ ഡയലോഗ് എറിയുകയാണെങ്കിൽ, അവർ ആശയക്കുഴപ്പത്തിലാകും, “നിരസിക്കുക” ടാപ്പ് ചെയ്യുക, ആപ്പ് ഉപയോഗശൂന്യമാകും.
ട്രേസ്ലെറ്റ് ഇത് എങ്ങനെ പരിഹരിക്കുന്നു
Tracelet ഒരിക്കലും സ്വയമേവ അനുമതികൾ അഭ്യർത്ഥിക്കുന്നില്ല. ഭയപ്പെടുത്തുന്ന OS പ്രോംപ്റ്റുകൾ പ്രവർത്തനക്ഷമമാക്കുന്നതിന് മുമ്പ് വിദ്യാഭ്യാസപരമായ ഇഷ്ടാനുസൃത ഡയലോഗുകൾ കാണിക്കാൻ നിങ്ങളെ അനുവദിക്കുന്ന നിങ്ങളുടെ ഫ്ലട്ടർ കോഡിലേക്ക് ഇത് UI ഫ്ലോ പൂർണ്ണമായും വിടുന്നു.
import 'package:tracelet/tracelet.dart' as tl;
// 1. Check current status
final status = await tl.Tracelet.requestLocationAuthorization();
// 2. The user permanently denied permission in the past
if (status == tl.AuthorizationStatus.deniedForever) {
// Show a beautifully designed Flutter dialog explaining WHY you need it.
// Add a button that calls:
await tl.Tracelet.openAppSettings();
return;
}
// 3. We haven't asked yet, or they selected "Ask Next Time"
if (status == tl.AuthorizationStatus.notDetermined || status == tl.AuthorizationStatus.denied) {
// Ask for foreground permission first
final result = await tl.Tracelet.requestLocationAuthorization();
if (result == tl.AuthorizationStatus.whenInUse) { // They granted "When In Use"
// Show a second Flutter dialog explaining why "Always" is needed.
// Then upgrade the permission:
await tl.Tracelet.requestLocationAuthorization();
}
} Location Status
Tracelet.requestLocationAuthorization() ഒരു AuthorizationStatus enum നൽകുന്നു:
notDetermined: നിങ്ങൾ ഇതുവരെ ചോദിച്ചിട്ടില്ല.denied: ഉപയോക്താവ് നിരസിച്ചു (Android-ൽ വീണ്ടും ചോദിക്കാം).whenInUse: അനുവദിച്ച മുൻഭാഗം മാത്രം.always: പശ്ചാത്തല ആക്സസ് അനുവദിച്ചു.deniedForever: ഉപയോക്താവ് “വീണ്ടും ചോദിക്കരുത്” എന്ന് പരിശോധിച്ചു അല്ലെങ്കിൽ iOS ശാശ്വതമായി നിരസിച്ചു. നിങ്ങൾ അവ ക്രമീകരണങ്ങളിലേക്ക് അയയ്ക്കണം.