DEV Community

Cover image for ChatGPT'ye Göre Flutter'da Uygulama Performansını Arttırmayı Sağlayan 30 Madde
Gülsen Keskin
Gülsen Keskin

Posted on • Updated on

ChatGPT'ye Göre Flutter'da Uygulama Performansını Arttırmayı Sağlayan 30 Madde

Flutter'daki performansınızı artırmak için aklınızda tutmanız gereken birkaç önemli nokta vardır.

1. Flutter'ın ve Flutter SDK'nın en son sürümünü kullanın.
Bu en son özelliklere ve iyileştirmelere erişmenizi sağlayacaktır.

2. Gereksiz widget'ları veya gereksiz yere iç içe widget'ları kullanmaktan kaçının.

3. Mümkün olan her yerde sabit yükseklikte veya sabit genişlikte widget'lar kullanmayı düşünün.
Sabit boyutta widgetlar kullanmak Flutter çerçevesinin oluşturulmasını kolaylaştırır, bu da daha iyi performansa ve daha akıcı animasyonlara yol açabilir.

4. Performans darboğazlarını belirlemek ve düzeltmek için Flutter'ın "Flutter Doctor" ve "Flutter Trace" komutları gibi yerleşik performans profili oluşturma araçlarını kullanın.

"Flutter Doctor" komutu, eksik bağımlılıklar veya güncel olmayan paketler gibi uygulamanızın performansını etkileyebilecek yaygın sorunları teşhis etmenize yardımcı olabilir.

"Flutter Trace" komutu ise uygulamanızın performansı hakkında, her karenin işlenmesi için geçen süre ve atılan kare sayısı gibi ayrıntılı bilgiler sağlayabilir.

5. Belirli durumlarda performans sorunlarına neden olabileceğinden, global anahtarları kullanmaktan kaçının.

Global anahtarlar, Flutter'daki widget'lara atanan benzersiz tanımlayıcılardır. Bu anahtarlar, widget ağacındaki widget öğelerini bulmak ve bunlara başvurmak için kullanılır ve genellikle bir widget öğesinin mevcut durumuna erişmek veya görünümünü değiştirmek için kullanılır.

Ancak, global anahtarlar belirli durumlarda performans sorunlarına neden olabilir. Örneğin, büyük ve karmaşık bir widget ağacının parçası olan bir widget'aa başvurmak için global bir anahtar kullanılırsa, anahtar widget'ı bulmak ve değiştirmek için kullanıldığından uygulamanın performansı düşebilir. Bunun nedeni, genel anahtarların kullanıldıklarında widget ağacının yeniden oluşturulmasına neden olabilmesidir, bu da zaman alıcı olabilir ve uygulamanın performansını olumsuz etkileyebilir.

Bu performans sorunlarından kaçınmak için, gerekli olmadıkça Flutter uygulamanızda genel anahtarları kullanmaktan kaçınmanız genellikle iyi bir fikirdir. Bunun yerine, uygulamanızdaki widgetlara performans sorunlarına yol açmayacak şekilde erişmek ve bunları değiştirmek için yerel(local) anahtarlar veya anahtarlı alt ağaçlar(keyed sub-trees) gibi diğer teknikleri kullanabilirsiniz.

6. Pahalı widget'ları sarmak ve genel performansı iyileştirmek için "RepaintBoundary" widget'ını kullanın.

"RepaintBoundary" widget'ı, Flutter uygulamanızın performansını iyileştirmek için kullanılabilen özel bir widget'tır. Bu widget, işlenmesi uzun zaman alan veya uygulamanızda performans sorunlarına neden olabilecek "pahalı" widget öğelerini sarmak için kullanılır.

"RepaintBoundary" widget'ının pahalı widget'ların gereksiz yere yeniden çizilmesini önler, bu da çok fazla zaman ve kaynak tasarrufu sağlayabilir.

Daha fazla ayrıntı için bkz.

