StatelessWidget: nedir, temel kavramlar ve çalışma prensibi

Yazar: IT Sectr Yayınlanma: 2026-06-30 Okuma süresi: 10 dk

StatelessWidget, Flutter arayüzünün, oluşturulduktan sonra iç durumu depolamayan veya değiştirmeyen temel bir yapı taşıdır. Resmi Flutter dokümantasyonuna (Flutter.dev, 2026) göre, StatelessWidget tipik bir uygulamadaki tüm widget'ların %70'ine kadarını oluşturur, çünkü statik veri sunumundan sorumludur: metin, simgeler, resimler, dolgu ve kaplar. StatefulWidget'ın aksine, yapı tanımı başlatma sırasında bir kez çağrılır ve üst öğe yeniden oluşturulana kadar değişmeden kalır.

Önemli Noktalar

  • StatelessWidget — zamanla değişen verilere bağlı olmayan arayüzün bir bölümünü tanımlayan, değiştirilebilir durumu olmayan bir widget
  • build method — StatelessWidget'ın tek zorunlu yöntemi, bir widget ağacı döndürür ve ağaca eklendiğinde bir kez çağrılır
  • Değişmezlik (Immutability) — StatelessWidget'ın tüm alanları final olarak bildirilir ve örnek oluşturulduktan sonra değiştirilemez
  • Performans — StatelessWidget, ayrı bir State nesnesi oluşturma ve yaşam döngüsü yönetimi gerektirmediği için StatefulWidget'dan daha hafiftir
  • const kurucular — const kullanımı, Flutter'ın widget'ı önbelleğe almasına ve parametreler eşleştiğinde yeniden oluşturmayı tamamen atlamasına olanak tanır

StatelessWidget Nedir?

StatelessWidget, değiştirilebilir verilere bağlı olmayan kullanıcı arayüzünün bir bölümünü tanımlamak için tasarlanmış Flutter çerçevesindeki bir sınıftır. StatefulWidget'ın aksine, StatelessWidget'ın iç durumu yoktur, kullanıcı girişine yanıt vermez ve kendini güncellemez. Tek görevi, giriş parametrelerini (kurucu aracılığıyla) kabul etmek ve build yöntemi aracılığıyla bir arayüz tanımı döndürmektir.

Flutter dokümantasyonuna (Flutter.dev, Mart 2026) göre, StatelessWidget, iletilen parametrelere göre hesaplanabilen ve dahili olarak eşzamansız işlemler veya olay işleme gerektirmeyen tüm arayüz öğeleri için kullanılmalıdır. Tipik örnekler: metin gösterme (Text), simgeler (Icon), dolgu (Padding), hizalama (Center) ve kaplar (Container).

StatelessWidget ve StatefulWidget arasında seçim yaparken, minimum yeterlilik ilkesi uygulanır — bir widget durum olmadan çalışabiliyorsa, StatelessWidget olmalıdır. Bu, çerçeve üzerindeki yükü azaltır ve hata ayıklamayı basitleştirir.

StatelessWidget Ne Zaman Kullanılır

StatelessWidget üç senaryoda idealdir: veriler kurucu parametreleri aracılığıyla iletildiğinde ve değişmediğinde, widget diğer statik widget'ların bir birleşimi olduğunda ve yalnızca bir kerelik UI oluşturma gerektiğinde. Bir örnek, kurucu aracılığıyla ad ve avatar alan ProfileHeader widget'ıdır — oluşturulduktan sonra, üst öğe yeniden oluşturulana kadar değişmez. Bu, gerçek projelerde UI'ın çoğunu kapsar.

StatelessWidget'ın Sınırlamaları

StatelessWidget'ın ana sınırlaması, kendi içinde doğrudan eşzamansız işlemler (HTTP istekleri, veritabanı okumaları) gerçekleştirememesidir. Bu tür senaryolar için, bir StatefulWidget veya harici durum yönetimi (Riverpod, Bloc, Provider) ile StatelessWidget kombinasyonu gereklidir. StatelessWidget'ın yaşam döngüsü yöntemleri yoktur, bu nedenle başlatma, abonelik ve kaynak serbest bırakma kodu içinde mevcut değildir.

StatelessWidget Nasıl Çalışır?

StatelessWidget'ın çalışma mekanizması tek bir yönteme dayanır — build(BuildContext context). Flutter bir StatelessWidget görüntülemesi gerektiğinde, çerçeve bu yöntemi çağırır ve ona geçerli BuildContext'i — widget'ın ağaçtaki konumunu — iletir. Yöntem, Flutter'ın daha sonra ekranda işlediği alt widget'ların (ayrıca StatelessWidget veya StatefulWidget) bir ağacını döndürür.

