React Native vs Flutter! Hangisi?seçmeli?

Cross-Platform uygulama geliştirmek için kullanılan React Native ve Flutter arasındaki farklar, benzerlikler, hangisini seçmeliyim? React Native mi daha iyi yoksa Flutter mı? Projede React Native mi yoksa Flutter mi kullanmalıyım? Bu yazıda bu sorulara cevap bulmanız dileklerimle.

Flutter Hakkında

Cross-platform uygulama geliştirmeye olanak sağlayan, native çıktı verebilen (iOS, Android) bir yazılım geliştirme aracıdır. Google tarafından geliştirilmiş olup sektörde popülerliğini gitgide artırmaktadır. Ücretsiz ve open source olan Flutter; Google’nin 2018’de Q1’de tanıtıldı. Dart programlama dilini kullanmaktadır. Widget’lar ile birlikte native’ye çok yakın bileşenlerle iOS ve Android uygulamaları oluşturmamıza olanak sağlar. State yönetimi ile birlikte uygulama verilerini rahatlıkla kontrol edebilirsiniz.

Flutter ile Geliştirilen Popüler Uygulamalar

Google Ads, Xianyu (Alibaba), Hamilton, FlyDirekt vs.

Flutter’deki Yapılar ve Kavramlar

Object-Oriented bir yazım şekli bulunan Flutter’da her şey bir class olarak bizlere sunulmaktadır. Bu class’lar belirli property’ler alır ve bu property’ler de widget’lere bağlanır. Örneğin AppBar adında bir class’ın title adında bir property’si mevcuttur. title adındaki bu property’de Text adında bir widget’e bağlanarak uygulamanın başlık bölümünü oluşturabilirsiniz. AppBar, Container, Column, Row, Image, Text, Button gibi yüzlerce widget bulunmaktadır.


React Native Hakkında

Cross-platform uygulama geliştirmeye imkan sağlayan ve yine Flutter gibi native çıktı verebilen (iOS, Android) JavaScript tabanlı bir framework’tur. Facebook tarafından geliştirilmiştir ve 2013 Q3’ten beri sektörde popülerliğini korumaktadır. Yine Flutter gibi ücretsiz ve open source’dir.JavaScript ve JSX şeklinde yazımı mevcuttur. Component’ler ve state yönetimi ile birlikte iOS ve Android uygulamaları tek bir code-base ile yazabilirsiniz.

React Native ile Geliştirilen Popüler uygulamalar

Instagram, Facebook, Facebook Ads Manager, Uber, Walmart, Discord, Delivery, Salesforce,  Pinterest, Skype, Bloomberg, Wix

React Native’deki Yapılar ve Kavramlar

React-native’de React’taki gibi component’ler aracılığı ile state-based bir yazım şekli mevcuttur. Her şeyin component olduğu (Flutter’daki widget ile aynı amaca hizmet etmektedir) bir yapıda props’lar ve state’ler aracılığı ile veri ve fonksiyon iletimi sağlanıyor. Örneğin View component’i HTML’deki Div etiketi gibi düşünülebilir. View içerisine Text adında React-Native’nin bizlere sunduğu component’i oluşturup etiket içerisine direk olarak dönmek istediğiniz değerleri girerek dilediğimizi elde edebiliyoruz. Hazır stil kütüphaneleri mevcut olduğu gibi; Flexbox ile CSS desteği sunmaktadır bizlere.


Süreçler ve Geliştirme Hakkında

Dökümantasyon

React Native

Dökümantasyonu senaryo bazlı ilerleyen React Native kurulum aşaması sonrasında bir çok konuda kullanıcıyı tümden gelim metodu ile yaratıcılığa yönlendiriyor ve deneyerek öğrenmesine vesile oluyor. Temel bazlı bir çok şeyin detaylı açıklandığı dökümantasyonda örneklendirmelerin ve preview app’ler sayesinde görsel açıdan da yazılan kodu öngörmenizi sağlıyor.

Flutter

Her şeyin detaylı bir açıklamasının yer aldığı Flutter’in dökümantasyonunda kullanıcıya her türlü bilgiyi en ince ayrıntısına kadar veriyor ve tüme varım metodu ile kullanıcıya yön veriyor. Örneklendirmelerin görselleştirilmesinin az olması ile bir çok fonksiyonun ne işe yaradığını temsil verilen kodlarla öngörmeniz gerekebiliyor. Ancak çok detaylı bir dökümantasyona sahip her aşamada size yardımcı oluyor.