7. Yeniden oluşturmaları azaltmak için "const" anahtar sözcüğünü kullanın

Flutter'da "const" anahtar kelimesini kullanmak, widget'ların gereksiz yere yeniden oluşturulmasını önleyerek uygulama performansının artmasını sağlar. Bir widget'ın const olarak tanımlanması widget'ın gereksiz yere yeniden oluşturulmasını önler.

Ek olarak, "const" kullanmak Flutter kodunuzu daha okunabilir ve bakım yapılabilir hale getirir. Hangi widget'ların "const" olduğunu açıkça bildirerek, diğer geliştiricilere hangi widget'ların değişmeden kalmasının beklendiğini açıklayabilirsiniz, bu da onların kodunuzu anlamalarını ve değiştirmelerini kolaylaştırabilir.

8. Widgetlarınızın oluşturulmasını optimize etmek için "WidgetsBindingObserver" sınıfını kullanın.

"WidgetsBindingObserver" sınıfı, uygulamanızın widget'larının Flutter'da işlenmesini optimize etmenize yardımcı olabilecek güçlü bir araçtır. Bu sınıf, uygulamanızın widget öğelerinin oluşturma sürecini gözlemlemenize olanak tanır ve işleme döngüsünün (rendering cycle) farklı noktalarında tetiklenen callback'ler sağlar.

Bu geri aramaları(callbacks) kullanarak, uygulamanızın widget öğelerini oluşturulmasını izleyebilir ve gerektiğinde performanslarını iyileştirmek için değişiklikler yapabilirsiniz. Örneğin, widget'larınızın boyutunu izlemek için "didChangeMetrics" callback'ini kullanabilir ve verimli bir şekilde oluşturulduklarından emin olmak için düzenlerini buna göre ayarlayabilirsiniz.

Ek olarak, "WidgetsBindingObserver" sınıfını kullanmak, oluşturma döngüsünde belirli noktalarda yürütülecek görevleri planlamanıza izin vererek uygulamanızdaki widget'ların işlenmesini optimize etmenize de yardımcı olabilir. Bu, belirli bir sırayla gerçekleştirilmesi gereken görevler veya uygulama widget'larının durumuna bağlı olan görevler için yararlı olabilir.

Genel olarak bu sınıfı kullanarak, işleme sürecini izleyebilir ve gerektiğinde uygulamanızın widget'larının performansını iyileştirmek için değişiklikler yapabilirsiniz.

WidgetsBindingObserver ile alakalı daha fazla bilgi için bkz.

9.Performans sorunlarına neden olabileceğinden "setState" yöntemini gereksiz yere kullanmaktan kaçının.

Flutter'da, bir widget'ın durumunun değiştiğini ve güncellenmesi gerektiğini belirtmek için "setState" yöntemi kullanılır. "setState" methodu çağrıldığında Flutter çerçevesi, widget öğesi için yeni durumla yeniden oluşturulmasına neden olan bir işleme güncellemesi planlar.

Ancak gereksiz yere "setState" yöntemini çağırmak, Flutter uygulamanızda performans sorunlarına neden olabilir. Bunun nedeni, "setState" yönteminin her çağrılışında, widget'ın ve onun alt widget'larının yeniden oluşturulmasıdır; bu durum uygulamanızın performansını olumsuz etkileyebilir.

Bu performans sorunlarından kaçınmak için Flutter uygulamanızda gereksiz yere "setState" yöntemini çağırmaktan kaçınmak genellikle iyi bir fikirdir.

10. Mümkün oldukça "ListView" widget'ı yerine Flutter'ın "ListView.builder" widget'ını kullanın.

"ListView.builder" widget'ı, Flutter'daki "ListView" widget'ına göre daha etkili bir alternatiftir. Bunun nedeni, "ListView.builder"ın alt öğelerini(childrens) istek üzerine oluşturmasıdır, yani yalnızca ekranda gerçekten görünen alt öğeleri oluşturur.

