👨🏼‍💻Flutter vs Jetpack Compose (Karşılaştırmalı Öğrenme Serisi Bölüm-1)

Emre Ugur Yalcin
Huawei Developers - Türkiye
6 min readJun 29, 2022
Flutter & Jetpack Compose

Bu öğrenme serimizde, karşılaştırma yöntemini kullanarak Flutter ve Jetpack Compose öğreneceğiz. Amacımız karşılaştırma yöntemi kullanarak Flutter bilen geliştiricilerin Jetpack Compose öğrenmelerini, Jetpack compose bilen native android geliştiricilerin ise Flutter öğrenmelerini sağlamaktır.

Not: Flutter geliştiren biri olarak yazılar ve tanımlamaları Flutter’a göre yapacağım.

Giriş

Serimizin ilk yazısında temel widget/component’lerden 4 tanesini öğreneceğiz.

İnceleyeceğimiz widget/component’ler şunlardır:

  1. Scaffold
  2. Column
  3. Row
  4. Container/Box

Widgets(Flutter)/Components(Jetpack Compose)

1.Scaffold

Scaffold temel material design görsel layout yapısını uygulayan bir layout olarak karşımıza çıkmaktadır. İçerisinde appbar, body, bottomNavigationBar, drawer, FAB gibi kısımlar bulunmaktadır.

Flutter ve Jetpack Compose’da scaffold parametre isimleri değişiklik gösterebilmektedir. Aşağıda karşılaştırmalı olarak önemli scaffold parametrelerini görebilirsiniz:

Scaffold

Scaffold State kullanımı:

Flutterda şu şekilde kullanılmaktadır:

Jetpack compose da ise şu şekilde tanımlanmaktadır:

Örnek olarak drawer state tutalım.

Scaffold kullanımına birer örnek verecek olursak:

Flutter:

Jetpack Compose:

2.Column

Column, elemanları dikey olarak görüntülememezi sağlar.

Not: Colum ile kaydırma(scroll) işlemi yapamazsınız. Kaydırma(Scroll) işlemi için Listview kullanmayı düşünebilirsiniz.

Column

2.1 Flutter hizalamalar:

Flutter Hizalama

Yukarıda da görüldüğü gibi “Main Axis” column elemanlarının dikeyde, “Cross Axis” ise elemanların yatayda hizalanmasını sağlar.

Gelin hep beraber yatay ve dikeyde hizalama türlerini görelim :

Main Axis Hizalamaları:

MainAxisAlignment hizalamaları

Yukarıdaki görselde gördüğümüz hizalama tiplerini teker teker açıklayalım:

Not: Column içerisine eklenen elamanlar sırayla: 1. Yeşil, 2. Mavi, 3. Turuncu

Not2: Varsayılan olarak ilk eklenen eleman en üst noktada, en son eklenen eleman ise en alt noktadadır.

center: Column elemanlarının arasında boşluk bırakmaz. Alt ve üstten eşit miktarda boşluk kalacak şekilde merkezi bir ayarlama yapılır.

start: Column elemanlarının arasında boşluk bırakmaz. Elemanları en üst noktadan aşağıya doğru sıralar.

end: Column elemanlarının arasında boşluk bırakmaz. Eklenen her yeni elemanı grubun en alt noktasına yerlestirir.

spaceEvenly: En alt, en üst ve elemanlar arası boşluklar eşit olacak şekilde ayarlama yapar.

spaceAround: spaceEvenly ile neredeyse aynıdır. Tek fark: spaceAround’da alt ve üstteki boşluklar az, elemanlar arasındaki boşluklaer daha fazladır.

spaceBetween: Alt ve üst tarafta boşluk bırakmaz. Yalnızca elemanlar arasında eşit miktarda boşluk bırakır.

Cross Axis Hizalamaları:

CrossAxisAlignment hizalamaları

center: Elemanları, merkezleri yatayda orta noktaya gelecek şekilde ayarlar.