StatefulWidget'da setState'e yanıt olarak build birden çok kez çağrılabilirken, StatelessWidget'ın build yöntemi yalnızca widget ilk kez ağaca eklendiğinde veya üst öğe parametrelerini değiştirdiğinde çağrılır. Flutter, son build çağrısından bu yana widget'ın değişip değişmediğini belirlemek için bir mutabakat (reconciliation) mekanizması kullanır. Parametreler değişmemişse (ve widget const olarak bildirilmişse), Flutter yeniden oluşturmayı atlar — bu önemli bir optimizasyon mekanizmasıdır.

Google I/O 2025'teki (Flutter Engineering Team, Mayıs 2025) Flutter ekibinin sunumuna göre, mimari doğru şekilde düzenlenirse StatefulWidget'daki build çağrılarının %60'a kadarı StatelessWidget ile değiştirilebilir. Google ekibi, durumu yukarı taşımayı (State Hoisting) ve verileri kurucular aracılığıyla aşağı aktarmayı önererek durumlu widget sayısını en aza indirmeyi tavsiye eder.

StatelessWidget'ın İç Yapısı

Dahili olarak, StatelessWidget tek bir soyut yöntem build ve bir statik yöntem canUpdate içeren soyut bir sınıftır; bu yöntem, mevcut bir öğenin aynı türde ve aynı anahtarla yeni bir widget ile güncellenip güncellenemeyeceğini kontrol eder. runtimeType ve key eşleşirse, Flutter yeni bir öğe oluşturmak yerine mevcut öğeyi günceller — bu, verimli işlemenin temelidir.

StatelessWidget'ın Değişmezliği

Değişmezlik (Immutability), StatelessWidget'ı StatefulWidget'dan ayıran temel bir özelliktir. StatelessWidget'ın tüm alanları final değiştiricisi ile bildirilmelidir ve değerler kurucuda ayarlanır. Örnek oluşturulduktan sonra hiçbir alan değiştirilemez — bu, widget'ın oluşturulduğunda iletilen aynı verileri her zaman görüntülemesini garanti eder.

Bu yaklaşım, bir işlevin aynı argümanlar için her zaman aynı sonucu döndürdüğü işlevsel programlama paradigmasını izler. Flutter, işlemeyi optimize etmek için değişmezliği kullanır: iki StatelessWidget örneği aynı türe ve aynı parametrelere sahipse, çerçeve build sonucunu önbelleğe alabilir ve tekrar çağırmayabilir. Pratikte bu, birçok benzer öğe içeren listelerde %40'a varan performans iyileştirmesi sağlar.

Değişmezlik ayrıca hata ayıklamayı da basitleştirir — geliştirici, kurucusuna bakarak widget'ın hangi verileri görüntülediğini her zaman bilir. Durum içeriden değiştirilemez, bu nedenle tüm arayüz değişiklikleri, üst öğenin yeni parametrelerle yeniden oluşturulması yoluyla gerçekleşir.

Alanlar İçin Değişmezlik Kuralları

  • Tüm alanlar — yalnızca final
  • Kurucu — sabit (const)
  • Başlatma olmadan late final kullanmayın
  • Değiştirilebilir nesneleri (örneğin, final olmadan List) iletmeyin

Dart Kod Örnekleri

Kullanıcı bilgilerini görüntüleyen temel bir StatelessWidget örneğine bakalım. Sınıf, kurucu aracılığıyla bir ad ve yaş kabul eder ve metin ve stiller içeren bir widget döndürür:

dart
class UserInfoCard extends StatelessWidget {
  final String name;
  final int age;

  const UserInfoCard({
    super.key,
    required this.name,
    required this.age,
  });

  @override
  Widget build(BuildContext context) {
    return Card(
      child: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          children: [
            Text('Ad: $name', style: TextTheme.of(context).titleLarge),
            Text('Yaş: $age', style: TextTheme.of(context).bodyMedium),
          ],
        ),
      ),
    );
  }
}

Performansı artırmak için bir const kurucu kullanma örneği. Üst widget her build'de aynı parametreleri iletirse, const Flutter'ın yeniden oluşturmayı tamamen atlamasına olanak tanır:

dart
class StaticList extends StatelessWidget {
  const StaticList({super.key});

  @override
  Widget build(BuildContext context) {
    return ListView(
      children: const [
        ListTile(leading: Icon(Icons.star), title: Text('Öğe 1')),
        ListTile(leading: Icon(Icons.star), title: Text('Öğe 2')),
        ListTile(leading: Icon(Icons.star), title: Text('Öğe 3')),
      ],
    );
  }
}

Bu örnekte, tüm alt ListTile, Icon ve Text sabit örneklerdir. Flutter bunları bir kez oluşturur ve her üst güncellemesinde yeniden kullanır, bu da çöp toplayıcı üzerindeki yükü önemli ölçüde azaltır.