Buna karşılık, "ListView" widget'ı, ekranda görünüp görünmemelerine bakılmaksızın, tüm alt öğelerini önceden oluşturur. Bu, özellikle liste çok sayıda öğe içeriyorsa, önemli miktarda bellek ve CPU kaynağı tüketebileceğinden performans sorunlarına neden olabilir.

"ListView.builder" widget'ını kullanmak, yalnızca gerçekten ihtiyaç duyulan alt öğeleri oluşturarak performans sorunlarının önlenmesine yardımcı olabilir. Ek olarak, "ListView.builder" widget'ı, listenin alt öğelerinin nasıl oluşturulduğu konusunda size daha fazla kontrol sağlayan özel bir builder fonksiyonu sağlamanıza da olanak tanır.

"ListView" widget'ı yerine "ListView.builder" widget'ını kullanmak, özellikle büyük veri listeleriyle uğraşırken Flutter uygulamanızın performansını ve verimliliğini artırmanın iyi bir yolu olabilir.

11. O anda kullanılmayan widget'ları widget ağacından tamamen kaldırmak yerine gizlemek için "Offstage" widget'ını kullanın.

Flutter'da "Offstage" widget'ı, bir alt widget'ı widget ağacından kaldırmadan gizlemek için kullanılır. Bu, gizli widget'ı her ihtiyaç duyulduğunda yeniden oluşturmak yerine bellekte tutmanıza izin verdiği için uygulamanızın performansını optimize etmek için yararlı olabilir.

12. Performansı etkileyebileceğinden, çok sayıda öğeye sahip animasyonları kullanmaktan kaçının.

Çok sayıda öğe içeren animasyonlar kullanmak, uygulamanın yavaşlamasına ve yanıt vermemesine neden olarak kullanıcı deneyimini olumsuz etkileyebilir.

Ek olarak, animasyonlarınızdaki performans sorunlarını belirlemek ve teşhis etmek için Flutter'ın "Flutter Trace" komutu gibi yerleşik performans profili oluşturma araçlarını da kullanabilirsiniz. Bu araçlar size animasyonlarınızın performansı hakkında ayrıntılı bilgi sağlayabilir ve performanslarını iyileştirmek için hangi değişiklikleri yapmanız gerektiğini belirlemenize yardımcı olabilir.

13. Uygulamanızın performansını gerçek zamanlı olarak izlemek için "PerformanceOverlay" widget'ını kullanın.

"PerformanceOverlay" widget'ı, Flutter uygulamanızın performansını gerçek zamanlı(real time) olarak izlemek için yararlı bir araçtır. Bu widget öğesi, uygulamanızın ekranının üst kısmında saniyedeki kare sayısı, her bir kareyi oluşturmak için geçen süre ve bırakılan kare sayısı gibi bir dizi performans ölçümü görüntüler.

"PerformanceOverlay" widget'ını kullanarak uygulamanızdaki performans sorunlarını hızlı ve kolay bir şekilde tanımlayabilir ve bunları düzeltmek için adımlar atabilirsiniz. Örneğin, uygulamanızın yavaş işlediğini veya karelerin düştüğünü fark ederseniz, sorunun nedenini belirlemek ve düzeltmek için harekete geçmek için "PerformanceOverlay" widget'ının sağladığı bilgileri kullanabilirsiniz.

Ayrıca, "PerformanceOverlay" widget'ı, uygulamanızın kodundaki olası performans darboğazlarını belirlemek için de yararlı olabilir. Performans metriklerini gerçek zamanlı olarak izleyerek, uygulamanızın farklı bölümlerinin performansını nasıl etkilediğini görebilir ve verimliliğini ve yanıt verebilirliğini iyileştirmek için değişiklikler yapabilirsiniz.

Genel olarak, "PerformanceOverlay" widget'ını kullanmak, Flutter uygulamanızın performansını gerçek zamanlı olarak izlemek ve iyileştirmek için değerli bir araç olabilir. Performans sorunlarını hızlı ve kolay bir şekilde belirleyip düzeltmenize yardımcı olabilir ve uygulamanızın performansına ilişkin değerli bilgiler sağlayabilir.