start: Yatayda tüm elemanları sola yaslar.

end: Yatayda tüm elemanları sağa yaslar.

stretch: Elemanları yatayta tüm alanı dolduracak şekilde ayarlar.

2.2 Jetpack Compose hizalamaları:

Vertical Arrangement Hizalamaları:

Burada Flutter ile karşılaştırma yapacağız.

Top: MainAxisAlignment.start

Bottom: MainAxisAlignment.end

Center: MainAxisAlignment.center

SpaceEvenly: MainAxisAlignment.spaceEvenly

SpaceBetween: MainAxisAlignment.spaceBetween

SpaceAround: MainAxisAlignment.spaceAround

Şimdi akılda daha iyi kalması için tabloda görelim:

MainAxis vs Arrangement

Horizontal Alignment Sıralamaları:

Burada Flutter ile karşılaştırma yapacağız.

Start: CrossAxisAlignment.start

CenterHorizontally: CrossAxisAlignment.center

End: CrossAxisAlignment.end

Şimdi akılda daha iyi kalması için tabloda görelim:

CrossAxis vs Alignment

3.Row

Row itemleri yatay olarak görüntülememezi sağlar.

Not: Row ile kaydırma(scroll) işlemi yapamazsınız. Kaydırma(Scroll) işlemi için Listview kullanmayı düşünebilirsiniz.

Row

3.1 Flutter Hizalamalar

Flutter Hizalama

Yukarıda da görüldüğü gibi “Main Axis” row elemanlarının yatayda, “Cross Axis” ise elemanların dikeyde hizalanmasını sağlar.

Gelin hep beraber yatay ve dikeyde hizalama türlerini görelim :

Main Axis Hizalamaları:

CrossAxisAlignment hizalamaları

Yukarıdaki görselde gördüğümüz hizalama tiplerini teker teker açıklayalım:

Not: Row içerisine eklenen elamanlar sırayla: 1. Yeşil, 2. Mavi, 3. Turuncu

Not2: Varsayılan olarak ilk eklenen eleman en sol noktada, en son eklenen eleman ise en sağ noktadadır.

center: Row elemanlarının arasında boşluk bırakmaz. Sağ ve soldan eşit miktarda boşluk kalacak şekilde merkezi bir ayarlama yapılır.

start: Row elemanlarının arasında boşluk bırakmaz. Elemanları en sol noktadan sağa doğru sıralar.

end: Row elemanlarının arasında boşluk bırakmaz. Eklenen her yeni elemanı grubun en sağ noktasına yerlestirir.

spaceEvenly: En sol, en sağ ve elemanlar arası boşluklar eşit olacak şekilde ayarlama yapar.

spaceAround: spaceEvenly ile neredeyse aynıdır. Tek fark: spaceAround’da sağ ve soldaki boşluklar az, elemanlar arasındaki boşluklar daha fazladır.

spaceBetween: Sağ ve sol tarafta boşluk bırakmaz. Yalnızca elemanlar arasında eşit miktarda boşluk bırakır.

Cross Axis Hizalamaları:

CrossAxisAlignment hizalamaları

center: Elemanları, merkezleri dikeyde orta noktaya gelecek şekilde ayarlar.

start: Dikeyde tüm elemanları üste yaslar.

end: Dikeyde tüm elemanları alta yaslar.

stretch: Elemanları dikeyde tüm alanı dolduracak şekilde ayarlar.

3.2 Jetpack Compose hizalamaları:

Horizontal Arrangement Hizalamaları:

Burada Flutter ile karşılaştırma yapacağız.

Start: MainAxisAlignment.start

End: MainAxisAlignment.end

Center: MainAxisAlignment.center

SpaceEvenly: MainAxisAlignment.spaceEvenly

SpaceBetween: MainAxisAlignment.spaceBetween

SpaceAround: MainAxisAlignment.spaceAround

Şimdi akılda daha iyi kalması için tabloda görelim:

MainAxis vs Arrangement

