Ahmet Balaman LogoAhmet Balaman

Flutter: mainAxisSize ile Alan Kontrolü

personAhmet Balaman
calendar_today
FluttermainAxisSizeRowColumnLayout

mainAxisSize, Row veya Column widget'larının ana eksen boyunca ne kadar alan kaplayacağını belirler. Görünmez bir sınır çizer ve widget'ın sonsuz genişlemesini önler.

mainAxisSize Nedir?

Row veya Column oluşturduğunuzda, varsayılan olarak mümkün olan tüm alanı kaplamaya çalışır. mainAxisSize ile bu davranışı değiştirebilirsiniz.

Canlı Demo: mainAxisSize Örnekleri

mainAxisSize.max ve mainAxisSize.min arasındaki farkı görün:

mainAxisSize Değerleri

MainAxisSize.max (Varsayılan)

Row veya Column, ana eksen boyunca mevcut olan tüm alanı kaplar:

Row(
  mainAxisSize: MainAxisSize.max, // Varsayılan
  mainAxisAlignment: MainAxisAlignment.center,
  children: [
    Icon(Icons.star),
    Text('Maksimum genişlik'),
    Icon(Icons.star),
  ],
)

Bu durumda Row, yatay olarak mevcut tüm genişliği kullanır.

MainAxisSize.min

Row veya Column, sadece çocuklarının ihtiyaç duyduğu kadar alan kaplar:

Row(
  mainAxisSize: MainAxisSize.min,
  mainAxisAlignment: MainAxisAlignment.center,
  children: [
    Icon(Icons.star),
    Text('Minimum genişlik'),
    Icon(Icons.star),
  ],
)

Bu durumda Row, sadece içindeki widget'ların toplamı kadar yer kaplar.

Column ile Kullanımı

Column'da mainAxisSize dikey eksende çalışır:

Column(
  mainAxisSize: MainAxisSize.min,
  children: [
    Text('Birinci satır'),
    Text('İkinci satır'),
    ElevatedButton(
      onPressed: () {},
      child: Text('Buton'),
    ),
  ],
)

MainAxisSize.min kullanıldığında Column sadece içeriği kadar dikey alan kaplar.

Pratik Kullanım Örnekleri

Örnek 1: Kart İçinde Kompakt Düzen

Card(
  child: Padding(
    padding: EdgeInsets.all(16),
    child: Column(
      mainAxisSize: MainAxisSize.min, // Kartı gerektiği kadar büyüt
      crossAxisAlignment: CrossAxisAlignment.start,
      children: [
        Text('Başlık', style: TextStyle(fontWeight: FontWeight.bold)),
        SizedBox(height: 8),
        Text('İçerik metni'),
      ],
    ),
  ),
)

Örnek 2: Dialog İçeriği

AlertDialog(
  content: Column(
    mainAxisSize: MainAxisSize.min, // Dialog içeriğini kompakt tut
    children: [
      Icon(Icons.warning, size: 48, color: Colors.orange),
      SizedBox(height: 16),
      Text('Uyarı mesajı'),
    ],
  ),
  actions: [
    TextButton(
      onPressed: () {},
      child: Text('Tamam'),
    ),
  ],
)

Örnek 3: Row ile Buton Grubu

Row(
  mainAxisSize: MainAxisSize.min,
  children: [
    IconButton(icon: Icon(Icons.remove), onPressed: () {}),
    Text('0'),
    IconButton(icon: Icon(Icons.add), onPressed: () {}),
  ],
)

MainAxisSize.max vs MainAxisSize.min

Özellik MainAxisSize.max MainAxisSize.min
Alan kullanımı Tüm mevcut alan Sadece gerekli alan
Varsayılan Evet Hayır
mainAxisAlignment etkisi Tam genişlikte dağıtır Sadece içerik genişliğinde
Kullanım durumu Tam genişlik istenen yerler Kompakt düzenler, dialog'lar

mainAxisAlignment ile İlişkisi

MainAxisSize.min kullanırken mainAxisAlignment etkisi daha belirgindir:

// max ile - tüm genişliği kullanır
Row(
  mainAxisSize: MainAxisSize.max,
  mainAxisAlignment: MainAxisAlignment.spaceBetween,
  children: [
    Icon(Icons.home),
    Icon(Icons.settings),
  ],
)

// min ile - sadece içerik kadar genişlik
Row(
  mainAxisSize: MainAxisSize.min,
  mainAxisAlignment: MainAxisAlignment.center,
  children: [
    Icon(Icons.home),
    Icon(Icons.settings),
  ],
)

Ne Zaman Kullanmalı?

MainAxisSize.max kullanın:

  • Tam genişlik/yükseklik istediğinizde
  • Öğeleri geniş alana yaymak istediğinizde
  • Varsayılan davranış yeterli olduğunda

MainAxisSize.min kullanın:

  • Dialog içeriklerinde
  • Kart ve kartpostal düzenlerinde
  • Buton gruplarında
  • İçeriğe sıkı sarılması gereken yerlerde
  • Gereksiz boşlukları önlemek istediğinizde

Özet

mainAxisSize, Row ve Column'un alan kullanımını kontrol eden önemli bir özelliktir:

  • max: Tüm mevcut alanı kullan (varsayılan)
  • min: Sadece gerekli kadar alan kullan

Bu özelliği doğru kullanarak daha kompakt ve profesyonel görünümlü düzenler oluşturabilirsiniz.