14. Performans sorunlarına neden olan widget öğelerini izole etmek için "RepaintBoundary" widget bileşenini kullanın.

"RepaintBoundary" widget'ı, Flutter uygulamanızda performans sorunlarına neden olan widget'ları izole etmek için kullanılabilen güçlü bir araçtır. Bu widget öğesi, sardığı alt widget'ın etrafında bir sınır oluşturur ve bu, alt widhget'ın ve onun soyundan gelenlerin kesinlikle gerekli olmadıkça yeniden boyanmasını(repainted) engeller.

"RepaintBoundary" widget'ını kullanarak, performans açısından yoğun widget'ların uygulamanızda sorunlara neden olmasını önleyebilirsiniz. Örneğin, çok fazla kare düşmesine(frame drops) neden olan veya yavaş işlenen bir widget'ınız varsa, uygulamanızın geri kalanının performansını etkilemesini önlemek için onu bir "RepaintBoundary" widget'ı ile sarabilirsiniz.

Ayrıca, "RepaintBoundary" widget'ı, uygulamanızın animasyonlarının performansını optimize etmek için de yararlı olabilir. Animasyonlu bir widget'ı "RepaintBoundary" widget'ına sararak, animasyonun uygulamanızın diğer bölümlerinin performansını etkilemesini engelleyebilir ve sorunsuz ve verimli çalışmasını sağlayabilirsiniz.

15. Performans sorunlarına neden olabileceğinden, kesinlikle gerekli olmadıkça "inherited widget'ları" kullanmaktan kaçının.

Flutter'da "inherited widget'lar", widget ağacında değerleri yaymak için kullanılan özel widget'lardır.
Bu widget'lar genellikle bir uygulamadaki farklı widget'lar arasında veri veya durum paylaşmak için kullanılır ve "Provider" modeli gibi belirli tasarım modellerini uygulamak için yararlı olabilir.

Ancak, inherited widget'lar belirli durumlarda performans sorunlarına neden olabilir. Bunun nedeni, sağladıkları değer değiştiğinde yeniden oluşturulmalarıdır, bu da tüm widget ağacının yeniden oluşturulmasına neden olabilir. Bu da özellikle inherited widget uygulama genelinde kapsamlı bir şekilde kullanılıyorsa, uygulamanın performansını olumsuz etkileyebilir.

16. Kaydırılabilir widget'larda durum kaybını önlemek için AutomaticKeepAlive ve KeepAliveClient kullanın.

AutomaticKeepAlive ve KeepAliveClient kullanmak, widget'ın durumunun ekranda görünmediğinde bile korunmasını sağlayarak Flutter'da kayan widget'larda durum kaybını önleyebilir. Bu, widget kaydırıldığında verilerin kaybolmamasını veya atılmamasını sağladığından, widget öğesinin karmaşık veya zaman alıcı veriler içerdiği durumlarda özellikle önemli olabilir. Ek olarak, bu sınıfları kullanmak, widget'ın durumunu korumasına izin vererek uygulamanızın performansını artırabilir; bu da uygulamanın, widget'ı görünüme her kaydırıldığında yeniden oluşturmak için pahalı hesaplamalar veya işlemler gerçekleştirme ihtiyacını azaltabilir.

17. Çok sayıda iç içe widget oluşturmaktan kaçınmak için "stack" ve "positioned" widget'larını kullanın.

Flutter'da "stack" ve "positioned" widget'ları, çok sayıda iç içe widget'ın oluşturulmasını önlemek için yararlı araçlardır.

