Ahmet Balaman LogoAhmet Balaman

Flutter: Center Widget Detaylı Kullanımı

personAhmet Balaman
calendar_today
FlutterCenterUIHizalamaWidget

Center widget'ı, çocuğunu içinde bulunduğu alanın tam ortasına yerleştirmek için kullanılan basit ama güçlü bir widget'tır.

Canlı Demo: Center Widget Örnekleri

Aşağıdaki interaktif örnekte Center widget'ını farklı senaryolarda deneyebilirsiniz:

Temel Kullanım

Center, tek bir child alır ve onu hem yatay hem dikey olarak ortalar:

Center(
  child: Text('Ortadayım'),
)

Container İçinde Center

Text'i Container'a göre ortalamak:

Container(
  width: 200,
  height: 100,
  color: Colors.blue.shade100,
  child: Center(
    child: Text('Container ortasında'),
  ),
)

Bu örnekte Text, Container'ın tam ortasına yerleşir.

Row İçinde Center Kullanımı

Center'ı Row içinde kullandığınızda, Center widget'ı kendisine ayrılan alana göre çocuğunu ortalar:

Container(
  width: 300,
  height: 100,
  color: Colors.grey.shade200,
  child: Row(
    children: [
      Container(width: 50, color: Colors.red),
      Center(
        child: Text('Row içinde ortalandım'),
      ),
      Container(width: 50, color: Colors.green),
    ],
  ),
)

Önemli Not: Row içinde Center kullanıldığında, Center sadece kendisine ayrılan alanı kullanır. Tüm Row'u ortalamak için Row'un kendi mainAxisAlignment özelliğini kullanmalısınız.

Row'un Kendisini Ortalamak

Row'un tamamını ortalamak için Center'ı Row'un dışında kullanın:

Container(
  width: 300,
  height: 100,
  color: Colors.grey.shade200,
  child: Center(
    child: Row(
      mainAxisSize: MainAxisSize.min, // Önemli: Row'u kompakt tut
      children: [
        Icon(Icons.star),
        SizedBox(width: 8),
        Text('Row ortalandı'),
        SizedBox(width: 8),
        Icon(Icons.star),
      ],
    ),
  ),
)

Column İçinde Center

Column içinde yatay ortalama için Center kullanabilirsiniz:

Column(
  children: [
    Text('Üstte solda'),
    Center(
      child: Text('Yatayda ortada'),
    ),
    Text('Altta solda'),
  ],
)

Alternatif olarak Column'un crossAxisAlignment özelliğini kullanabilirsiniz:

Column(
  crossAxisAlignment: CrossAxisAlignment.center,
  children: [
    Text('Hepsi'),
    Text('Ortada'),
  ],
)

Center vs mainAxisAlignment

Center Kullanımı

Container(
  height: 200,
  child: Center(
    child: Text('Center ile'),
  ),
)

mainAxisAlignment Kullanımı

Container(
  height: 200,
  child: Column(
    mainAxisAlignment: MainAxisAlignment.center,
    children: [
      Text('Axis ile'),
    ],
  ),
)

Fark: Center her zaman hem yatay hem dikey ortalar. mainAxisAlignment sadece ana eksen boyunca hizalar.

İç İçe Center Kullanımı

Center'ı iç içe kullanabilirsiniz:

Container(
  width: 300,
  height: 200,
  color: Colors.blue.shade50,
  child: Center(
    child: Container(
      width: 150,
      height: 100,
      color: Colors.white,
      child: Center(
        child: Text('İç içe ortalanmış'),
      ),
    ),
  ),
)

Center'ın Genişliği ve Yüksekliği

Center varsayılan olarak mevcut tüm alanı kaplar. Boyutunu sınırlamak için:

Center(
  child: Container(
    width: 200,
    height: 100,
    color: Colors.amber,
    child: Center(
      child: Text('Sınırlı alan'),
    ),
  ),
)

Responsive Düzenlerde Center

Ekran boyutuna göre ortalama:

LayoutBuilder(
  builder: (context, constraints) {
    return Center(
      child: Container(
        width: constraints.maxWidth * 0.8,
        child: Text('Ekranın %80\'i genişliğinde'),
      ),
    );
  },
)

Center ile Expanded Kullanımı

Row veya Column içinde Center ile Expanded birlikte kullanılabilir:

Row(
  children: [
    Expanded(
      child: Center(
        child: Text('Sol'),
      ),
    ),
    Expanded(
      child: Center(
        child: Text('Sağ'),
      ),
    ),
  ],
)

Ne Zaman Center, Ne Zaman Axis Alignment?

Center kullanın:

  • Tek bir widget'ı tam ortaya almak için
  • Hem yatay hem dikey ortalama gerektiğinde
  • Basit ve hızlı çözüm istediğinizde

mainAxisAlignment/crossAxisAlignment kullanın:

  • Birden fazla widget hizalarken
  • Sadece bir eksende hizalama yapacaksanız
  • Daha fazla kontrol gerektiğinde (spaceBetween, spaceAround, vb.)

Pratik Örnekler

Örnek 1: Loading Göstergesi

Scaffold(
  body: Center(
    child: CircularProgressIndicator(),
  ),
)

Örnek 2: Boş Durum Ekranı

Center(
  child: Column(
    mainAxisSize: MainAxisSize.min,
    children: [
      Icon(Icons.inbox, size: 64, color: Colors.grey),
      SizedBox(height: 16),
      Text('Henüz içerik yok'),
    ],
  ),
)

Örnek 3: Kart Düzeni

Center(
  child: Card(
    child: Padding(
      padding: EdgeInsets.all(16),
      child: Text('Ortalanmış kart'),
    ),
  ),
)

Özet

Center widget'ı:

  • Çocuğunu hem yatay hem dikey ortalar
  • Tek bir child alır
  • Basit ve kullanımı kolaydır
  • Container, Row, Column içinde farklı şekillerde çalışır
  • mainAxisAlignment/crossAxisAlignment'a göre daha basittir ama daha az esnektir

Doğru senaryoda kullanıldığında Center, hızlı ve etkili bir hizalama çözümüdür.