Vertical Alignment Sıralamaları:

Burada Flutter ile karşılaştırma yapacağız.

Top: CrossAxisAlignment.start

CenterVertically: CrossAxisAlignment.center

Bottom: CrossAxisAlignment.end

Şimdi akılda daha iyi kalması için tabloda görelim:

CrossAxis vs Alignment

4.Container(Flutter) — Box(Jetpack Compose)

Flutterda Container çok fazla parametreye sahipken Box yalnızca 4 parametreye sahiptir. Fakat Box’a verdiğimiz modifier parametresi ile Container’ın yaptığı tüm işi yapabiliyoruz.

Container’ın ve Box’ın aldığı parametrelere bakalım:

Flutter Container
Compose Box

Aşağıdaki tabloda Container ile Box parametrelerinin karşılaştırmasını görebilirsiniz:

Container Box

Not: Modifier ve propagateMinConstraints parametrelerinin containerda tam olarak karşılıkları bulunmamaktadır.

Şimdi Container’ın parametlerini açıklayarak Box ile karşılaştırmasını yapalım:

margin: Container’ın dışından bırakılan boşluktur. Box’ta şu şekilde margin verilir:

Modifier.padding(100.dp).height(300.dp).width(300.dp)

Margin için padding değeri yükseklik ve genişlikten daha önce verilmelidir.

Container’da ise margin şu şekilde verilmektedir:

Container(margin: const EdgeInsets.all(10),)

padding: Container’ın içinden bırakılan boşluktur. Box’ta şu şekilde padding verilir:

Modifier.height(300.dp).width(300.dp).padding(10.dp)

Padding değeri yükseklik ve genişlikten daha sonra verilmelidir.

Container’da ise padding şu şekilde verilmektedir:

Container(padding: const EdgeInsets.all(10),)

alignment: Container’da childın nereye hizalanacağını belirtir. Box’ta şu şekilde yapılır:

Box(contentAlignment = Alignment.BottomCenter)

Container için alignment tipleri:

Container Alignment

Box için alignment tipleri:

Box Alignment

color: Box’ta şu şekilde arka plan rengi verilmektedir:

Box(modifier = Modifier.background(Color.Yellow))

width &height: Box’a şu şekilde boyut vermekteyiz:

Box(modifier = Modifier.height(300.dp).width(300.dp))

veya

Box(modifier = Modifier.size(width = 300.dp,height = 300.dp))

decoration: Container’ın bu parametresi karşımıza bir obje olarak çıkmaktadır.

Genellikle BoxDecoration sınıfı kullanılır. İçerisinde çeşitli parametreler bulunmaktadır. Bu parametreler şunlardır :

BoxDecoration

Not: Eğer BoxDecoration kullanıyorsak Container’a color parametresini veremiyoruz. Renk verme işlemi BoxDecoration içerisinde yapılmaktadır.

Burada BoxDecoration’ın border, borderRadius ve shape parametrelerinin kullanımını göstereceğiz.

Container:

Box:

borderRadius: Köşelerden kırpmayı sağlar. Box’ta bu farklı şekilde karşımıza çıkmaktadır:

  1. clip: Bu kısım Box’ı kırpmayı sağlar. Eğer biz border eklersek clip yeterli olmayacaktır.
  2. border: Border’ı da aynı şekilde kırpmak istiyorsak Modifier.border(…) kullanmamız gerekmektedir.

Şimdi aşağıdaki görseli Container ve Box kullanarak oluşturalım:

Box Örnek

Flutter Kodu:

Jetpack Compose Kodu:

Sonuç

Bu serinin ilk yazısında widget/component karşılaştırarak temel düzeyden başladık. Yazının ikinci serisinde farklı widget/conponent türleri göreceğiz.

Serimiz ilerledikçe daha ayrıntılı ve detaylı olarak karşılaştırmalar yapacağız.

Herkese keyifli Flutter’li haftalar dilerim :)

Referanslar

Jetpack Compose

--

--