"Stack" ve "positioned" widget'larını kullanmak, iç içe geçmiş widgetların sayısını azaltarak Flutter uygulamanızın performansını iyileştirmeye yardımcı olabilir. Bunun nedeni, iç içe geçmiş her widget'ın ayrı ayrı oluşturulması ve işlenmesi gerekmesidir; bu da zaman alıcı olabilir ve önemli miktarda bellek ve CPU kaynağı tüketebilir. "Stack" ve "positioned" widget'ları kullanarak, stack'deki diğer tüm widget'ları içeren tek bir widget oluşturarak bu sorunu önleyebilirsiniz.

18. Uygulamanızın grafik performansını artırmak için Skia gibi bir donanım oluşturma katmanı kullanmayı düşünün.

Flutter'da varsayılan render katmanı, Flutter çerçevesinin yerleşik işleme motorudur. Bu motor, taşınabilir(portable) ve çok yönlü(versatile) olacak şekilde tasarlanmıştır ve çok çeşitli cihaz ve platformlarda kullanılabilir.

Ancak, Flutter çerçevesinin yerleşik işleme motoru, uygulamanızın grafikleri için her zaman en iyi performansı sağlamayabilir. Bazı durumlarda, Skia gibi bir donanım oluşturma katmanı kullanmak, uygulamanızın grafiklerinin daha iyi performans göstermesini ve daha verimli şekilde oluşturulmasını sağlayabilir.

Skia gibi bir donanım oluşturma katmanı, uygulamanızın üzerinde çalıştığı aygıtın donanım hızlandırma özelliklerinden yararlanmak için tasarlanmış düşük düzeyli bir grafik kitaplığıdır. Bir donanım oluşturma katmanı (hardware rendering layer) kullanarak, cihazın grafik işleme biriminin (GPU) tam gücünden yararlanarak uygulamanızın grafik performansını artırabilirsiniz.

Ek olarak, bir donanım oluşturma katmanı kullanmak, Flutter uygulamanızı daha taşınabilir ve çok yönlü hale getirebilir. Donanım oluşturma katmanları, düşük seviyeli ve donanımdan bağımsız olacak şekilde tasarlandığından, çok çeşitli aygıt ve platformlarda kullanılabilirler, bu da tek bir kod tabanıyla (codebase) birden çok platformun ve aygıtın desteklenmesini kolaylaştırabilir.

Genel olarak, Skia gibi bir donanım oluşturma katmanı kullanmak, Flutter'da uygulamanızın grafik performansını iyileştirmek için yararlı bir teknik olabilir. Cihazın GPU'sunun tam gücünden yararlanarak, uygulamanızın grafiklerini daha verimli ve duyarlı hale getirebilir ve uygulamanızı daha taşınabilir ve çok yönlü hale getirebilirsiniz.

19. Uygulamanızdaki resimlerin performansını iyileştirmek için "Image.cacheWidth" ve "Image.cacheHeight" özelliklerini kullanın.

Flutter'da "Image.cacheWidth" ve "Image.cacheHeight" özellikleri, uygulamanızdaki görüntülerin performansını iyileştirmek için faydalı araçlardır. Bu özellikler, yüklenirken bir görüntünün boyutlarını belirtmenize olanak tanır; bu, görüntüyü görüntülemek için gereken bellek ve CPU kaynaklarını azaltarak uygulamanın performansını artırmaya yardımcı olabilir.

Flutter'a bir görüntü yüklenirken çerçeve, görüntüyü içinde görüntülendiği widget'ın boyutlarına uyacak şekilde otomatik olarak ölçekler. Bu işlem zaman alıcı olabilir ve özellikle görüntünün ve parçacığın boyutları çok farklıysa, önemli miktarda bellek ve CPU kaynağı tüketebilir.

"Image.cacheWidth" ve "Image.cacheHeight" özelliklerini kullanarak, yüklenirken bir görüntünün boyutlarını belirtebilirsiniz, bu da uygulamanızın performansını iyileştirmeye yardımcı olabilir. Bunun nedeni, görüntünün otomatik olarak belirtilen boyutlara ölçeklenmesidir, bu da görüntüyü görüntülemek için gereken süreyi ve kaynakları azaltır.