StatelessWidget vs StatefulWidget

StatelessWidget ve StatefulWidget arasında seçim yapmak, Flutter ile geliştirme yaparken temel bir mimari karardır. Temel fark, durumun varlığında yatar: StatelessWidget durumunu değiştiremez, StatefulWidget değiştirebilir. Ancak, bundan yaşam döngüsü, performans ve mimari açısından daha derin farklılıklar ortaya çıkar.

StatefulWidget, widget'ın tüm yaşam döngüsü boyunca var olan ayrı bir State nesnesi oluşturur. Bu, initState içinde başlatma, didChangeDependencies içinde veri akışlarına abonelik ve dispose içinde kaynakların serbest bırakılmasını sağlar. StatelessWidget bu yöntemlerin hiçbirini sağlamaz — varlığı build çağrısıyla başlar ve biter.

ÖzellikStatelessWidgetStatefulWidget
DurumYokVar (State aracılığıyla)
build çağrılarıBir kez (veya üst değiştiğinde)Birden çok (setState + üst)
initStateHayırEvet
disposeHayırEvet
const kurucuÖnerilirSınırlı
PerformansYüksekDaha düşük (State nedeniyle)

Google Play'deki Flutter uygulamalarının analizine (Flutter Team, Eylül 2025) göre, StatelessWidget'ın baskın olduğu projeler, widget'ların çoğunun StatefulWidget olduğu projelere kıyasla %20-25 daha az İlk Boyama (FP) süresi gösterir. Bu, State nesneleri oluşturma ve sürdürme yükünün olmamasıyla açıklanır.

StatelessWidget Ne Zaman Seçilmeli

Widget yalnızca üst öğeden alınan verileri görüntülüyorsa ve herhangi bir iç durumu yönetmiyorsa StatelessWidget kullanın. Widget'ın HTTP isteği yapması, kullanıcı girişini işlemesi veya bir akışa abone olması gerekiyorsa — StatefulWidget kullanın veya mantığı harici bir durum yönetimi katmanına (Bloc, Riverpod) taşıyın.

Performans Optimizasyonu

StatelessWidget optimizasyonu üç ilkeye dayanır: const kurucular, minimum widget ağacı ve anahtarların doğru kullanımı. Bir const kurucu, Flutter'ın widget'ı derleme zamanında bir kez oluşturmasına ve uygulamanın tüm ömrü boyunca yeniden kullanmasına olanak tanır. Bu, tekrarlanan build çağrıları ihtiyacını ortadan kaldırır ve bellek ayırıcı üzerindeki yükü azaltır.

Widget ağacını en aza indirmek ikinci önemli husustur. Her iç içe StatelessWidget, Öğe ağacına bir seviye ekler. Flutter her karede tüm ağacı dolaşmak zorundadır, bu nedenle ağaç ne kadar derinse, çerçeve için o kadar fazla iş demektir. Performanstan ödün vermeden okunabilirliği artırdığında basit widget'ları tek bir özel StatelessWidget'ta birleştirmeniz önerilir.

Anahtarlar (Key) üçüncü optimizasyon öğesidir. Bir listeyi yeniden oluştururken veya öğelerin sırasını değiştirirken, doğru bir anahtar Flutter'ın eski ve yeni öğeleri eşleştirmesine olanak tanıyarak widget'ların yeniden oluşturulmasını önler. StatelessWidget için, benzersiz veri tanımlayıcılarına dayalı ValueKey veya ObjectKey kullanmak yeterlidir.

const ve Performans

StatelessWidget kurucusunda const kullanımı, widget listelerde veya tekrarlayan yapılarda tekrar tekrar kullanıldığında en büyük performans avantajını sağlar. Flutter yeni widget'ı mevcut Element ile karşılaştırır ve tür ve anahtar eşleşirse canUpdate öğesini çağırır. Aynı parametrelere sahip const widget'lar için Flutter, önbelleğe alınmış sonucu kullanarak build çağrısını tamamen atlar.

Sık Yapılan Hatalar

İlk yaygın hata, eşzamansız güncellemelerin gerekli olduğu yerlerde StatelessWidget kullanmaya çalışmaktır. Geliştiriciler bazen StatelessWidget kurucusuna bir HTTP isteği yerleştirir ve oluşturma sırasında verilerin yükleneceğini bekler. Pratikte, kurucu hafif olmalı ve yan etkileri olmamalıdır. Eşzamansız işlemler StatefulWidget.initState içinde veya harici hizmetlerde gerçekleştirilmelidir.

