Flutter Artık Mobil Frameworkten Daha Fazlası

Bu seneye kadar bütün Android kodlarımı Java ile yazan bir geliştiriciydim. Gerek üniversitemde almak zorunda olduğum mobil programlama dersi gerekse kişisel merağım neticesinde Flutter kullanmaya başladım ve irili ufaklı pek çok uygulama geliştirdim. Flutter’in gerek dart ve binding ayağını gerekse popüler olarak kullanılan pek çok hazır kütüphanelesini deneme fırsatı buldum. React Native ile karşılaştırdığım zaman en az onun kadar hızlı modelleyebilmeye ve uygulamayı ek bir şeye gerek duymadan uygulamayı oluşturmaya imkan sağlarken (Java’daki gibi XML dosyaları ile boğuşmaya gerek yok) aşırı hızlı ve optimize çalışıyor. Bunun da sebebi native olarak uygulama oluşturmaya imkan sağlaması.  Şimdi bu native uygulama imkanı biraz daha hedef genişletmiş gibi duruyor. Flutter 2 sürümü ve beta kanalında gelen güncellemeler ile popüler olarak kullanılan; Windows, MacOS, Linux platformlarına destek vereceğini açıkladı. Ve buna ek olarak Chrome tabanlı Web Framework desteği de açıklandı. Sonuçta Flutter çapraz platform bir framework olarak karşımıza yeniden çıkmış gibi oldu. Temel olarak Flutter bunu yaparken; Linux için GTK, Windows için Winforms, MacOS için objective-C ve C++ kullanarak aynı kodu aynı şekilde çalıştırabilecek şekilde pencere üretiyor. İşin özünde farklı dilleri Dart içerisinde kullanabilme imkanı sağlamakta. Yani plugin geliştirecekseniz veya uygulama geliştirirken işletim sistemi özelinde bazı işlemler yapacaksanız temel olarak, platforma bağlı olarak farklı tasarım modelleri KULLANMALISINIZ. Alt modlar, uygulama çubukları, basit list objeleri gibi temel parçalar bütün bu platformlarda eşzamanlı test edilerek geliştirilse bile plugin tarafı pek öyle değil. Pek çok plugin’in farklı platformlara desteği bulunmuyor. İşin sonunda Flutter şöyle bir modelle karşımıza çıktı: Bir yerde yaz her yerde dağıt. Bu çözümü aslında pek çok JVM tabanlı dil de ortaya attı ve hala da üzerinde çalışma da devan ediyorlar. Diğer diller başarısız mı oldu da Flutter bunu yeniden tanımlıyor veya diğer diller başarılı oldular da Flutter’da mı aynı yolu benimsedi derseniz ikisi de değil. Diğer diller başarılı oldu çünkü Kotlin, Skala, Groovy gibi diller şu an birden fazla platformda çalışabilecek uygulamalar oluşturmaya izin veriyor. Hatta Java’nın kendisi de buna izin veriyor. Ancak bu diller başarısız da oldular çünkü geliştiricilerin pek çoğu bu dillere sıçrarken etki alanı mantığı’nı göz ardı ettiler. Bu mantık temel olarak bize projeye başlamadan önce bu projenin boyutunu, destek platformlarını planlamayı tavsiye eder ve bunun maaliyet hesaplamasını kestirmemizi önerir. İnsanlar bunu göz önünde bulundurmadan ve çoğunlukla kervan yolda düzülür diye düşünerek projelerini yaptıkları için bu dillerin yükselişi (hype’ı) kısa sürdü. Şimdi Flutter’da aynı şeyi sıfırdan yaratmaya çalışıyor ama tamamen farklı olarak. Diğerlerinden farklı olarak Flutter Dart dili altındaki bir framework olduğu için diğer platformlarda dil bazındaki uyumluluğu zaten başka bir ekip sağlamakta ve saydığım platformlarda zaten uzun bir süredir destek sağlamakta. Flutter aslında bu dilin tabanını kullanıyor. Geriye kalan ise kendi widgetlerini uygun şekilde bu platformlara adapte etmek kalıyor. Diğer bir şey de, bir Flutter uygulaması yazdığımızda, herhangi bir platforma geçmiyoruz. Flutter, Xamarin’i veya kodunu yerel öğelere çeviren başka bir araç değil. Flutter aslında bunları da taban alarak Dart ile Android veya Xamarin veya başka bir platform için araya giren bir katman gibi. Bu platformların native desteğini alarak kendisini inşaa ediyor. Her şeyi ile kendimiz boyadığımız boş bir tuvalimiz gibi Flutter. Sadece tuvalimizi farklı duvarlara taşımak için her duvara bir çivi çakmamızı sağlıyor. Bu açıdan bakıldığında Flutter aslında Unity gibi. Unity’nin nasıl kendi motoru varsa ve her platforma adapte etmek için sadece kendi motorunun çıktılarını uygun hale getiriyorsa Flutter da bunu yapıyor. Her ne kadar böyle bakıldığı zaman çapraz platfrom desteği oldukça heyecanlandırıcı olsa bile kağıt üzerindeki bu durumun gerçek hayata taşınmış hali biraz sıkıntılı durumda. Flutter’in bu çapraz platform desteği şu an betada. Umarım bu durum düzelir ama yaşadığım ilk sorun, bazen her platform için ihtiyaç duyulmayan paketlerle uygulama boyutu gittikçe büyüyor. Bunu öncesinde iOS ve Android için çoklu platform desteğine sahip bir uygulama geliştirirken yaşadım. Şimdi de aynı durum karşıma çıktı Ve yine bağımlılık bazlı bir sorun var ki bu biraz daha problemli. Zincirleme bağımlılıklar bazen içinden çıkılamayacak kadar karşımış durumda. Hele bir de null-safety geltiğinden beri, tüm paketler null-safety destekleyecek şekilde güncellenmedi veya birbirini dışlayan bağımlılıkları yok. Bu da eski kodu adapte ederken saçma sapan hatalar almaya sebep veriyor. Zamanla bu sorunların düzeleceğine eminim ama bu özelliğe sevinmek için henüz erken olabilir. Yine de Flutter’in çapraz platform desteğini duymak oldukça heyecan verici.