Ek olarak, "Image.cacheWidth" ve "Image.cacheHeight" özelliklerini kullanmak, uygulamanızın resimlerinin görsel kalitesini de iyileştirebilir. Görüntünün yüklenmekte olan boyutlarını belirterek, görüntünün ekranda daha canlı ve net görünmesini sağlayabilecek doğru boyut ve en boy oranına göre ölçeklenmesini sağlayabilirsiniz.

20. Performans sorunlarına neden olabileceğinden, resimler için "BoxFit.cover" seçeneğini kullanmaktan kaçının.

Flutter'da "BoxFit.cover" seçeneği, görüntüleri "Container" veya "Card" gibi bir "box" widget'ında görüntülemek için yaygın olarak kullanılan bir tekniktir.

Bu seçenek görüntüyü kutunun(box) boyutlarına uyacak şekilde ölçekler ve görüntünün sığmayan kısımlarını kırparak tüm kutunun görüntüyle dolmasını sağlar.

Ancak, resimler için "BoxFit.cover" seçeneğini kullanmak, Flutter uygulamanızda performans sorunlarına neden olabilir. Bunun nedeni, "BoxFit.cover" seçeneğinin, görüntünün kutunun tam boyutlarına göre ölçeklenmesini gerektirmesidir; bu, zaman alabilir ve önemli miktarda bellek ve CPU kaynağı tüketebilir.

"BoxFit.cover" yerine performans sorunlarına yol açmadan görüntüleri bir kutuda görüntülemek için "Image.fit" özelliğini veya "FittedBox" widget'ını kullanabilirsiniz.

21. Performansı artırabileceğinden, uygulamanızın root'u olarak "WidgetsApp" veya "MaterialApp" widget'ını kullanın.