Programlama Dilleri

iOS ve Android platformlara tek bir dil kullanarak WebView üzerinden uygulama geliştirmek React Native ve Flutter ile mümkün. Java ve Objective C dilleri ile native uygulamalar geliştirilirken; JavaScript ve Dart dillerini kullanarak native’e neredeyse çok yakın uygulamalar geliştirmek mümkün kılınmıştır React-Native ve Flutter ile.

React Native

React Native yazabilmek için bilinmesi gereken dil JavaScript’tir. Web development açısından en popüler dil olan JavaScript’i kullanan React-Native hem front-end developer’lerin hem de back-end developer’lerin günümüzde olmazsa olmaz ortak kullanım dilidir.

Flutter

Flutter yazabilmek için bilinmesi gereken dil ise Dart’tır. Object-oriented programming’e hakim herkesin rahatlıkla kavrayabileceği Dart yeni çıkmış bir dil olmasına rağmen popülerliği giderek artmaktadır.

Geliştirme

React Native

React’a aşina olanların herhangi bir yabancılık çekmeyeceği React Native özellikle olay kurgusu, state yapılandırması ve uygulama açısından React’tan bir farkı bulunmamakta denilebilir. Node JS, npm, yarn ve JavaScript ES6’ya hakim olan herkesin rahatlıkla geliştirme yapabileceği bir yapıya sahiptir. React Native component’lerden oluşmakta ve bu componentler tam olarak native odaklı çalışmakta.iOS ve Android’in native bir çok API’sini de (konum, kamera, geri butonu, titreşim, NFC, pil durumu, ekran parlaklığı vs…) içerisinde barındırıyor. Bunlar sayesinde bir çok farklı türde uygulamalar hazırlanabilmekte ve örneğin telefon şarjı %10’un altında ise gönderilen sorguların sayısını azalt gibi reaksiyon almak mümkün olmaktadır. CSS aşinalığı olan herhangi birisi stillendirme ile ilgili zorluk çekmeyecektir StyleSheet adlı React Native metodu sayesinde javascript içerisinde CSS yazılabilmektedir. Üstelik Flexbox sayesinde ekran üzerinde ilgili elementlerin yerleşimi kolaylıkla sağlanabilmektedir. State yönetimi ise tıpkı React’ta olduğu gibi Redux, Context API gibi yapılarla sağlanabilmektedir.

Flutter

Daha önce front-end development yapmış bir kişi açısından Dart dilini kullanmak ilk başlarda zor olsa da alışmakta zorlanılmamaktadır. Yazması okumasından daha kolay olan tek framework gibi görünen Flutter içerisinde kendi widget’lerini barındırıyor, kendi event’lerini barındırıyor, kendi stil yazma metodlarını barındırıyor. Yazımı gerçekten çok hızlı ancak; metodlar çok fazla ve bunların kullanımı ezber gerektirmektedir. Özellikle stillendirmelerin ezber gerektiren metodlarla yapılması elementlerin yerleşimlerini yapabilmek adına işi zorlaştırsa da CSS ile yapılabilecek her şeyi yapabildiğinizi bilmekte fayda var. iOS ve Android’in native bir çok API’sini de içerisinde barındırmaktadır. Yine React Native’de olduğu gibi bu API’lere erişim söz konusu. Özellikle Android ve iOS arayüzlerinin Material ve Cupertion  tema şeklinde sunulması büyük kolaylık sağlamakta bu karışıklığı gidermek adına. State yönetimi ise React’a benzer şekilde bir yapıyla sağlanmakta. Yine tüm uygulamayı saran bir yapı ile diğer tüm bileşenlere state iletilmektedir.

Kurulum ve Ayarlar

React Native

Kurulum için Android Studio veya XCode platformlarının kurulmasıyla başlıyor serüven. Sonrasında ortam değişkenlerini ayarlayıp projeye CLI yardımıyla geçebiliyoruz. Dökümantasyonda Expo ve CLI ile yüklemeyi platform bazında bizlere sunuyor.

Flutter

Kurulum için Android Studio veya XCode platformlarının kurulmasıyla başlıyor. Ek olarak Flutter’ın kurulumu sağlanıyor ve ortam değişkenlerini ayarlayıp projeye CLI yardımıyla Flutter doctor adındaki kurulum sihirbazının bizlere feedback vermesini bekliyoruz. Bu sihirbaz ile birlikte nelere ihtiyaç duyabileceğimizi/eksik olduğunu görüntüleyebiliyoruz.

