(04.07.2026 tarihinde oluşturuldu.)
Dart/Flutter Ders 2 konusunda asenkson (eş zamansız) işlemlerden bahsetmiştim. Future, async ve await kelimelerinden aşina olduğumuz eş zamansız işlemleriniz uygulama ana döngüsü (main isolate) üzerinde gerçekleşmektedir. Asenkron programlama özellikle arka planda veri indirme gibi işler için çok faydalıdır. Fakat yoğun hesaplama gereken işlerinizi asenkron programlama ile yaptığınızda bu hesaplamalar asenkron olsa dahi uygulama ana döngüsü üzerinde gerçekleşeceğinden ekranda takılmalar, donmalar olabilir. Bunu aşmak için yoğun hesaplama gerektiren işleri cihaz işlemcisindeki başka bir çekirdekte çalıştırmak gerekecektir.
Flutter resmi dökümantasyonunda [1] birkaç milisaniyeden uzun sürecek işlemler için yukarıdaki bahsettiğimiz çözüm yönteminin uygulanması önerilmektedir. Bunun için compute() fonksiyonu kullanılır.
compute() fonksiyonunu kullanabilmek için öncelikle foundation paketini dart dosyanızın tepesine eklemeniz gerekir.
import 'package:flutter/foundation.dart';Ardından hesaplama yapacağınız fonksiyonu ve o fonksiyona göndereceğiniz parametreyi compute() ile kullanmak için aşağıdaki gibi bir yapı oluşturmalısınız;
Future<bool> isPrime(int value) {
return compute(_calculate, value);
}
bool _calculate(int value) {
if (value == 1) {
return false;
}
for (int i = 2; i < value; ++i) {
if (value % i == 0) {
return false;
}
}
return true;
}Yukarıdaki kodda temsilen ağır bir iş _calculate() fonksiyonu tarafından yapılmaktadır. _calculate(), isPrime() içinden compute() ile çalıştırılmaktadır. compute() ile _calculate() çağrıldığında uygulama ana döngüsüne yük binmeden, cihaz işlemcisindeki uygun bir çekirdek üzerine _calculate() fonksiyonu taşınarak orada çalıştırılır ve hesaplama sonucu geri getirilir. Bu sayede ekranda donma/takılma olmadan uygulamanız çalışmaya devam edebilir.
NOT: compute() içinde çağrılan fonksiyon tüm sınıflardan bağımsız olarak en üst seviyede bir fonksiyon olmalıdır. Yani bir sınıfın metodu olmamalıdır. Eğer böyle bir tasarım (sınıf metodu olarak) yapmanız gerekiyorsa bu metodu static yapmanız gerekir.
Kaynak:
[1] https://api.flutter.dev/flutter/foundation/compute.html