React-Native Vs Flutter 2019 Ekim
-
Merhabalar,
Gerek forumdan gerek çevremdeki kişilerin bana yoğunla bu ikisi arasında ne fark var sorusuna istinaden bir konu açmak ve tartışma ortamı yaratmak istedim...
Bilirsiniz ki React-Native Facebook un framework'ü Flutter da Google'nin framework'ü.
Şimdi ben Flutter ile 4 adet uygulama geliştirdim 3'ü büyük 1 tanesi ufak bir uygulama.
Son 6 aydır da React-Native geliştiriyorum. Kendi fikirlerimi ve düşüncelerimi belirtmek istedim... 2013 yılından beri Native Android(JAVA) uygulama geliştiriyorum bu arada.
---- Flutter avantajları -----
Bir çok UI Widgetlar'ı hazır. Örneğin bir drawerMenu yapacaksanız. Scaffold içerisine bir drawerMenu ekleyip hızlıca drawerMenu yapabiliyorsunuz keza bottomNavigation vs alayını kolaylıkla 3-4 satırda ekleyebiliyorsunuz...
2 ekran arasında geçişleri rahatlıkla yapabiliyorsunuz. Navigation için vs özel bir yapıya falan ihtiyacınız yok bu stack switch işlemlerini yapmıyorsunuz c# daki windows form gibi yada androiddeki gibi sadece o ekranı çağırıyorsunuz iş bitiyor. Geri dönüş özelliği olup olmadığını belirtiyorsunuz ekranı çağırdığınız kodda olay bitiyor.
Redux gibi bir yapıya ihtiyacınız yok. (Eğer çok ihtiyacınız var ise BLOC kullanabilirsiniz.)
Tamamen OOP'un dibine vuruyorsunuz. Class yapıları vs c#/Java gibi dillere benzer..
Biraz snytax'ı zorluyor ama JavaScript de olan bir çok özellik bunda da var örneğin JavaScript de Promise diye bir olay varken Dart'da Future diye geçiyor.
Mesela RN yazarken Promise de dönen objenin kontrolünü yapamıyorken. Futureden bir Array veya Class döndürebiliyorum. Bu sayede parametreleri tek tek kontrol etmeme gerek kalmıyor.
Onun dışında variable tanımlama olayı var. integer/string/double/float gibi değerleri kullanıyorken Javascript de bütün her şey bir obje olduğu için her yerde parse işlemi yapmak zorundayım...
State yönetimi çok daha hoşuma gidiyor.. Örneğin React-Native de propslar'a müdahale edemiyorken Flutter'da direkt widgetların objelerine erişebiliyorum...
Hot Reload özelliği var (RN de 60 da getirdi bu özelliği ama hala iyi değil..) çok daha iyi bir şekilde çalışıyor. Bazı durumlarda React-Native projeyi yeniden build almanız gerekirkern Flutter da böyle bir olay yok...
Örneğin Flutter kodlarken bir kısmını Native yazıp projenin bir kısmı Dart ile kodlayabiliyorsunuz...
Dart ile native kodları çağırabiliyor direkt kullanabiliyorsunuz (Channel dan bahsetmiyorum...)
link olayları otomatik. Bir lib eklediğinizde sizden zorunlu olarak atıyorum rn deki gibi 0.60 zorunludur gibi bir durum yok.
Istediğiniz flutter versiyonunda istediğniz kütüphaneyi kullanabilirsiniz. Çünkü kodlar C/C++'a dönüşüyor yani RN deki gibi bir bridge yok. Direkt native koda çevriliyor kodlar...
Flutter'ın yaptığı değişiklikler kütüphanelere etkilemiyor. Mesela adam kütüphaneyi flutter 1.2 de iken yazdı diyelim. Sen flutter 5.4 kullanırken bile hiçbir paket uyuşmazlığı yaşamıyorsun RN deki gibi....
RN bir yerde hata aldığınızda (Çoğu zaman) size hangi satırda patladığını vs göstermiyor. Bazen açıklama bile anlaşılır değil.
Fakat Flutter'da direkt çıktı olarak hangi satırda patladığını vs gösteriyor. Hata yönetimi daha açıklayıcı.. Paketler nerde patlamış vs görebiliyorsunuz..
Performans olarak RN yi sollar geçer Flutter....
Birde en çok sıkıntı yaşadığım mesele şudur ki; RN de Android telefonda bir tasarım yapıyorum. IOS Da farklı gözüküyor Androidde farklı! Flutter da birebir aynı görünüyor iki ekranda da Flutter'ın bu özelliğini de çok sevmiştim.
<strong style="font-size: 13.3333px;">---- React-Native avantajları -----
React-Native yazıyorsanız React.JS yani web front-endi de rahatlıkla yaparsınız çünkü birebir aynı neredeyse. Mantık falan herşey birebir aynı geçiş yaparken 2-3 gün zorlanırsınız sonra alışırsınız..
Tarayıcıda debug yaparken mesela sunucudan bir object geldi diyelim... bunu tarayıcının debugerinde düzgün bir biçimde görüntüleyebiliyorsunuz. Flutter'da parse edip string olarak görebilirsiniz anca yada debug modda açıp o değişkenin üstüne gelince kontrol edebiliyorsunuz.
Comunnity olarak Flutter yanına yaklaşamaz aradığınız kütüphaneleri rahatlıkla bulabilirsiniz. Flutter da bulmanız biraz daha zor olabilir. Flutter da aldığınız hatanın cevabını daha geç bulabilirken RN de daha kolay buluyorsunuz.
Eğer iş olarak düşünüyorsanız RN dev arayan şirket sayısı 10 ise Flutter arayan 1 veya 2 dir.
Birden fazla ekranı aynı anda çalıştırıp test edebiliyorsunuz UI Yaparken (Flutter da denemedim gerçi).
Mesela ben bir UI Yaparken Iphone modellerin alayını açıyorum büyük bir ekranda. tasarlarken hepsinde aynı anda nasıl göründüğünü görebiliyorum. Test ederken bütün ekranlarda tek tek test etmek yerine aynı anda hepsinde görüntüleyebiliyorum.
CSS'e hakimseniz RN de style değiştirmek daha basit. CSS'e benzer bir yapısı var. CSS tagları benzer nitelikte. Örneğin marginTop paddingTop bacgroundColor gibi vs.vs.
Flutter da UI Yapmak biraz zor build fonksiyonu aşağı doğru uzuyıor. Bir kaç çözüm getirmiş Flutter ama çok da iyi değil RN de HTML kodlar gibi kodladığınızdan kodlanması daha kolay.
---- SONUÇ -----
İmkanım olsaydı kesinlikle Flutter yazardım. 4-5 yıldır JavaScript yazıyorum sıkıntı yok ama RN de sürekli hata almaktan ciğerim soldu. Flutter'a başlarken böyle değildi. Nerde hata yaptığımı anlıyor değiştiriyordum...
RN de kütüphaneleri linklemekten çiğerim soldu.
RN 59 da çalışan kütüphane 0.60-0.61 de çalışmıyor patlıyor çatlıyor. Javascript sürümünü yükselt hatasını alıyorum bir kütüphanede yükseltince diğeri patlıyor... Patlayan kısımlara elle müdahale etmek zorunda kalıyorsunuz. Bazen proje patlıyor 3-4 saat uğraşıyorsunuz sonra terminali kapatıyorsunuz simülatörü kapatıyorsunuz node modules dosyasını siliyorsunuz. modül dosyalarını yükleyip projeyi çalıştırdığınızda hata almıyorsunuz :P Garip..... Bunlar hep sizin zamanınıza mal oluyor...
RN yazacaksanız kesinlikle EXPO.io kullanın kafanız rahat olsun.... Uğraşmayın böyle şeylere herşeyi hazır getiriyor zaten... Hem cloud mimarisi ile QR kodu okut her telefonda debug yap. Hemde navigasyon işlemleri vs vs alayı hazır bir şekilde geliyor. Paketlerinin kullanımı da basit. Bir çok şeyi kendisi otomatik yapıyor...
Hem performans açısından hemde zaman maliyeti açısından Flutter bence daha iyi.
Fakat Flutter ile ekmek yemeniz çok ama çok zor. Bende şuan RN yazıyorum Flutter kodlamak istememe rağmen :)
Uzunca bir süre Flutter yazan bir şirket aradım fakat bulamadım. RN geçtim bende mecburiyetten. (2019 Şubat aylarından bahsediyorum). Şuan tam olarak nedir ne değildir çok bilmiyorum. Ben kendi bildiklerimi öğrendiklerimi söylemek istedim.
Peki sizce RN mi daha iyi Flutter mi ? Neden ?
-
Güzel bir karşılaştırma olmuş. RN hiç bakmadım flutterda bir iki proje koduna baktım syntaxda sanki çok bracket kullanılıyor gibime geldi.
-
Eline saglik hocam güzel yazmissin :) Saydigin bir cok neden flutter ile baslanmasi icin yeterli. Eksik gördügün sebeplerin bir cogu da flutter'in react native göre daha yeni olmasi ve sektörde kendine henüz tam yer bulamamasi. Ben flutter'in geleceginin acik oldugunu, mobile development dünyasini degistirecegini düsünenlerdenim. Ben de gerek objective-c, java, xamarin gibi cesitli dil ve platformlarda mobile appler gelistirdim ve suana kadar flutter'da gördügüm hic bir rahatligi göremedim. Insanlar flutter'i tanidikca kopamiyorlar ki bunlarin basinda ben geliyorum.
Google, flutter'a elbette yatrim yapiyordur ancak reklam konusunda daha cok yapmali. Dart ile desktop+web uygulamalar da gelistirilebilir ancak o kisimda geleceginin cok olacagini düsünmüyorum.
Son olarak; suan mobile gelistirme alaninda gelecegine yatirim yapmak isteyen arkadaslarin flutter ögrenmelerini tavsiye ederim. Flutter ögrenip is bulmak pek mümkün degil. MhmdAlmz'in dedigi gibi türkiye'de imkan olmadigi halde avrupa'da da pek yok, olanlar da zaten ekstra özellik (bilsen iyi olur) olarak istiyorlar. Flutter'in bunu kiracagini düsünüyorum. Bu da daha cok flutter'i yayginlastirarak olacaktir..
React native'in avantaji, farkli platformlarda uygulama gelistirebiliyorsunuz ve is bulma konusunda daha sanslisiniz. Yani react bilen biri web de mobile de gelistirebilir ve rahatlikla is bulabilir.
Bundan sonra sahsi tüm projelerimde flutter kullaniyorum, kullanacagim. Hatta firmada yetkim oldugu sürece de xamarin yerine flutter ile gelistirmeye calisacagim :)
-
Hocam İstanbul buluşması konusu patladı ama biz yine de bi flutter buluşması mi yapsak (:
Aslında hangi dil, platformu seçersen seç mobil programlama zor ve sabır işi. Bu konuyu bir tarafa bırakırsak ben flutteri kurcaliyorum. Henüz tam olarak esnek değil, community problemi var doğru ama performansı iyi ve kullanabiliyorum. Reacti kullanmadım bilmiyorum.
-
Uzun zamandır pek çok yapıyla proje oluşturdum, oluşturmaya devam ediyorum. Ancak bugün tek düşüncem gerçekten native ne ise onu kullanmak. Android ise Java/Kotlin iOS ise Objective-C/Swift. Başka yolu yordamı kaçarı yok.
Android için aptal türk karakter test implement muhabbetini biliyorsunuzdur. React native ile flutter ile benzer hataları aşmak için ciddi efor sarf etmek gerekiyor.
Kod yazmakla uğraşmayım hatalar daha eğlenceli diyorsanız flutter ionic rn hatta Cordova falan ne isterseniz kullanın
Kodla uğraşayım hatalar minimum düzeyde olsun diyorsanız native dilleri öğrenmek zorundasınız.
Instagram gibi ihtiyaç oldukça yazıldığı ortamı geliştirilen büyük bir projede bile hala hatalar var. Instagram blank white screen şeklinde ararsanız bulursunuz. (Ki şuan amk postlarını ben de göremiyorum ve her telefonda yok. Son güncelleme ile gitti) react native in ne kadar sıkıntılı olduğunu görebilirsiniz
Ki Instagram ihtiyaç duydukça rn geliştiriyor Facebook ekibi..
-
Flutter cok yeni. Is noktasinda sikinti ama native gelistirmek got deligini genisletirken, flutter fordluyor sadece. Ihtiyacim olan kucuk bir mobill app'i 3-4 gunluk flutter resmi dokumanina goz atarak hallettim. Tabi ben cok buyuk ve komplike uygulamalar yapmadigim icin is buyudukce ne derece saglam durur o kismini bilmiyorum ancak java-c# falan yazan adam widget nedir kavradigi noktada cok rahat uretime gecebilir flutter ile. Dart olayi bizim gibi kod yazmayi C ve turevi ailelerle ogrenen adamlar icin sorun olmuyor rahat ama python ile ve direk Js ile hasir nesir olanlar Dart icin azcik ugrassa yeter.
-
vakit darsa iki platformda da native yazamayacaksan flutter bence çok iyi.
react native de iyi ama dart js ye göre daha performanslı bir dil.
-
https://www.eventbrite.com/e/flutter-turkiye-study-jam-tickets-75052942371
-
Hocalar google fushia işletim sistemi çıkaracak ve flutter bu işletim sisteminde ön planda olan teknoloji olacak.
Daha önce chromela işletim sistemsi birşey yapmaya çalıştılar ama olmadı. bkzn.chromebook. Ama Dartı bünyelerinde desteklediler ve flutter a iyi destek sağladılar. Şu an bazı IDE durumlarıyla ruh hastası yapabilsede 2 sene sonraya bunun için işletim sistemi olacak. Hem de internet sitesi, android ve ios ta çalışıyor. Ve dahası flutterın istediği tüm ekranlarda çalışabilmekmiş.
-
MhmdAlmz bunu yazdı
Bazen proje patlıyor 3-4 saat uğraşıyorsunuz sonra terminali kapatıyorsunuz simülatörü kapatıyorsunuz node modules dosyasını siliyorsunuz. modül dosyalarını yükleyip projeyi çalıştırdığınızda hata almıyorsunuz :P Garip..... Bunlar hep sizin zamanınıza mal oluyor...
Özellikle şundan nefret ediyorum ama bir proje için başladım bir kere... yazını okuduktan sonra keşke flutter tercih etseydim diyorum belkide ederim... daha işin ortalarındayım.
İş bulma gibi bir derdim yok kendi işimi yapıyorum sence fluttere geçsemmi?
(e-ticaret app) -
caagroup bunu yazdıMhmdAlmz bunu yazdı
Bazen proje patlıyor 3-4 saat uğraşıyorsunuz sonra terminali kapatıyorsunuz simülatörü kapatıyorsunuz node modules dosyasını siliyorsunuz. modül dosyalarını yükleyip projeyi çalıştırdığınızda hata almıyorsunuz :P Garip..... Bunlar hep sizin zamanınıza mal oluyor...
Özellikle şundan nefret ediyorum ama bir proje için başladım bir kere... yazını okuduktan sonra keşke flutter tercih etseydim diyorum belkide ederim... daha işin ortalarındayım.
İş bulma gibi bir derdim yok kendi işimi yapıyorum sence fluttere geçsemmi?
(e-ticaret app)Hocam geçeni öneniririm proje senin projen ise.
https://play.google.com/store/apps/details?id=com.mhmdalmz.example.unfollowjet
https://play.google.com/store/apps/details?id=kurye.moto.istanbul.temkurye_musteri_uygulamasi
https://play.google.com/store/apps/details?id=com.temkurye.kurye
https://play.google.com/store/apps/details?id=com.muhammedalmaz.kuran_meali
Bunları flutter ile yaptım.
Flutter ile e ticaret daha rahat ve hızlı olur