UI Bileşenler

React Native

React Native’de UI bileşenleri (component) sınırlı sayıda lakin; çok fazla ihtiyaca göre şekillendirilmiş 3rd party plugin’ler mevcut. Örneğin slider yapmanız gerekiyor diyelim. React Native’in kendi içerisinde bunu yapabileceğiniz bir component yok lakin; dilediğiniz şekilde yapılmış olan slide plugin’lerini projeye dahil edebiliyorsunuz. Temelde View, Text, Image gibi basit yapılarla genel arayüzün tasarlanması gerekiyor. Her component kendi içinde rahatlıkla CSS Flexbox teknolojisi kullanılarak stillendirilebiliyor.

Flutter

3rd party pluginler yerine Flutter kendi içerisinde zengin bir widget yapısı barındırıyor. Her widget’in çok fazla alışılagelmişin dışında ayarı var. Detaylı dökümante edilmiş olması artı gibi görünse de; bir zaman sonra ezber yapmanız gerektiğini gösteriyor. Örneğin metin hizalamak için CSS’ten alışageldiğimiz text-align yerine crossAxisAlignment gibi ifadeler söz konusu.

Destek ve Topluluklar

React Native

Uzun yıllardır hayatımızda olan React Native’nin stackoverflow gibi topluluklarda çok fazla desteği mevcut. Yaşanılacak olan herhangi bir hata/sorun ya da yapılacak olan bir geliştirmeyle ilgili geri dönüt sayısı çok fazla.

Flutter

Sektörde yeni olması nedeniyle çok fazla desteği bulunmayan Flutter’ın yaşanılacak herhangi bir hata/sorun karşısında ne gibi bir durumda kalınacağı bilinmiyor. Ancak gitgide artan popülerliği önümüzdeki yıllarda durumları değiştirebilir. Çok uç noktalarda sorun çıktığında çözüm konusunda zorlayabilir.

React Native ve Flutter’ın Avantajlar ve Dezavantajlar

React Native avantaj ve dezavantajları

Avantajlar

En yaygın dillerden birisi olan JavaScript ile yazılması

CSS Flexbox ile desteklenmesi

Yazım ve okunabilirlik kolaylığı

Destek ve toplulukların fazla olması, olası bir sorunda sorunun kolayca çözülmesi

Yaygın 3rd parti component

React developer’ları için kolay adaptasyon

Dezavantajlar

Component sayısı nedeniyle bazı HTML yapıların uyarlanması (Tablo, liste gibi)

Çıkan her paketin işletim sistemi güncellemesi sonrası güncellenmiyor olması

iOS ve Android’te sürüme göre bazen ek geliştirme yapılması (Çentikli ekran)

Flutter avantajları ve dezavantajları

Avantajlar

Çok zengin dökümantasyon

Kendi içinde bulunan Skia Graphic ile daha hızlı ve 120 FPS’de uygulamalar

Material ve Cupertino tasarıma sahip hazır widget’ler ile çok hızlı hazır tasarım kalıpları

iOS ve Android’te sürüm farkı olmaksızın neredeyse aynı görüntüyü elde edebilme seçeneği

Yazımı kolay ve hızlı

Makina dilinde derlendiğinden ötürü hızlı olması

Dezavantajlar

Yeni bir dil için adaptasyon (Dart)

Yazılan kodun devamlı iç içe yazıldığı için hiyerarşiyi kaybederek oluşan okuma zorluğu

Destek ve toplulukların az olması, olası bir sorunda sorunun çözülememe ihtimali

İhtiyaç anında hali hazırda olmayan widget’lerin bulunma ihtimali

Yaygınlığın az olması

Continuous Integration desteğinin henüz oturmamış olması olması

Google’ın platform desteğini her an çekebilme ihtimali

Minimum APK boyutunun fazla olması

Sonuç

Daha önce hiç mobil bir uygulama yazmayan bir Front-end developer olarak Flutter’ın önünün çok açık olduğunu söyleyebilirim. React Native karşısında git gide popüler hale geliyor. Yeni bir şeyler denemek ve de bunu güncel teknolojilerle yapmak istiyorsanız ve biraz risk alırım ben diyorsanız Flutter’i deneyebilirsiniz. Ama eğer ki JavaScript ve React’a çok aşinaysanız ve de farklı bir şeyler denemeye vaktiniz yoksa React Native ile girişebilirsiniz işe diyebilirim.

You may also like...

Bir cevap yazın