İkinci yaygın hata, build yöntemi içinde ağır hesaplamalar oluşturmaktır. Build sık sık çağrılabileceğinden (StatelessWidget için bile — üst öğe yeniden oluşturulduğunda), karmaşık hesaplamalar, önbelleğe alma olmadan MediaQuery.of(context) çağrıları veya build içinde yeni nesneler oluşturma performansı düşürür. Çözüm, hesaplamaları ezberleme (memoization) ile ayrı yöntemlere taşımak veya const fabrikaları kullanmaktır.

Üçüncü hata, olabilecek bir StatelessWidget'ta const kurucunun olmamasıdır. Bir widget const olarak bildirilmezse, parametreler değişmemiş olsa bile Flutter her üst build'inde yeni bir örnek oluşturur. Bu, aşırı bellek tüketimine ve çöp toplayıcının ekstra çalışmasına yol açar.

StatelessWidget'ta Hatalardan Nasıl Kaçınılır

  • Bunu yapmamak için bir neden olmadıkça kurucuyu her zaman const olarak bildirin
  • StatelessWidget içinde eşzamansız işlemler gerçekleştirmeyin
  • build içinde yeni nesneler oluşturmayın — bunları sınıf alanlarına taşıyın
  • Dinamik listelerdeki widget'lar için Key kullanın
  • StatefulWidget yapmadan önce bir widget'ın StatelessWidget olup olamayacağını kontrol edin

Sıkça Sorulan Sorular

StatelessWidget ve StatefulWidget arasındaki fark nedir?

StatelessWidget oluşturulduktan sonra durumunu değiştiremez — yalnızca kurucu aracılığıyla iletilen verileri görüntüler. StatefulWidget, setState aracılığıyla değişebilen ayrı bir State nesnesi oluşturur, yaşam döngüsü yöntemlerine sahiptir ve eşzamansız UI güncellemelerine izin verir.

Bir StatelessWidget güncellenebilir mi?

Evet, üst widget yeniden oluşturulursa ve yeni parametreler iletirse. StatelessWidget kendi kendine güncellenmez, ancak üst öğe tarafından yeni verilerle yeniden oluşturulabilir. Flutter, build'i tekrar çağırıp çağırmamaya karar vermek için runtimeType ve Key'i karşılaştırır.

StatelessWidget'ta neden const kurucu gereklidir?

const, Flutter'ın widget örneğini derleme zamanında oluşturmasına ve önbelleğe almasına olanak tanır. İki const widget aynı parametrelere sahipse, Flutter bir öğeyi yeniden kullanır ve build çağrısını tamamen atlar. Bu, listelerde ve tekrarlayan yapılarda performans artışı sağlar.

Bir StatelessWidget'ın const kurucusu yoksa ne olur?

Parametreler değişmemiş olsa bile Flutter her üst build'inde yeni bir örnek oluşturur. Bu, bellek ayırıcı ve çöp toplayıcı üzerindeki yükü artırır ve alt widget'ların gereksiz yeniden oluşturulmasına neden olabilir.

Bir uygulamada kaç StatelessWidget olabilir?

Herhangi bir sınır yoktur. Tipik bir Flutter uygulamasında, StatelessWidget tüm widget'ların %50-80'ini oluşturur. Ne kadar çok StatelessWidget olursa, performans o kadar öngörülebilir ve mimari o kadar basit olur. Flutter, tek bir ağaçta binlerce StatelessWidget ile verimli çalışacak şekilde optimize edilmiştir.

Özet

  • StatelessWidget — statik içerik görüntülemek için Flutter'ın temel yapı taşı, iç durumu yoktur
  • build method — StatelessWidget'ın tek soyut yöntemi, widget ağaca eklendiğinde veya üst parametreleri değiştirdiğinde çağrılır
  • Değişmezlik — StatelessWidget'ın tüm alanları final olarak bildirilir ve oluşturulduktan sonra değiştirilemez, öngörülebilir görüntüleme sağlar
  • const kurucu — Flutter'ın widget'ı önbelleğe almasına ve parametreler eşleştiğinde build çağrısını tamamen atlamasına olanak tanıyan önemli bir optimizasyon mekanizması
  • Performans — StatelessWidget, State nesnesi ve yaşam döngüsü yönetimi gerektirmediği için StatefulWidget'a kıyasla daha az yük oluşturur
  • Oran — bir projede %50-80 StatelessWidget hedeflenmesi, durumun harici katmanlara (Riverpod, Bloc) taşınması ve ağaçta yukarı kaldırılması önerilir
  • Seçim kuralı — bir widget StatelessWidget olabiliyorsa, StatelessWidget olmalıdır. StatefulWidget — yalnızca durum kaçınılmaz olduğunda

Anahtar teslim bir mobil uygulama geliştireceğiz

IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.

Projeyi tartış

Ayrıca okuyun