İçeriğe geç
Aydınwebs
Blog

Blog

React Native mi Flutter mı? Hangi Projede Hangisini Seçiyoruz

React Native ve Flutter'ı ekip, işe alım, performans, native modül ve bakım açısından karşılaştırdık; hangi projede hangisini, ne zaman native'i seçtiğimizi yazdık.

Üzeyir AYDIN5 dk okuma

Bu karşılaştırmada tarafsız olduğumuzu iddia etmeyeceğiz. Mobil uygulama projelerimizin çoğunu React Native ile geliştiriyoruz, bazılarında NativeScript kullanıyoruz; Flutter'a ve .NET MAUI'ye ise projenin gerçekten gerektirdiği durumlarda uzanıyoruz. Bunu baştan söylemek, aşağıdakileri doğru tartmanız için gerekli.

Öte yandan birkaç yıl önce Flutter'ı neden tercih edebileceğinizi anlattığımız bir yazı da yayımlamıştık ve oradaki argümanların çoğu hâlâ ayakta. İki teknoloji de olgunlaştı. İkisiyle de mağazada başarılı, akıcı, bakımı yapılabilir uygulamalar çıkıyor. Soru artık “hangisi çalışır” değil, “bizim durumumuzda hangisi daha az sürtünme yaratır”.

Yan yana bakınca

KriterReact NativeFlutter
DilJavaScript / TypeScriptDart
ArayüzPlatformun kendi bileşenleriKendi çizim motoru
Web ekibiyle ortaklıkYüksek, React bilgisi taşınırDüşük
Geliştirici bulmakGörece kolayHavuz daha dar
İki platformda aynı görünümKüçük farklar olabilirBirebir aynı
Yoğun animasyonİyi, ek kütüphanelerleÇok güçlü
Web ile kod paylaşımıİş mantığı ve tipler paylaşılırSınırlı
Dış bağımlılıklarTopluluk paketlerine daha bağımlıÇekirdek daha kapsayıcı

Tablo genel eğilimi gösteriyor. Asıl karar, aşağıdaki birkaç sorunun sizin projenizdeki cevabına göre şekilleniyor.

Web ekibiniz React biliyorsa, React Native'in avantajı küçük değil

Web tarafında Next.js ve React ile çalışan bir ekipseniz, React Native'e geçen geliştirici ilk gün yabancılık çekmez. Aynı dil, aynı bileşen mantığı, aynı durum yönetimi yaklaşımları. API istemcisi, veri tipleri ve form doğrulama kuralları web ile mobil arasında paylaşılabilir. Bir alanın zorunlu olup olmadığını tek bir yerde değiştirirsiniz, iki tarafa da yansır.

İşe alımda da fark hissediliyor. JavaScript ve TypeScript bilen geliştirici havuzu, Dart bilenlerden belirgin biçimde geniş. Ekibi büyütürken ya da bir geliştirici ayrıldığında yerine birini bulmak daha kolay.

Yine de bir yanılgıyı düzeltelim: React Native telefona taşınmış bir web sitesi değil. Navigasyon, uzun listelerin performansı, klavye davranışı, izinler ve iki platformun derleme araçları (Xcode ve Gradle) ayrı bir tecrübe istiyor. İyi bir React geliştiricisi iyi bir React Native geliştiricisine dönüşür, ama bu birkaç günde olmaz.

Tasarım iki platformda birebir aynı olsun istiyorsanız Flutter rahat ettirir

Flutter arayüzü platformun hazır bileşenleriyle değil, kendi çizim motoruyla çiziyor. Bu yüzden bir buton iPhone'da da Android'de de piksel piksel aynı görünüyor. Görsel kimliği güçlü, alışılmadık arayüzlü, özel geçişler ve yoğun animasyon içeren projelerde bu büyük bir rahatlık.

Dart öğrenmesi kolay bir dil; Java, C# ya da TypeScript bilen biri kısa sürede üretken olur. Flutter'ın araçları derli toplu, belgeleri iyi. Zayıf tarafı, React Native'in güçlü tarafının aynası: platformun doğal görünümüne ve davranışına yaklaşmak isterseniz (iOS'taki tarih seçicinin hissi gibi) bunu ayrıca emek vererek yapmanız gerekiyor. Web tarafıyla kod paylaşımı da sınırlı. Flutter ile web çıktısı alınabiliyor, ama arama motorunda bulunması gereken bir kurumsal site için uygun değil.

Performans, çoğu işletme uygulamasında belirleyici değil

İnternetteki karşılaştırmaların çoğu performans etrafında dönüyor. Oysa sipariş, randevu, katalog, saha formu gibi uygulamalarda iki teknoloji de fazlasıyla yeterli. React Native'in eski köprü mimarisinden kaynaklanan darboğazlar yeni mimariyle büyük ölçüde geride kaldı ve yeni mimari artık varsayılan olarak geliyor. Flutter'da Dart kodu doğrudan makine koduna derleniyor; animasyon akıcılığı da Flutter'ın öteden beri güçlü olduğu alan.

Performansı gerçekten bozan şeyler teknoloji seçimi değil: optimize edilmemiş uzun listeler, sıkıştırılmamış büyük görseller, gereksiz yeniden çizimler, yavaş bir API. Uygulamanız ağırlıklı olarak animasyon ve grafik üzerine kuruluysa ya da düşük donanımlı Android telefonlarda sorunsuz çalışması şartsa, iki teknolojiyle küçük bir deneme yapıp ölçmek tartışmaktan daha çabuk sonuç verir.

