Özet - Background task
- Flutter kursu
- İleri seviye
- Ders 45/69
- 4 dk
callbackDispatcher ve PeriodicTask'ı birleştirerek senkron yaparsın.
Senkron akışı
Bir senkron akışı callbackDispatcher ve PeriodicTask'ı birleştirir. Önce Workmanager().initialize ile callback kaydedilir, sonra registerPeriodicTask ile periyodik senkron görevi zamanlanır. Her periyotta callbackDispatcher çağrılır ve task kimliğine göre senkron yapılır.
Workmanager().initialize(callbackDispatcher, isInDebugMode: true);
Workmanager().registerPeriodicTask(
'sync-task',
'sync',
frequency: Duration(minutes: 15),
);Uygulama Senkron akışı yaz
Üst düzey callbackDispatcher fonksiyonu yaz: String task alsın, 'sync' kimliği için true döndürsün. main içinde önce Workmanager().initialize ile callback kaydet, sonra registerPeriodicTask ile 'sync-task' kimliği, 'sync' callback adı ve 15 dakikalık frequency ile görev zamanla ve 'ok' yazdır.
Başlangıç kodu
class Workmanager {
void initialize(Function dispatcher, {bool isInDebugMode = false}) {}
void registerPeriodicTask(String uniqueId, String taskName, {required Duration frequency}) {}
}
// callbackDispatcher fonksiyonunu yaz
// String task parametresi alsın
// 'sync' kimliği için true döndürsün
void main() {
// initialize ile callback kaydet
// periyodik görevi zamanla
// 'ok' yazdır
}Örnek çözüm
class Workmanager {
void initialize(Function dispatcher, {bool isInDebugMode = false}) {}
void registerPeriodicTask(String uniqueId, String taskName, {required Duration frequency}) {}
}
bool callbackDispatcher(String task) {
if (task == 'sync') {
return true;
}
return false;
}
void main() {
Workmanager().initialize(callbackDispatcher, isInDebugMode: true);
Workmanager().registerPeriodicTask(
'sync-task',
'sync',
frequency: Duration(minutes: 15),
);
print('ok');
}Beklenen çıktı
ok
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Senkron akışında initialize ve registerPeriodicTask hangi sırada çağrılır?
- Önce initialize, sonra registerPeriodicTask Doğru cevap
- Sadece initialize yeterlidir
- Önce registerPeriodicTask, sonra initialize
- İkisi aynı anda çağrılamaz
Açıklama: Önce initialize ile callbackDispatcher kaydedilmeli, sonra registerPeriodicTask ile görev zamanlanmalı; aksi halde callback bulunamaz.
2 Debug modunu aç
Workmanager().initialize(callbackDispatcher, ____: true);
Workmanager().initialize(callbackDispatcher, isInDebugMode: true);
Açıklama: initialize çağrısında debug modunu açmak için isInDebugMode parametresi true olarak verilir.
3 Senkron akışı parçaları
| Kavram | Anlamı |
|---|---|
initialize |
Callback kaydı |
registerPeriodicTask |
Periyodik görev |
callbackDispatcher |
Arka plan callback |
frequency |
Tekrar süresi |