Bu widgetlar, uygulamanızın kökü(root'u) olarak işlev görür ve uygulamanın performansını ve verimliliğini artırmaya yardımcı olabilecek bir dizi özellik ve yetenek sağlar. Uygulamanızın kökü olarak "WidgetsApp" veya "MaterialApp" widget'ını kullanmanın ana avantajlarından biri, bir dizi yerleşik performans optimizasyon özelliği sağlamalarıdır. Örneğin, bu widget'ların her ikisi de, uygulamayı durdurup yeniden başlatmanıza gerek kalmadan uygulamanızın kodunda değişiklikler yapmanıza ve değişiklikleri gerçek zamanlı olarak ekrana yansıtmanıza olanak tanıyan "hot reload" özelliğini otomatik olarak etkinleştirir. Bu size önemli miktarda zaman ve emek kazandırabilir ve uygulamanızı geliştirmeyi ve hata ayıklamayı kolaylaştırabilir.

22. Uzun listelerin performansını iyileştirmek için lazy loading'i kullanın

Lazy loading, yalnızca o anda ekranda görünen öğelerin yüklenip işlendiği, diğer öğelerin ise yalnızca gerektiği kadar yüklenip işlendiği bir tekniktir.

Lazy loading, listedeki tüm öğelerin aynı anda yüklenmesini ve işlenmesini engellediğinden, listeyi görüntülemek için gereken bellek ve CPU kaynaklarını azaltır.

23. Yükleme sürelerini iyileştirmek için resimler gibi varlıkları önbelleğe alın.

Görüntüler gibi varlıkları önbelleğe almak, Flutter uygulamanızın yükleme sürelerini iyileştirmek için yararlı bir tekniktir. Önbelleğe alma (caching), görüntüler gibi sık kullanılan varlıkların bellekte veya diskte saklanmasını içerir, böylece ihtiyaç duyulduğunda hızla erişilebilir ve kullanılabilir.

Caching, zaten bellekte veya diskte depolanmış oldukları için varlıkları indirmek ve yüklemek için gereken süreyi ve ağ kaynaklarını azaltır.

Caching, varlıkları indirmek ve yüklemek için gereken süreyi ve kaynakları azaltarak performans darboğazlarını ve uygulamanın performansını etkileyebilecek diğer sorunları önlemeye yardımcı olabilir.

24. Performans darboğazlarını belirlemek için Dart'ın observatory gibi yerleşik profil oluşturma araçlarını kullanın

Observatory (gözlemevi) gibi Dart'ın yerleşik profil oluşturma araçlarını kullanmak, Flutter uygulamanızdaki performans darboğazlarını belirlemek için yararlı bir tekniktir. Observatory , Dart SDK ile birlikte gelen güçlü bir performans analizi ve hata ayıklama aracıdır ve uygulamanızın performansıyla ilgili sorunları belirlemek ve teşhis etmek için kullanılabilir.

Observatory'i kullanarak Flutter uygulamanızın performansını çeşitli şekillerde iyileştirebilirsiniz.
Observatory, uygulamanızın performansını gerçek zamanlı olarak izlemenize olanak tanır ve bu da performans darboğazlarını ve ortaya çıkan diğer sorunları belirlemenize yardımcı olabilir. Bu, özellikle başka yöntemler kullanılarak yeniden oluşturulması veya teşhis edilmesi zor olan sorunları belirlemek için yararlı olabilir.

Ayrıca observatory, uygulamanızın bellek kullanımı hakkında ayrıntılı bilgi sağlayabilen ve bellek sızıntılarını ve bellekle ilgili diğer sorunları belirlemenize yardımcı olabilecek "yığın anlık görüntüleri" (heap snapshots) yakalayıp analiz etmenize olanak tanır.

25. Kullanıcı arabirimini engellemeden eşzamansız işlemler gerçekleştirmek için async widget öğelerini kullanın.

"FutureBuilder" ve "StreamBuilder" gibi zaman uyumsuz widget öğeleri, eşzamansız verileri ve işlemleri işlemek ve bu işlemlerin sonuçlarına göre kullanıcı arayüzünü otomatik olarak güncellemek için tasarlanmış özel widgetlardır.

Async widget öğelerini kullanarak Flutter uygulamanızın performansını çeşitli şekillerde iyileştirebilirsiniz.
İlk olarak, Async widget öğeleri, kullanıcı arayüzünü engellemeden ağ istekleri veya dosya I/O gibi eşzamansız işlemleri gerçekleştirmenize izin verir. Bu, eşzamansız işlem gerçekleştirilirken uygulamanın yanıt vermemesini veya "donmasını" önleyebilir ve iyi bir kullanıcı deneyimi sağlayabilir.

Bir Async widget'ı kullanırken, asenkron işlemin sonuçlarına göre widget'ın nasıl güncellenmesi gerektiğini belirten bir "builder" fonksiyonu sağlamanız yeterlidir.

26. Pürüzsüz, performanslı animasyonlar oluşturmak için AnimationController ve Tween sınıflarını kullanın.

"AnimationController" ve "Tween" sınıflarını kullanmak, Flutter'da pürüzsüz, performanslı animasyonlar oluşturmak için kullanışlı bir tekniktir. Bu sınıflar, animasyonun performansını optimize etmeye yardımcı olabilecek bir dizi yerleşik özellik ve yetenek sağlayarak sorunsuz ve performanslı animasyonlar oluşturmanıza olanak tanır. Örneğin, "AnimationController" sınıfı, bir animasyonun yaşam döngüsünü yöneten özel bir nesnedir ve "Tween" sınıfı, bir animasyonun başlangıç ​​ve bitiş noktalarını tanımlamak için kullanılır.

27. Özel vektör grafikleri oluşturmak için CustomPainter'ı kullanın

"CustomPainter" sınıfı, Flutter çerçevesine dahil olan düşük seviyeli bir grafik API'si olan "Canvas" API'sini kullanarak özel grafikler oluşturmanıza olanak sağlayan özel bir widget öğesidir.

"CustomPainter" sınıfını kullanarak uygulamanızın grafik performansını çeşitli şekillerde iyileştirebilirsiniz. Birincisi, "Canvas" API'si, donanım hızlandırmalı bir API'dir; bu, grafikleri verimli ve hızlı bir şekilde işlemek için cihazın grafik işleme biriminden (GPU) yararlandığı anlamına gelir. Bu, uygulamanızın grafiklerini daha performanslı ve duyarlı hale getirebilir ve daha iyi bir kullanıcı deneyimi sağlayabilir.

Ek olarak, "CustomPainter" sınıfını kullanmak, bitmap görüntüler yerine matematiksel denklemler ve algoritmalar kullanılarak tanımlanan grafikler olan vektör grafikleri oluşturmanıza da olanak tanır. Vektör grafikleri kalite kaybı olmadan ölçeklenebilir ve dönüştürülebilir, bu da onları bitmap görüntülerden daha çok yönlü ve esnek hale getirebilir.

28. Verimli kaydırma deneyimleri oluşturmak için CustomScrollView ve Sliver widget'larını kullanın.

"CustomScrollView" ve "Sliver" widget'larını kullanmak, Flutter'da verimli kaydırma deneyimleri oluşturmak için yararlı bir tekniktir. "CustomScrollView" widget'ı, özel kaydırma efektleri oluşturmanıza izin veren kaydırılabilir bir kapsayıcıdır ve "Sliver" widget'ları, bir "CustomScrollView" içinde kullanım için optimize edilmiş özel widget'lardır.

"CustomScrollView" ve "Sliver" widget'ları oldukça verimli ve performanslı olacak şekilde tasarlanmıştır, bu da karmaşık ve dinamik kaydırma senaryolarını performans sorunlarına yol açmadan yönetebilecekleri anlamına gelir.

Ayrıca, "CustomScrollView" ve "Sliver" widget'ları, özel kaydırma efektleri ve davranışları oluşturmanıza yardımcı olabilecek bir dizi gelişmiş özellik ve yetenek de sağlar. Örneğin, "CustomScrollView" widget'ı, "sabitlenmiş" (pinned) üst bilgiler(headers) ve alt bilgiler (footers) oluşturmanıza olanak tanır ve "Sliver" widget'ları, "grid" ve "liste" düzenleri gibi bir dizi farklı layout seçeneği sağlar.

29. Yalnızca kaydırılabilir tek bir çocuk gerektiğinde ListView yerine SingleChildScrollView'ı tercih edin.

"SingleChildScrollView" widget'ı, "Text" veya "Image" widget'ı gibi tek bir alt widget'ı kaydırılabilir bir görünümde görüntülemenizi sağlayan kaydırılabilir bir kaptır.

"SingleChildScrollView" widget'ı "ListView" widget'ından daha verimli ve hafiftir, çünkü potansiyel olarak büyük ve karmaşık bir alt widget listesi yerine yalnızca tek bir alt widget'ı yönetmesi gerekir.

30. Stili merkezileştirmek ve widget ağacındaki TextStyle widget'larının sayısını azaltmak için ThemeData'yı kullanın.

Stili merkezileştirmek için ThemeData'yı kullanmak, uygulamanızın tüm stilini tek bir konumda tanımlamanıza izin verdiği için widget ağacındaki TextStyle widget'larının sayısını azaltmaya yardımcı olabilir. Bu, uygulamanızın stilini yönetmeyi ve korumayı kolaylaştırabileceği gibi, uygulamanızın stilinde genel değişiklikler yapmayı da kolaylaştırabilir.

31. Uygulama durumunu yönetmek için BLoC veya Provider gibi uygun bir mimarinin kullanın
İyi tasarlanmış bir mimari, widget öğelerinin gereksiz yere yeniden oluşturulması gibi performansı etkileyebilecek yaygın tuzaklardan kaçınmanıza yardımcı olabilir.

Kaynaklar :)
openai
RepaintBoundary

Top comments (0)