Native modül ihtiyacı kararı değiştirebilir

Uygulamanın bir Bluetooth cihazla, termal yazıcıyla, NFC okuyucuyla ya da bir ödeme terminaliyle konuşması gerekiyorsa soru “React Native mi Flutter mı” olmaktan çıkıyor, “bu cihazın üreticisi hangi SDK'yı veriyor” sorusuna dönüşüyor. Üretici yalnızca iOS ve Android için native kütüphane sağlıyorsa, iki teknolojide de araya bir köprü katmanı yazmak gerekiyor. Yapılabilir bir iş, ama teklifte ayrı bir kalem olarak görünmeli.

Karar vermeden önce kullanacağınız donanımların ve üçüncü taraf servislerin listesini çıkarın. Her biri için hazır bir React Native ya da Flutter paketi olup olmadığına, varsa ne kadar bakımlı olduğuna bakın. Bazen bu liste kararı tek başına veriyor.

Asıl maliyet ilk sürümden sonra başlıyor

Bir mobil yazılım yayından sonra yıllarca yaşar ve her yıl işletim sistemi güncellemelerine, mağazaların yeni şartlarına, kütüphane sürümlerine uyum sağlaması gerekir. React Native'de bu iş, kullandığınız topluluk paketlerinin bakım durumuna fazlasıyla bağlı. Terk edilmiş tek bir paket, sürüm yükseltmesini günlerce uzatabilir. Bu yüzden paket seçerken popülerliğine değil, son güncellenme tarihine ve arkasındaki ekibe bakıyoruz. Expo gibi bir çatı kullanmak da yükseltmeleri ciddi biçimde kolaylaştırıyor.

Flutter'da temel bileşenlerin çoğu çerçevenin kendisiyle geldiği için dış bağımlılık sayısı genellikle daha az, sürüm yükseltmeleri de daha öngörülebilir oluyor. İkisinin arkasında da büyük bir şirket (Meta ve Google) ve geniş bir topluluk var. “Yarın biri ortadan kalkar mı” endişesi bizce karar kriteri olmamalı.

Hangi projede hangisini seçeriz?

Toplantılarda en sık karşılaştığımız beş durum ve genelde verdiğimiz cevap:

Web sitesi ve panel React ile yazılmış, şimdi uygulama isteniyor

React Native. Kod ve bilgi paylaşımı, tek ekip, tek dil. Bu senaryoda başka bir tercih için güçlü bir gerekçe görmemiz gerekir.

Uygulamanın kendisi markanın vitrini

Özel çizilmiş arayüz, bol animasyon, oyunlaştırma öğeleri, iki platformda birebir aynı görünüm. Burada Flutter'ı güçlü bir aday olarak masaya koyuyoruz.

Kurumda .NET ekibi var ve uygulamayı sonra kendileri sürdürecek

Uygulamayı kimin yaşatacağı, hangi teknolojinin “daha iyi” olduğundan önemli. C# bilen bir iç ekip için .NET MAUI makul bir seçenek; kurumsal ve form ağırlıklı uygulamalarda iyi iş çıkarıyor.

Bir fikri kısa sürede test etmek

Ekibin en iyi bildiği teknoloji. Bizim için bu genellikle React Native ve Expo. Fikir doğrulama aşamasında teknoloji tartışması, vakit kaybının en şık hâli.

Sahada cihazlarla konuşan, arka planda sürekli çalışan bir uygulama

Donanım listesini görmeden karar vermiyoruz. Çoğu durumda React Native ve üzerine yazılan birkaç native modül yetiyor; bazen tamamen native gitmek daha az dert çıkarıyor.

Ne zaman ikisi de değil: Swift ve Kotlin

Çapraz platform her zaman doğru cevap değil. Uygulamanın kendisi ürünse ve rekabeti platform özellikleri üzerinden yapıyorsanız, native geliştirme bizce hâlâ en sağlam yol. Artırılmış gerçeklik, yoğun kamera ve video işleme, ana ekran widget'ları, akıllı saat ve araç ekranı entegrasyonları, işletim sisteminin yeni özelliklerine ilk gün erişmek istediğiniz durumlar buna örnek.

Bedeli belli: iki kod tabanı, çoğu zaman iki ayrı uzmanlık, daha yüksek bütçe. Arada bir yol da var; iş mantığını Kotlin Multiplatform ile paylaşıp arayüzü her platformda native yazmak. Oyunlar ise ayrı bir dünya. Onlar için bu teknolojilerin hiçbirini değil, oyun motorlarını konuşmak gerekir.

“Hangisi daha iyi” diye sorulduğunda karşılığında iki soru soruyoruz: bu uygulamayı üç yıl sonra kim geliştirecek ve web tarafınız hangi teknolojide? Cevaplar kararı kendiliğinden veriyor. Sizin projenizde cevap o kadar net değilse, iletişim sayfamızdan ayrıntıları yazın; bir görüşmede birlikte tartalım.

Paylaş

Yazar

Üzeyir AYDIN

Teklif Al

İlgili Yazılar