Flutter’da RepaintBoundary Kullanımı

3 min readOct 4, 2024

Uzun bir aradan sonra tekrardan makalelerimle sizlerleyim değerli okurlar :) Elimden geldiğince faydalı içerikleri sizlerle buluşturmaya gayret ediyorum. Eğer sizler için bu içerikler faydalıysa beğenip paylaşmanız beni daha motive eder..

RepaintBoundary Nedir?

Karmaşık kullanıcı arayüzleri oluştururken performans optimizasyonu yapmak kaçınılmazdır. İşte bu noktada RepaintBoundary widget’ı devreye giriyor. RepaintBoundary, Flutter’da widget ağacının belirli bir bölümünü izole ederek, bu bölümün bağımsız olarak yeniden çizilmesini sağlayan bir widget’tır.
Basitçe ifade etmek gerekirse, RepaintBoundary, belirli bir widget grubunu ayrı bir katman olarak ele alır. Bu sayede, bu katmanda meydana gelen değişiklikler, widget ağacının geri kalanını etkilemeden yeniden çizilir.
Peki neden RepaintBoundary kullanmalıyız? Gelin şimdi bu sorunun cevabına göz atalım;

Flutter’da her widget değiştiğinde, o widget ve altındaki tüm widget’lar yeniden çizilir. Bu, basit uygulamalarda sorun oluşturmazken, karmaşık ve yoğun widget ağaçlarına sahip uygulamalarda performans sorunlarına yol açabilir. RepaintBoundary, sadece gerçekten değişen widget’ların yeniden çizilmesini sağlayarak gereksiz render işlemlerini önler. Bu da uygulamanın genel performansını artırır ve daha akıcı bir kullanıcı deneyimi sunar.

Şu sorunun aklınıza geldiğini hissediyorum; Bu durumu yönetmek için zaten State Managament yöntemlerini kullanıyoruz, gereksiz yeniden çizilmer vs. önlemek adına State Managament daha doğru ve etkili bir yol değil mi?

Değerli arkadaşlar öncelikle bu soru çok kritik ve önemli bir soru. Bu sorunun cevabını anlayabilmek ve aradaki farkı kavrayabilmek için Flutter’da widgetlerin nasıl çizildiği ve render edildiğiniz anlamanız gerek. Daha önce bu konuda yazdığım bu makaleyi lütfen inceleyin.

Sorunun yanıtına gelecek olursak;

State managament, uygulamanızda hangi widget’ların ne zaman yeniden inşa edileceğini kontrol eder. Bu, veri yönetimi ve UI’nın doğru şekilde güncellenmesi adına önem taşır.

RepaintBoundary ise, render sürecini optimize ederek sadece gerçekten değişen widget’ların yeniden çizilmesini sağlar. Bu, özellikle karmaşık UI’larda performansı artırmak için önemlidir.

Konuyu daha iyi anlamanız için basit bir örnek ile konuyu açıklamak istiyorum.

Ekranınızda statik bir logo ve animasyonlu bir widget olduğunu hayal edin. State managament ile animasyonu kontrol edebilir ne zaman aktif olup ne zaman duracağı gibi konularda yönetebilir ve logonun bu değişikliklerden etkilenmesinin önüne geçebilirsiniz.

Ancak, Flutter’ın widget ağacı yeniden inşa edildiğinde, parent widget yeniden çizildiğinde, child widget’lar da yeniden çizilir. Yani, animasyonlu widget güncellendiğinde, logo widget’ı da parent widget’ın yeniden inşa edilmesiyle birlikte yeniden çizilir.

Dolayısıyla bu durum yoğun bir widget tree varsa uygulamanızda performans konusunda sorunlara neden olabilir.

İşte bu kısımda devreye RepaintBoundary widgeti giriyor. RepaintBoundary kullanarak, logo widget’ını render aşamasında izole edebilirsiniz. Böylece, animasyonlu widget sürekli olarak güncellense bile, logo widget’ı yeniden çizilmez. Bu, uygulamanın performansını artırır çünkü logo gereksiz yere yeniden render edilmez.

RepaintBoundary Ne Zaman Kullanmalı?

  • Sık Güncellenen ve Karmaşık UI: Eğer ListView, GridView veya benzeri bir dinamik widget, sıkça güncellenen bir veri içeriyorsa ve bu güncellemeler çok fazla yeniden çizime neden oluyorsa RepaintBoundary kullanmak mantıklıdır.
  • Animasyon ve Hareketli UI: Yoğun animasyonlar veya hareketli UI bileşenleri içeriyorsa, bu animasyonların sorunsuz çalışmasını sağlamak için RepaintBoundary kullanabilirsiniz.
  • Tüm UI’nin Yeniden Çizimini Önlemek: Eğer bir veri güncellemesi olduğunda tüm UI’yi değil, sadece belirli bir bölümü güncellemek istiyorsanız RepaintBoundary'yi bu bölüme ekleyebilirsiniz.

Ne Zaman Kullanılmamalı?

  • Basit UI’ler ve Statik Veriler: Eğer UI basit ve çok fazla veri güncellemesi yoksa, RepaintBoundary eklemek gereksiz yere performans maliyetine neden olabilir.
  • Performans : RepaintBoundary'ler kendileri de bir performans maliyeti taşır çünkü her bir RepaintBoundary yeni bir render katmanı (layer) oluşturur. Bu nedenle gereğinden fazla RepaintBoundary eklemek de performansı düşürebilir. Bu yüzden sadece gerçekten gerekli olduğu durumlarda kullanılmalıdır.

Sonuç olarak yoğun ve karmaşık widget tree üzerinde performans sorunlarını azaltmak ve gerçekten statik olarak uygulamanızda yer alan yapıları izole etmek için RepainBoundary widgeti kullanmanızı tavsiye ederim. Ancak bilinçsiz ve fazla kullanımıda belirttiğim gibi daha fazla performans sorununa yol açacaktır. RepaintBoundary widgeti ile daha fazla bilgi için Flutter web sitesinden faydalanabilirsiniz.

Bu widget ile yaptığım örnek uygulamayı DartPad üzerinden inceleyebilirsiniz

Uygulama Linki için tıklayın

--

--

AbdullahTaş
AbdullahTaş

Written by AbdullahTaş

FLUTTER DEVELOPER || GRAPHQL - FIREBASE

No responses yet