Elektronik

1. FLUTTER İLE MOBİL PROGRAMLAMAYA GİRİŞ

1. FLUTTER İLE MOBİL PROGRAMLAMAYA GİRİŞ

Giriş

Mobil platformlara kod geliştirmek bilgisayar ortamına ve İnternet üzerinden çalışacak web sitelerine yapılacak geliştirmelere benzese de kodun geliştirilen ortamda çalışmaması, mobil cihazların içerdiği farklı donanımsal özellikler, ekran boyutları, ekran çözünürlükleri ve batarya ömrünün iyi kullanımı gibi birçok faktör işin içerisine girmektedir. Derse başlamadan önce genel programlama yeteneklerinizin yeterli seviyede olması ve konulara çalışırken yukarıda sıralanan özelliklerin hatırda tutulması önem arzetmektedir. Mobil platformlarda test yapılabilmesi için emülatörler kullanılmaktadır. Emülatörlerin sisteminizde rahat çalışması için bilgisayar performansının iyi olması ve sanallaştırma özelliğinin BIOS üzerinden açık olması gerekmektedir. Bu bölümde sizlere mobil programlama dünyası tanıtılacak ve Flutter ile mobil program geliştirmek için gerekli kurulumlar yaptırılacaktır.

1.1. Mobil Programlama Nedir ve Neden Gereklidir?

Teknolojinin ilerlemesiyle birlikte bilişim sektöründe kullanılan cihazlar ve kullanım amaçları da artmaya başladı. Cep telefonları bu artışın bir parçası olarak hayatımıza önceleri sadece ses ve SMS iletimi ile girmiş olsa da veri iletimi ve İnternet erişimi sayesinde farklı tür dosyaların aktarımı, işlenmesi ve depolanması için kullanır hale geldiler. Akıllı telefonların (smart phone) hayatımıza girmesi ile de artan algılayıcıları (sensor) ve her tür kişisel kullanım ihtiyacına cevap verecek işlemci hızı ve kapasiteye erişmeleri sayesinde artık hayatımızın vazgeçilmez bir parçası haline gelmiş durumdalar. Bu değişimi İnternete ve sosyal medyaya erişimde mobil platformların oranına bakarak görebiliriz. Aşağıdaki grafikte görüldüğü üzere Ocak 2021 verilerine göre aktif 4,66 milyar İnternet kullanıcısı ve 4,2 milyar sosyal medya kullanıcısı bulunmaktadır. Aynı doğrultuda mobil platformlardan İnternete erişim miktarı 4,32 milyar ve sosyal medya erişimi 4,15 milyar şeklinde gerçekleşmiştir. Bu bize açıkça İnternet erişiminin ve sosyal medya erişiminin özellikle son kullanıcılar seviyesinde düşünüldüğünde %95 üzerinde bir oranda mobil platformlardan gerçekleştiğini göstermektedir.

Mobil platformların geçmişine bakarsak günümüzde kullandığımız akıllı telefonlardan önce de uygulama yüklenebilen veya kendi hazır uygulamaları ile gelen mobil cihazlar mevcuttu. Bu eski donanımlarda özel hazırlanmış bir işletim sistemi bulunuyordu ve çoğunlukla C++’da gömülü olarak kod geliştirmek veya Java Midlet (Java ME) uygulaması geliştirmek gerekmekteydi. Her iki yöntem de zor ve sadece tek bir cihaz için uygulama yazılmasına olanak tanıyan yöntemlerdi. Uygulama geliştiricinin hem cihazın özelliklerinde bilgi sahibi olması hem de farklı modellerde yazılımını uyarlaması gerekmekteydi. Günümüzde kullanılan akıllı telefonların önceki jenerasyonlara göre en büyük avantajı ise içerisinde barındırdıkları işletim sistemlerinin bilgisayarlarda kullanılan işletim sistemleri ile benzer çekirdeklere sahip olmalarıdır. Bu sayede artık mobil cihazlara yazılım geliştirme ve geliştirilen yazılımın taşınabilir olma özelliği ciddi olarak artmıştır.

Kullandığımız akıllı telefonlar aslında bir masaüstü bilgisayardan farklı değildir. Yani içerisinde merkezi işlem birimi (CPU), hafıza (RAM), sabit hafıza (ROM), grafik işlemci ve genel amaçlı işletim sistemi bileşenlerini barındırmaktadır. Bilgisayarlarla mobil platformları karşılaştırdığımızda aralarındaki asıl farkın çevre cihazları yani giriş-çıkış(I/O) cihazlarından kaynaklandığını rahatlıkla söyleyebiliriz. Bir bilgisayar, giriş cihazı olarak klavye, fare, tarayıcı ve mikrofon donanımları içermesine karşın bir akıllı telefon giriş cihazı olarak dokunmatik ekran, GPS sensoru, ivme sensoru, pusula, kamera, parmak izi okuyucu ve mikrofon gibi bileşenler içermektedir. Kullanıcı etkileşimi benzer şekilde farklılık gösterir. Bilgisayarlarda kullanıcı klavye ve fare kullanarak sisteme bilgi girişi yaparken, akıllı telefonlarda dokunmatik ekran ve genellikle yazılım tabanlı ekranda açılan sanal klavye ile etkileşim yapılmaktadır. Yine diğer algılayıcılardan gelen verilerin işlenmesi mobil platformlarda bilgisayarlardan farklı bir uygulama geliştirme sürecini beraberinde getirmektedir.

Mobil Programlama tanımı en yalın hali ile akıllı telefonlar (smart phones) veya daha geniş bir bakış açısı ile akıllı cihazlar (smart devices) için uygulama geliştirme sürecine verilen bir isimlendirmedir. Çıkış noktamız akıllı telefonlar olsa da geliştirilen uygulamalar akıllı telefonlarda kullanılan işletim sistemlerinin üzerinde çalıştığı televizyon, tablet hatta otomobil gibi farklı cihazlarda da kullanılabilmekte veya aynı platform üzerinden bu cihazlar için de uygulama geliştirilebilmekteyiz. Ders kapsamında anlatacağımız Flutter/Dart programlama platformu akıllı telefonların yanında giderek artan bir yelpazede farklı ortamlarda da (masaüstü, web, gömülü sistemler) çalışabilecek şekilde bir teknoloji kullanmaktadır. Amaç bir kere geliştirilen uygulamanın yeniden programlanması gerekmeden farklı platformlarda sorunsuz çalışabilmesidir. Bu açıdan Flutter sonraki bölümde açıklayacağımız alternatiflerinden bir adım öndedir.

1.2. Mobil Platformlar ve Aksesuarlar

Yüksek seviyeli dille yazılan uygulamalar donanımdan bağımsız olurlar. Yani yüksek seviyeli dilde yazılan bir uygulama Intel, AMD, ARM gibi farklı yongalar üzerinde aynı şekilde çalışabilmektedir. Ama ne yazık ki aynı şeyi işletim sistemleri için söylememiz mümkün değildir. Bir işletim sistemi için derlenen bir yazılım başka bir işletim sisteminde çalışmayacaktır. Örneğin Windows platformunda yazdığımız bir uygulama Linux veya MacOS işletim sistemlerinde çalışamaz. Bunun birçok nedeni vardır. Bunlara girmeyeceğiz ama en basitinde arayüz yönetimi, dosya sistemi yönetimi farklılıkları uygulamaları işletim sistemi bağımlı hale getirmektedir. Java ve .Net çatıları bu noktada bir esneklik getirmektedirler. Java için geliştirilen bir uygulama doğrudan bir işletim sisteminin algılayacağı makine kodlarına derlenmez. Bunun yerine Java Sanal Makinesi (Java Virtual Machine) adındaki “aslında kendisi de bir uygulama olan” bir platform için derlenir. Ve bu platformda Java kodları işlenerek işletim sisteminin algılayacağı makine kodları üretilir. Bu yaklaşım kodların taşınırlığını arttırsa da dosya sistemi gibi işletim sistemleri arasında uyum olmayan özelliklerden dolayı Linux altında çalışan bir Java uygulamasının Windows altında da çalışması için dosya işlemlerinde kodun yenilenmesi veya tüm işletim sistemleri düşünülerek kodlanması gerekir. Benzer durum mobil platformlarda da geçerlidir. Bu nedenle öncelikle piyasada aktif kullanımdaki mobil platformlar incelenerek geliştirilecek uygulamanın taşınabilir olması için gereksinimler belirlenmelidir.

Aşağıdaki grafikte mobil cihazlar için geliştirilmiş farklı işletim sistemlerinin 2012’de 2021 Haziran ayına kadar olan market dağılımları verilmektedir. Görüleceği üzere 2021 Haziran itibari ile piyasadaki mobil cihazların %72,84 Android, %26,34 iOS ve sadece %0,82’lik kısmı diğer işletim sistemlerini kullanmaktadır. Anlaşılacağı üzere mobil cihazlar için geliştirilecek bir uygulamanın piyasadaki her bir cihazda çalışması isteniliyorsa hem Android hem de iOS işletim sistemleri için geliştirilmesi gerekmektedir.

Mobil platformlarda artık yer almayan işletim sistemleri için bir uyarlama yapmak veya onlara yönelik bir yazılım geliştirmek günümüz için gereksiz bir kaynak israfı olacaktır. Baktığımızda 2012 yılında oldukça popüler bir işletim sistemi olan Symbian OS  açık kaynak kodlama yapısına sahip Android İşletim Sistemi’nin mobil cihaz üreticileri tarafından tercih edilmesi sonucu piyasadan tamamen silinmiş durumdadır. Neticeye baktığımızda mobil platformlarda karşımıza iki işletim sistemi çıkmaktadır. Bunlardan ilki Google firmasının desteklediği, Linux çekirdeği üzerine inşa edilen Android işletim sistemi ve ikincisi Apple firmasının MacOS’den uyarlayarak kendi iPhone ve iPad ürünleri için geliştirdiği iOS işletim sistemidir. iOS sadece Apple firmasının kendi ürünlerinde kullanıldığı için daha düşük bir pazar payına sahiptir. Diğer tarafta Android işletim sistemi farklı donanım üreticileri tarafından alınıp kendi ürünleri için uyarlanarak kullanılabildiği için bu şekilde geniş bir market payına sahip olmuştur. Her ne kadar iOS’un market payı az görünse de tek bir firmanın ürün grubunda kullanıldığı düşünülürse pazardaki başarısı yüksek denebilecek bir işletim sistemidir. Microsoft firması bu yarışta Windows8 ve Windows10 işletim sistemlerinin tasarımını mobil uyumlu yapsa da bu işletim sistemlerini baz alan Windows Phone platformu piyasada beklenen tepkiyi alamamıştır.

Mobil uygulama geliştirme süreci Android ve iOS olmak üzere iki işletim sistemi hedef alınarak kurgulanabilir. Bu aşamada hangi programlama dilini kullanacağımız ve hangi uygulama çatılarını kullanacağımız bir uygulama geliştirmeden önce cevaplamamız gereken sorulardır. Sonraki başlıkta bu soruya detaylıca cevap arayacağız. Bu arada şunu da ekleyelim Huawei firması Google tekelinden kurtulmak için kendi işletim sistemi olan HarmonyOS’u piyasaya sürdü. Diğer taraftan Google cephesinde de Android sonrası için çalışmalar durmuş değil. Yeni işletim sistemi Google Fuchsia üzerindeki çalışmalarını 2016’dan beri sürdürmektedir. Bu işletim sistemlerinin belli bir Pazar payına ulaşması sonrası bunlar da mobil programlama dili seçiminde dikkate alınması gereken bir kriter olacaktır.

Mobil uygulama geliştirme süreci gün geçtikçe biraz daha karmaşıklaşmaya başlamıştır. Akıllı telefonlar ilk çıktığı zamanlarda sadece tek bir cihaz türü için yazılım geliştiriliyorken şimdi televizyon, tablet, telefon, otomobil ve giyilebilir teknolojiler (akıllı saat, bileklik, gözlük vb.) yazılım geliştirme ihtiyacı doğmuştur. Mobil platformda çalışacak uygulamanın bu donanımlarda çalışması veya haberleşmesi gerekliyse bunun uygulama geliştirme süreçlerinde düşünülmesi, buna uygun kodlama platformu ve kütüphanelerin seçilmesi ve uygun bir tasarımın yapılması gerekir. Bu ders kapsamında sadece akıllı telefonlarda geliştirilecek uygulamalar için temel bilgileri içeren bir müfredat anlatılacaktır. Diğer aksesuarlar için gerekli proje şablonları ve kütüphaneler kod geliştirme ortamlarının arayüzünden ve ilgili mobil platformların İnternet sayfalarından incelenebilir.

1.3. Mobil Programlama Diller ve Türleri

Flutter ile mobil programlamaya geçmeden önce piyasadaki mobil programlama dillerine ve bunların türlerine bir ışık tutmakta fayda vardır. Eğer mobil bir uygulama geliştirilmesi gerekiyorsa bir proje yöneticisi elindeki insan kaynağı ve geliştirilecek iş modeline göre uygun kodlama platformunu seçebilmelidir. Bu süreçteki yanlış kararlar genelde ilgili uygulamanın farklı bir kodlama dili veya kodlama çatısı (framework) ile yeniden yazılmasını gerektirebilir. Bu açıdan günümüz popüler mobil uygulama geliştirme platformlarını konuya başlamadan ele almamız ve alternatifleri bilerek konuyu öğrenmemiz faydalı olacaktır. Öncelikle mobil uygulama geliştirme yaklaşımlarını türlerine göre inceleyelim. Karşımıza üç temel yaklaşım çıkmaktadır; Doğal (Native), Çok Ortam Destekli (Cross-Platform) ve Mobil Web (Mobile Web). Her yaklaşımın kendine göre avantaj ve dezavantajları bulunmaktadır. Ayrıca her türde farklı bir kodlama dili ve farklı bir uygulama geliştirme yaklaşımı öğrenilmesi gerekmektedir. Şimdi mobil uygulama geliştirme türlerini ve dillerini detaylıca inceleyelim.

1.3.1. Mobil Programlama Türleri

Doğal (Native)

Adından da anlaşılacağı gibi bu türdeki uygulama geliştirme modeli işletim sisteminin kendine ait kolama dili kullanılarak doğrudan işletim sistemi üzerinde çalışacak uygulamaların geliştirilmesini kapsamaktadır. Android işletim sistemi için Java ve Kotlin programlama dili iOS işletim sistemi için de Objective-C ve Swift programlama dilleri bu türde uygulama geliştirmek için kullanılır. Doğal (Native) uygulamaların avantajı mobil cihazdaki tüm özelliklere doğrudan erişebilmesi, ara katman kullanmadığı için tam performanslı çalışması ve yine bu sayede bataryayı daha az tüketmeleri olarak sıralanabilir. Dezavantajı ile sadece kendi işletim sistemi üzerinde çalışabilmesidir. Eğer bir uygulamanın hem Android hem de iOS’da çalışması isteniyorsa her ikisinin kendi kodlama dili ile iki uygulama geliştirilmesi gerekmektedir. Genelde her iki mobil platformda birden uzmanlaşmış bir yazılımcı bulunması da mümkün olmadığı için ürün geliştirme maliyetinin ikiye katlanmasını gerektirmektedir. Bu nedenle geliştirilecek uygulama eğer akıllı telefondaki donanımsal özelliklere çok bağımlı değilse ve performanstaki kayıplar uygulamanın çalışmasını aksatmayacak düzeydeyse Doğal (Native) uygulama geliştirme yöntemi küçük ve orta ölçekli yazılım firmaları tarafından daha az tercih edilmeye başlanmıştır.

Not: Native ifadesi işletim sisteminin kendi dilini kullanmak manasında kullanıldığı gibi doğrudan C++ dili ile işletim sistemi çekirdeği üzerine kod geliştirmek için de kullanılmaktadır. Her ne kadar bu başlıkta anlatılan Doğal (Native) uygulama geliştirme yöntemi ile işletim sistemi üzerinde doğrudan çalışan mobil uygulamalar geliştirildiğini söylesek de bu uygulamalar “Sandbox” olarak ifade edilen bir yöntemle birbirinden izole şekilde çalışmaktadır. Yani bir uygulama diğer uygulamanın işlemcide koşan işlemlerine, RAM’deki verilerine ve kalıcı hafızada diğer uygulamalara ait dosya bölümüne erişemezler. Diğer manada kullanılan Native uygulama geliştirme daha alt seviyede işletim sisteminin doğrudan çekirdeği (kernel) üzerinde çalışacak (genel olarak C++ dili ile geliştirilen) uygulamaların kodlanması için kullanılmaktadır. Android için çekirdek(kernel) seviyesinde geliştirme Native Development Toolkit (NDK) ile yapılmaktadır. Bu yöntem C++ ile yazılmış hazır kütüphaneleri kodda çağırmak ve performans gereken kısımların C++ ile kodlanması amacı ile de kullanılmaktadır. Çoğunlukla geliştirilen uygulamaların işletim sistemi çekirdeğine doğrudan erişim ihtiyacı olmamaktadır. Mobil platformlardaki güvenlik gereksiniminden dolayı mobil platformların marketlerinden indirilen tüm uygulamalar Sandbox yöntemi ile izole şekilde çalışırlar.

Çok Ortam Destekli (Cross-Platform)

Cross-Platform bilgisayar terminolojisinde tek bir dil ile geliştirilen bir uygulamanın birden fazla platformda (işletim sistemi türünde) değiştirilmeden çalışabilmesi veya aynı anda birden fazla platforma göre derlenebilmesini ifade etmektedir. Bu geliştirme modelinde uygulama, işletim sisteminin kendi kodlama dilinden bağımsız bir dil ile oluşturulmaktadır. Uygulamalar, işletim sistemi üzerinde çalışabilmesi için yardımcı kütüphane dosyaları ve özel bir kod dönüştürücü yapısını bünyelerine dahil eder veya harici olarak kullanırlar. Doğal (Native) geliştirme yöntemine göre daha az işgücü gerektirdiği için avantajlıdır. Uygulamanın işletim sistemi üzerinde çalışabilmesi için ara bir katman içerdiğinden performans kaybı bir dezavantajı olarak görülebilir. Bu performans kaybı akıllı telefonlardaki işlemci kapasitelerinin artması sayesinde çoğu uygulama türü için artık önemsenmeyecek seviyelerdedir ve ara katmanların getirdiği ek yük giderek azaltılmaya çalışılmaktadır. Diğer bir dezavantajı ise kullanılan geliştirme modeline göre akıllı telefonların bazı donanımsal özelliklerine erişmek için ilgili işletim sisteminin doğal (native) dili ile kod geliştirmeye ihtiyaç duyulabilmesidir. Mobil uygulama geliştirme piyasasına bakıldığında Cross-Platform dillere olan ilginin giderek arttığı görülmektedir.

Mobil Web (Mobile Web)

Diğer bir mobil uygulama geliştirme modeli olarak da web tabanlı uygulamaları görmekteyiz. Web sayfalarının mobil platformlarda bir uygulama gibi görülmesini sağlamak suretiyle web içeriğinin bir uygulama gibi son kullanıcıya sunulması sağlanır. Mobil platformlarda İnternet sitelerinin daha fazla ziyaret edilmesi sonucu mobil platformlardan gelen kullanıcılara iyi bir sunum sağlanması artık internet sayfalarında aranan temel özellik haline gelmiştir. Farklı ekran çözünürlüklerinde ve farklı ekran boyutlarında kullanıcıların veriye erişimi ve etkileşimini düzenleyen bir web sayfası geliştirme modeli oluşmuştur. Bu model günümüzde “Responsive Web Design” olarak nitelendirilmektedir ve bir İnternet sitesinin mobil platformlarda görüntülenmeye uygun olması manasında da kullanılmaktadır. Mobil Web uygulama türünde, kullanıcının uygulamayı kullanabilmesi için çevrimiçi olması gerekmektedir. Bu gereksinimin ortadan kaldırılması adına Mobil Web türündeki uygulamalarda İnternet sayfası içeriği cihazda yerel olarak kaydedilir ve uygulama içerisinde kullanıcı gezintisi yerel kopya sayesinde çevrimdışı iken de sağlanır. Bu yaklaşımda responsive özelliklerde sunulurken kullanıcı deneyimi sanki doğal(native) bir uygulama kullanıyor gibi sağlanır. Yaklaşıma isimlendirme olarak “Progressive Web App” adı verilmiştir. Ayrıca İnternet sitesinin ana sayfasının kısa yolu akıllı telefondaki masaüstüne kaydedilerek kullanıcıya sanki doğal(native) bir uygulama kullanıyor hissi verilmeye çalışılır.

Mobil Web türündeki avantaj, geliştirilmesi için mobil platforma özgü harcanması gereken kaynak çok azdır. Sistemin zaten kullandığı bir web platformu ve bu platformu kodlayan ekibi var ise yeni bir personel almaksızın mobil platformlarda çalışacak mobil web türü uygulamalar geliştirilebilir. Zira günümüzde artık web sayfaları tamamen mobil desteği verecek şekilde inşa edilmektedir. Mobil web türü uygulama geliştirme süreci diğer türlere göre daha hızlı ve kolay olmaktadır. Çünkü zaten piyasada web teknolojileri ile ilgilenmiş yazılımcı sayısı fazla ve ücret skalası mobil platform kodlama yapanlara göre aşağıdadır. Mobil web türünün getirdiği kritik zorluksa telefonun donanımsal yapısından tamamen bağımsız çalışmasıdır. Bir internet tarayıcısı aracılığı ile çalışan uygulamamız telefondaki donanımsal bileşenlerin nerdeyse tamamına doğrudan erişemez. Bunun için ek bir doğal(native) kodlanmış bölümün uygulamaya dahil edilmesini gerektirir. Bu gibi durumlar da mobil web türünün getirdiği hızlı üretilme avantajını ortadan kaldırmaktadır. Bakıldığında eğer bir uygulama aynı zamanda bir İnternet sayfası üzerinden son kullanıcıya sunulan bir hizmeti aynı şekilde mobil platformlarda vermek niyetiyle yapılacaksa tercih edilmeli, telefon donanımı ile etkileşen bir uygulama geliştirilecek ise tercih edilmemelidir.

1.3.2. Mobil Programlama Dilleri

Her gelişen teknoloji dalı için çeşitlilik nasıl artıyorsa mobil platformlar için uygulama geliştirilecek diller de artmaktadır. Öncelikle doğal (native) uygulama geliştirme dillerini sonra da cross-platform uygulama geliştirme dillerini inceleyelim.

Android: Java – Kotlin

Android işletim sistemi için ana uygulama geliştirme dili Google tarafından Java olarak tercih edilmiştir. Android işletim sistemi Java dilinde yazılan kodları çalıştırmak için bir sanal makine “Android Runtime (ART)” kullanmaktadır. Bu yaklaşım masaüstü sistemlerdeki Java Sanal Makinesine benzer şekilde çalışır. Android işletim sisteminin fonksiyonları ART sayesinde uygulama geliştiricilerinden izole edilir ve bu sistem güvenliğini arttırır. Google, Android için geliştirme ortamını “Android Studio”, yazılım geliştirme kitini “Software Development Kit (SDK)”, belgelendirmeleri ve birçok yardımcı materyali https://developer.android.com/ sayfası üzerinden sunmaktadır.

Kotlin dili yine Google tarafından Android SDK’sı kullanarak Android işletim sistemlerine doğal (native) uygulama geliştirmek için üretilen bir dildir. Kotlin dili Java’da görülen hantallıkların giderilmesi ve daha az kodlama yaparak daha çok işlevi yerine getirmeyi amaçlayan bir iyileştirmedir. Kotlin ile yazılan uygulamalar yine ART üzerine çalışacağı için Java bytecode’a dönüştürülürler. Kotlin dili Android platformu için doğal(native) kodlama yapmayı düşünecek yazılımcılar için günümüzde öğrenilmesi gereken programlama dilidir.

iOS: Objective-C – Swift

iOS işletim sistemi için ise Apple firmasının ilk tercih ettiği dil Objective-C dilidir. Bu dil C dilinin sentaksını kullanır ve bunun üzerine nesneye yönelimli bir yaklaşım getirmiştir. C++ dilinden farklı bir dildir. Apple’ın Swift dilini kullanmaya başlaması ile artık mobil geliştirme için tercih edilmemektedir.

Swift iOS için doğal(native) uygulama geliştirmede kullanılan programlama dilidir. MacOS işletim sistemi üzerinde çalışan Xcode geliştirme ortamı ile kodlanabilmektedir. Swift dilinde Objective-C ile yazılmış kütüphaneleri kullanıma destek de sunulmaktadır. Apple firması iOS üzerinde geliştirme yapacak yazılımcılara tüm gerekli içeriği https://developer.apple.com/ internet adresi üzerinden sunmaktadır. iOS için doğal(native) uygulama geliştirmek için MacOS işletim sistemi ve Xcode editörüne sahip olmak gerekmektedir. Apple firması bu tutumuyla uygulama geliştiricileri yine kendi ürünlerini kullanıma ve kendi ekosistemleri içerisinde kalmaya zorlamaktadır.

Xamarin & C#

Xamarin, Microsoft Firmasının .Net platformunun mobil uygulama geliştirmede kullanımı için açık-kaynak olarak geliştirilmiş bir cross-platform çerçevedir. Xamarin ile aynı anda Android, iOS ve Windows işletim sistemlerinde çalışacak uygulama geliştirilebilir. Xamarin bir soyutlama katmanı kullanarak ortak uygulama kodlarını alt tarafta yer alan platform kodları ile haberleştirir. Microsoft mobil platformlarda kaybettiği yarışı Xamarin ile yazılım sektöründe devam ettirmeye çalışmaktadır. Ne yazık ki Xamarin de alternatifi cross-platform geliştirme ortamları ile rekabette geri kalmıştır. Yine de .Net teknolojilerine hâkim bir yazılımcının mobil platformlar için uygulama geliştirmesi gerektiği noktada uygun bir çözüm olarak karşımıza çıkmaktadır. PC veya Mac üzerinde Xamarin ile geliştirme yapılabilmektedir.

Apache Cordova & HTML-CSS-JavaScript

Cross-Platform uygulama geliştirmede web teknolojilerinin kullanıldığı bu yaklaşımda uygulamanın özü frontend web teknolojileri olan html, css ve JavaScript dilleri ile bir web sayfası kodlar gibi geliştirilir. Telefon donanımına erişim ise web servisi çağrıları gibi Cordova çatısına yapılan API çağrıları ile gerçekleştirilmektedir. Uygulamanın kendisi de bir internet tarayıcısı gibi çalışan WebView bileşeni üzerinde olmaktadır. Android, iOS, Windows ve başka ortamlarda çalışabilen uygulamalar geliştirme imkânı sunar.

React Native & JavaScript

React Native, Facebook firmasının desteklediği ve en yaygın kullanıma sahip cross-platform mobil uygulama geliştirme platformudur. Web geliştiricilerin aşina olduğu JavaScript dilini doğal(native) uygulama içerisinde arayüz çizimi için kullanan bir yapısı vardır. React Native JavaScript dilinde geliştirilen arayüz çizimini çalışma zamanında üzerinde çalışacağı işletim sisteminin kendi arayüz bileşenlerine çevirmek suretiyle doğal(native) bir uygulama hissiyatı verir. Çalışma esnasında gerçekleşen dönüştürme işlemi kabul edilebilir bir performans kaybı getirmektedir. React Native ciddi bir geliştirici topluluğuna ve çok sayıda hazır bileşenlere sahiptir. Dil olarak JavaScript kullanılıyor olsa da web geliştirmede kullanılan bileşenlerden farklı isimde bileşenler kullanılmaktadır. Arayüz çizimi ve durum yönetimi de web uygulaması geliştirmeden farklıdır.

Flutter & Dart

Google firması 2011 yılında Dart dilini ilk defa tanıtmıştır. İlk stabil sürümünü 2017 yılında piyasaya sürmüştür ve sonrasında Flutter Framework’ü cross-platform mobil uygulama geliştirme için tasarlamıştır. Flutter diğer cross-platform uygulama geliştirme yöntemlerinden esinlenilerek hazırlanmıştır. Bu açıdan çalışma mekanizmasının pek çok yanı React Native’e benzemektedir. React Native’den ayrılan en önemli özelliği bileşenlerinin üzerinde çalıştığı işletim sistemi bileşenlerine dönüştürülmemesi bunun yerine Skia grafik motorunu kullanarak arayüzü doğrudan çizmektedir. Bu yönü ile Flutter, React Native’e kıyasla arayüz render işleminde ciddi bir performans artışı kazanmaktadır. Flutter aslında bir arayüz çizim çatısıdır (Framework). Kodlama dili olarak kullanılan Dart dili nesneye yönelik C tabanlı dillerin (C++, C#, Java, JavaScript) iyi yanlarının bir araya getirilmiş bir kombinasyonudur denebilir. Bu nedenle daha önce bu dillerden birini kullanmış bir yazılımcının Dart diline hâkim olması çok kısa bir zamanda gerçekleşmektedir. Flutter’ın ilginç özelliklerinden biri ise arayüzün nasıl olacağına derleme aşamasında değil çalışma zamanında karar vermesidir. Bu sayede farklı platformlarda aynı görselliği sağlayabilmektedir. Flutter ile Android, iOS, Web, Windows, Linux, MacOS ve hatta farklı gömülü sistemler için bile uygulama geliştirilebilmektedir. Flutter’ın tasarımındaki esneklik onun ileride farklı platformları da destekleyebilmesini sağlamaktadır. Flutter, Google firmasının desteğini aldığı ve geniş bir topluluğa sahip olduğu için iki yıl içerisinde çoğu cross-platform mobil uygulama geliştirme araçlarından daha popüler hale gelmiştir. Üçüncü parti bileşenler açısından eski platformlara göre yeterli alternatifi olmamasına karşın Google’ın üçüncü parti bileşenleri sunduğu paket kütüphanesi ve yürüttüğü “Flutter Favorites” programı ile uygulama geliştiricilerin bu yönde aradıklarını bulma ve doğru bileşenleri edinmesine yardımcı olmaktadır.

Diğer Cross-Platform Uygulama Geliştirme Ortamları

Yukarıda sıraladığımız uygulama geliştirme ortamları dışında özellikle cross-platform gurubunda sayabileceğimiz çok farklı alternatifler bulunmaktadır. Bunlardan Ionic yukarıdakilerden sonra gelen en popüler alternatif olarak değerlendirilebilir. Diğer alternatiflerin olduğunu bilmekle beraber eğer bu alana yeni giriş yapılacaksa en popüler olanları veya topluluğu aktif ve giderek büyüyenlerden birini tercih etmek yerinde olacaktır. Diğer ortamları keşfetmek için İnternet üzerinde basit bir araştırma yapmak yeterli olacaktır. Her yıl aktif olan geliştirme ortamları değişebileceği için doğrudan bir kaynak paylaşılmamıştır.

1.4. Neden Flutter?

Saydığımız bunca mobil uygulama geliştirme türleri ve dilleri arasında biz neden Flutter öğrenmeliyiz sorusuna birkaç madde ile cevap verelim;

 Flutter cross-platform bir uygulama geliştirme platformudur ve Android, iOS, Web, Windows, Linux, MacOS ve giderek genişleyen bir çalışabildiği platform desteği bulunmaktadır.

 Flutter Skia grafik motorunu kullandığı için arayüz derleme işleminde performans kaybı neredeyse yoktur. Doğal (Native) bir uygulamanın arayüz çizimine eş bir performansta çalışır.

 Arkasında Google gibi sektörü yönlendiren bir firma bulunmaktadır ve Flutter kullanan-geliştiren topluluğu giderek büyümektedir.

 Arayüz tasarımı için kullandığı temel bileşenlerin (Widgets) öğrenilmesi ve kullanımı kolaydır.

 Telefondaki bileşenlere Flutter’da geliştirilmiş kütüphanelerle erişmek mümkündür. JavaScript temelli cross-platform geliştirme yöntemlerindeki gibi bir API çağrısı yapılmaz doğrudan doğal (native) kod ile bütünleşmiş çalışmaktadır.

 Endüstrinin ihtiyaçlarına hızlıca uyum sağlayabilecek formdadır. Sayısız Widget (Flutter’daki arayüz bileşenlerinin genel adı) ve doğal(native) kod yazma imkânı sunar.

 Flutter kendi içerisinde bir uygulama yaşam döngüsü yönetimi sunmaktadır. Web temelli çözümlerde bu özellik ek bileşen olarak bulunmaktadır. Web programlama kendi doğası gereği stateless (durumsuz) çalışmaktadır.

 Flutter kodlama yapısı Android’in doğal(native) kodlama yapısına çok yakındır. Google burada ekipler arası deneyim aktarımı ile bir avantaj oluşturmuştur.

Bu maddeleri daha detaylı incelemek isteyenler bağlantıdaki içeriği veya İnternet’te bulunan Flutter özelliklerinin diğer alternatifleriyle karşılaştırmalarını inceleyebilirler.

1.5. Flutter Kurulumu ve İlk Proje Oluşturma

Google firması Flutter öğrenmek ve Flutter ile geliştirme yapmak isteyenler için gerekli tüm içeriği https://flutter.dev/ İnternet adresinden sunmaktadır. Bu ders içeriğinde bu İnternet adresine sürekli referanslar verilecektir ve buradaki içeriği daha rahat takip etmeniz için yönlendirmelerde bulunulacaktır.

Flutter’ın İnternet sayfasını ziyaret ettiğinizde sağ üst köşede “Get Started” Get Started butonu görülmektedir. Bu butona tıkladığımızda bizi doğruca kurulum ekranı ile karşılamaktadır.

Flutter cross-platform bir uygulama geliştirme çatısı olmasının yanında istenilen işletim sistemi üzerinde geliştirme yapmaya da olanak tanımaktadır. Kurulum ekranından seçilen işletim sistemine göre Flutter için gereksinimler ve adım adım kurulum prosedürü verilmektedir. Hangi işletim sistemine sahip olursanız olun Flutter’da cross-platform uygulama geliştirebilirsiniz fakat iOS ortamında uygulamanızı test etmek istiyorsanız MacOS işletim sistemine sahip olmanız gerekmektedir. Kurulum aşamasından sonraki ders içeri Windows 10 bir işletim sistemi üzerinden gerçekleşecektir. Ama anlatılan içerik işletim sisteminden bağımsızdır. İşletim sistemleri arasındaki tek fark kurulum gereksinimleri ve kurulum adımlarıdır.

Gereksinimler

Kurulum işlemindeki ilk adım kurulum yapacağımız işletim sistemine göre sistem gereksinimlerine bakmak olacaktır. Eğer kurulum yapmak istediğimiz sistem bu gereksinimleri karşılamıyorsa muhtemelen Flutter veya Flutter’ın çalışabilmesi için gerekli bileşenleri kuramayacaksınız. Bu nedenle kurulum işlemine başlamadan önce kurulum yapmak istediğiniz sistemin gereksinimleri tam olarak karşıladığından emin olunuz. Gereksinimler işletim sistemine göre farklılık gösterdiği için gereksinimleri işletim sistemine göre inceleyelim.

Windows

 İşletim Sistemi: Windows 7 SP1 veya üstü (64-bit), x86-64 tabanlı.

 Disk Alanı: 1.64 GB (gerekli IDE ve diğer araçların kurulumu için önerim 20 GB boş alana sahip olmanızdır.)

 Araçlar: Flutter çalıştırırken bazı ek araçları kullanmak gerekecektir. En azından sisteminizde;

– Windows PowerShell 5.0 veya üst sürümü olmalıdır. (Windows 10’da PowerShell kurulu gelmektedir.)

– Windows komut satırı için Git uygulaması Git for Windows. Eğer bilgisayarınızda Git zaten kuruluysa komut satırına git komutunu yazdığınızda aşağıdaki gibi bir ekran görmeniz gerekmektedir. Kurulumda Git’i kurduğunuz yeri Ortam Değişkenlerinde (Environment Variables) Path bilgisi olarak eklemeniz ve kurulum yaptıktan sonra bilgisayarınızı yeniden başlatmanız gerekir.

metin içeren bir resim

Açıklama otomatik olarak oluşturuldu

MacOS

 İşletim Sistemi: MacOS

 Disk Alanı: 2.8 GB (gerekli IDE ve diğer araçların kurulumu için önerim 20 GB boş alana sahip olmanızdır.)

 Araçlar: Flutter kurulum ve paket yönetimi için git kullanmaktadır. MacOS’de çalışmak için kurulacak Xcode IDE’si git’i bünyesinde barındırmaktadır. Ama istenilirse git ayrı olarak da kurulabilir.

Linux

 İşletim Sistemi: 64-bit Linux

 Disk Alanı: 600 MB (gerekli IDE ve diğer araçların kurulumu için önerim 20 GB boş alana sahip olmanızdır.)

 Araçlar: Flutter sisteminizdeki paket yöneticileri aracılığı ile indirebileceğiniz komut satırı araçlarına ihtiyaç duyar.

 bash

 curl

 file

 git 2.x

 mkdir

 rm

 unzip

 which

 xz-utils

 zip

 Ortak Kütüphaneler: Flutter test komutu sistemde olan libGLU.so.1 paketine ihtiyaç duymaktadır. Ubuntu/Debian işletim sistemlerinde libglu1-mesa, Fedora işletim sisteminde mesa-libGLU ismindeki mesa paketi olarak dağıtılmaktadır.

Flutter SDK Kurulumu

İşletim sisteminize göre temel gereksinimleri karşıladıktan sonra Flutter SDK (Software Development Kit) kurulumuna geçebilirsiniz. Flutter sürekli güncellenen ve farklı kullanıcı tiplerine göre farklı kanallarla(channel) sunulan bir yapıya sahiptir. Bu dağıtımlara SDK Releases sayfası üzerinde erişebilirsiniz. SDK Release sayfasındaki kanallar;

 Stable: Flutter SDK’sının stabil yani üretim projelerinde kullanılabilir halini ifade etmektedir. Bu kanalda verilen SDK özellikleri bütün test aşamalarından başarıyla geçmiş demektir ve uygulama geliştirmede gönül rahatlığıyla kullanılabilir. Google Play Store’a ve Apple Store’a yüklenecek uygulamaların muhakkak stable channel ile üretilmiş uygulamalar olması gerekir.

 Beta: Beta aşamasındaki sürümleri simgeler. Geliştirme aşaması tamamlanmış ve topluluğun deneyimlemesine sunulmuş sürümler bu kanalda verilmektedir. Beta kanalında Stable kanalındaki sürümler de yer alır.

 Dev: Development Channel yani üretim kanalıdır. Henüz tam olarak test edilmemiş ve dile yeni eklenen özellikleri derlenerek sunulduğu kanaldır. Stable ve Beta kanalında olmayan ve genellikle ayda en az bir kere yenilenen sürümler bu kanalda sunulmaktadır.

 Master: GitHub üzerindeki aktif proje kanalıdır. Bu kanal sadece SDK geliştiricilerine hitap etmektedir. Master kanalındaki kodlar her zaman tutarlı çalışmayabilir. Flutter’a eklenen en yeni özellikler aynı anda bu kanal aracılığı ile deneyimlenebilmektedir.

Biz kurulum için “Stable Channel” üzerindeki en son sürümü kullanacağız. Bu ders notu hazırlanırken son stabil sürüm 2.2.3 sürümüdür. Bunun için indirme bağlantısı kurulum adımının ikinci aşamasında işletim sistemi seçiminize göre aşağıdaki gibi görünecektir. Kurulum işleminin bundan sonraki aşamaları Windows işletim sistemine göre anlatılacaktır. Diğer işletim sistemleri içi flutter.dev adresinden kurulum adımlarını takip edebilirsiniz.

https://flutter.dev/docs/get-started/install/windows

metin içeren bir resim

Açıklama otomatik olarak oluşturuldu

Burada gösterilen zip dosyasını bilgisayarınıza indirerek istediğiniz bir klasör altında ayıklamak suretiyle Flutter SDK’yı bilgisayarınıza yükleyebilirsiniz. SDK’yı yükleyeceğiniz klasörün Türkçe karakter, boşluk, tire(-) ve özel herhangi bir noktalama işareti içermemesine özen gösteriniz. Aksi halde proje derleme aşamasında bazı dosyaların bulunmasında sıkıntılar yaşayabilirsiniz. Buradaki anlatımda Windows işletim sisteminde “C:\Android\” altında “flutter” olarak isimlendirilen bir klasörde zip dosyası ayıklanmıştır. Ayıklanan SDK kurulumu aşağıdaki gibi bir klasör yapısı görmenizi sağlayacaktır.

metin, ekran görüntüsü, ekran, siyah içeren bir resim

Açıklama otomatik olarak oluşturuldu

Kurulum dizini olarak “Masaüstü” veya “Program Files” gibi özel kullanıcı izinleri gerektiren klasörleri seçmeyiniz.

Yukarıda anlatılan SDK zip dosyası ayıklaması yerine git üzerinden de kurulum işlemini yapabilirsiniz. Bunun için komut satırında veya PowerShell üzerinden kurulum yapmak istediğiniz klasöre giderek aşağıdaki komutu çalıştırınız. (Not: gereksinimlerdeki git kurulumunu yapmış olmanız gerekir.)

Flutter SDK Yolunun İşletim Sistemine Gösterilmesi

Flutter SDK’sı bir klasör içerisine yüklendiği için bu klasör içerisindeki çalıştırılabilir dosyaların ve kütüphanelerin işletim sistemi tarafından görünmesi sağlanmalıdır. Bunu gerçekleştirmek için;

 Windows işletim sisteminde “Ortam Değişkenleri” (Environment Variables) içerisinde kullanıcı değikenleri (User Variables) başlığında bulunan Path bilgisine Flutter SDK içerisndeki “bin” klasörünün yolunun eklenmesi gerekmektedir. Ortam Değişkenlerini düzenlemek için Windows Başlat menüsünden aratarak ulaşabilirsiniz. Düzenleme için yönetici haklarına sahip olmanız gerekir. Yukarıdaki kurulum için Path girdisine “c:\Android\flutter\bin” eklenmesi gerekmektedir. Kurulum yaptığınız yere göre bunu düzenlemeniz gerekir. Aşağıda yapılan işlemin örnek görseli verilmiştir.

metin içeren bir resim

Açıklama otomatik olarak oluşturuldu

 Linux ve MacOS işletim sistemlerinde yönetici hakkı ile aşağıdaki komutu çalıştırmanız yeterli olacaktır. Burada kurulumun “/flutter” altında yapıldığı varsayılmaktadır.

export PATH=“$PATH:`pwd`/flutter/bin”

Path bilgisinin güncel halinin işletim sistemi tarafından kullanılabilmesi için kullanıcı oturumunun kapatılıp açılması veya bilgisayarın yeniden başlatılması gerekmektedir. Kurulumun bu aşamasından sonra terminal penceresinde (Windows’ta konsol-PowerShell olarak geçmektedir. Konsol-Terminal terimleri metin içerisinde aynı manada kullanılmaktadır.)

flutter doctor

komutunu girerek Flutter SDK yol tanımlamasının doğru olup olmadığını kontrol ediniz. Aşağıdaki gibi bir çıktı almanız gerekmektedir.

metin içeren bir resim

Açıklama otomatik olarak oluşturuldu

Alacağınız çıktıda buradakinden farklı olarak birçok maddenin “X” ile işaretli olduğunu göreceksiniz. Bu bir sıkıntı değildir. “flutter doctor” komutu bilgisayarınızdaki kurulumları test ederek Flutter kodlamanız için gerekli yazılımların ve SDK’ların varlığını kontrol etmektedir. Devam eden maddelerde bu kurulumları tamamlayacağız.

Not: Google Flutter kurulumunda varsayılan ayar olarak Flutter’ın iyileştirilmesi için ananım kullanım bilgilerini toplamaktadır.  komutunu kullanarak bu bilgi gönderimini kapatabilirsiniz.

Android Studio ve Android SDK Kurulumu

Flutter kodlamak için birden fazla IDE (Integrated Development Environment- Tümleşik Geliştirme Ortamı) kullanmamız mümkündür; Android Studio, IntelliJ, Visual Studio Code. İçeriğin devamında Microsoft firmasının geliştirdiği ve kullanım açısından yalın ve esnek olduğu için çoğunlukla tercih edilen Visual Studio Code (VS Code) IDE’si kullanılacaktır fakat VS Code kurulumundan önce Android geliştirme yapmak için Google firmasının sunduğu Android Studio IDE’sinin kurulumunu yapmamız gerekiyor. Android Studio, Android için uygulama geliştirmek ve test etmek için gerekli Android SDK ve Emülatörlerini bize kolayca sağlamaktadır. Android SDK’sını Android Studio olmadan da bilgisayarınıza kurmanız mümkündür ama bu hem daha zahmetli hem de Flutter kurulumunu doğrulamada bize zaman kaybettirecektir. Bu nedenle Flutter kodlamaya geçmeden önce Android Studio ve Android SDK’sını kurmamız gerekmektedir.

Android Studio IDE’sini https://developer.android.com/studio adresinden indirebilirsiniz. Android Studio kurulumunda size neleri kurmak istediğinizi soracaktır. Varsayılan kurulum genel olarak ihtiyacımızı karşılamaktadır. Android Studio kurulumunda dikkat etmemiz gereken önemli nokta Android SDK için seçilecek kurulum dizinidir. Eğer bu kurulum dizinini değiştirmezseniz kullanıcı hesabınızın altında kurulum yapılacaktır. Bu önceden belirttiğimiz gibi Türkçe işletim sistemlerinde bazen derleyicilerin çalışmaması gibi problemlere yol açmaktadır (Özellikle kullanıcı adınız Türkçeye özgü karakterler içeriyorsa). Bu nedenle kurulum aşamasında Android SDK yolunu “C:\Android\SDK” şeklinde değiştirmenizi tavsiye ederim. Kurulumda, güncel Android SDK, Android SDK Command-line Tools. Android Studio ve Android SDK’nın çalışması için bilgisayarınızda Java Development Kit (JDK)’nın kurulu olması gerekmektedir. Bilgisayarınızda Java 8 veya üzeri bir sürümün kurulu olduğunu kontrol etmelisiniz. JDK’nın kurulu olduğu dizinin de Ortam Değişkenlerinden (Environment Variables)  adında bir kayıta yazılması gerekmektedir.

metin içeren bir resim

Açıklama otomatik olarak oluşturuldu

Android Studio kurulumu bittiğinde flutter doctor komutu ile “Android Toolchain” başlığının onaylanıp onaylanmadığını kontrol ediniz. Not: Bu denemeyi yapmadan önce Android Studio kurulumundan sonra oturumu yeniden başlatınız. Eğer “flutter doctor” komutunda Android Toolchain için onay göremezseniz;

komutunu “<directory>” kısmına Android Studio IDE’sini kurduğunuz yolu girerek çalıştırabilirsiniz. Not: Burada Android SDK’sı değil Android Studio IDE’si yolunu istemektedir.

Bazı ek özelliklerin çalışması ve Android bir cihaz ile denemeler yapmak için;

 Android cihazınızda yazdığınız kodları test etmek istiyorsanız cihazın geliştirici özelliklerini (Developer Options) açmanız burada USB hata ayıklama (USB Debugging) aktif hale getirmeniz gerekmektedir. Detaylı anlatım Android’in kendi dokümantasyonunda mevcuttur.

 Sadece Windows İşletim Sisteminde “Google USB Driver” kurulmalıdır.

 Android SDK’sını kurduğunuz yolu Ortam Değişkenlerinde “” anahtarı ile kaydediniz. Normalde Flutter Android Studio kurulumundaki tanımlı Android SDK yolunu kullanmaktadır.

Emülatörler farklı işletim sistemlerinde çalışacak kodların denenmesi için kullanılmaktadırlar. Flutter ile Android ve iOS işletim sistemlerine geliştirme yapacağımız için bu işletim sistemlerini bir emülatör aracılığı ile Windows, Linux veya MacOS işletim sistemleri altında çalıştırmalıyız. Android Studio kendi içerisinde bir Emülatör yönetim uygulaması (AVD Manager) ve farklı özelliklerde emülatör imaj dosyaları ile sunulmaktadır. Android Studio kurulumu sonrasında AVD Manager uygulamasını giriş ekranında sağ üst köşedeki üç nokta  menüsü altından veya IDE açıldığı zaman üst kısımdaki araç çubuğunda   simgesine tıklayarak açabilirsiniz.

metin içeren bir resim

Açıklama otomatik olarak oluşturuldu

AVD Manager içerisinde bir adet Android işletim sistemi imajı oluşturmamız yeterlidir. Her tür işleminizde kullanmanız için yeni sanal makine oluşturma adımlarındaki sihirbazın önerilerini takip edebilirsiniz. Aşağıda AVD Manager’a ait bir görsel ve oluşturulmuş iki farklı Android imajı bulunmaktadır. “+Create Virtual Device” butonuna tıklayarak yeni imaj oluşturma sihirbazını açabilirsiniz.

Eğer imajınızın Google Play Store üzerinden sunulan servisleri de simüle etmesini istiyorsanız Play Store ikonu bulunan imajlardan birini tercih ediniz. AVD kurulumu bilgisayarınızdaki sanallaştırmanın açılmasını (BIOS üzerinden) ve intel işlemcili makinelerde HAXM hızlandırıcısının kurulumunu isteyebilir. Google imaj dosyasının x86 işlemcisi olan sürümlerini tercih etmenizi önerir (Hız açısından). İstenilirse sanal cihaz imajı oluşturma ekranında ARM işlemcisini simüle eden imaj dosyası da İnternetten indirilerek kurulabilir. Kuracağınız imaj için en güncel işletim sistemi sürümünü ve deneme yapmak istediğiniz ekran özelliklerini seçerek imajınızı hızlıca oluşturabilirsiniz. Bir imaj dosyası türünü bir kere indirdikten sonra aynı tür birden çok sanal cihaz oluşturulabilir. Bunların her biri bilgisayarınızda ayrı ayrı tutulacaktır. Sanal cihazınız için tercihen 2GB RAM ayırmanız önerilir. Bu oran kendi bilgisayarınızdaki RAM’den alınacağı için sistem kaynaklarınıza göre emülatörün kullanacağı RAM miktarı azaltılabilir. 512MB ve aşağısında RAM değerlerinde emülatör veya uygulamanız çalışmayabilir. Emülatörü oluşturduktan sonra AVD Manager ekranındaki “Actions” bölümünden “play ” butonu ile çalıştırabilirsiniz. Emülatör açıldığında normal bir telefon görünümü ile açılacaktır.

metin, elektronik eşyalar, ekran, ekran görüntüsü içeren bir resim

Açıklama otomatik olarak oluşturuldu

Bu aşamada Android Studio kurulumu ve gerekli ayarlamaları tamamlamış bulunmaktayız. VS Code ile kodlama yapacağımız için Android Studio içerisinde ek bir işlem yapmamız gerekmemektedir. Eğer Android Studio içerisinden de Flutter projesi oluşturmak ve çalıştırmak istiyorsanız Android Studio için Flutter ve Dart eklentilerini kurmanız gerekir. Bunun için Android Studio giriş ekranından “Plugins” veya Android Studio proje perspektifindeyken üst menüden “File -> Settings -> Plugins” seçenekleri takip edilerek açılan eklenti (Plugin) yönetim sayfasından “Marketplace” sekmesine geçilir. Burada “Fluttter” ve “Dart” eklentilerinin Android Studio Plugin Marketplace üzerinden aratıp kurmanız gerekir.

metin içeren bir resim

Açıklama otomatik olarak oluşturuldu

Visual Studio Code ve Flutter Eklentilerinin Kurulumu

Visual Studio Code (VS Code), Microsoft firmasının hafif kod geliştirme IDE’si olarak tüm işletim sistemlerinde çalışabilecek şekilde sunduğu ve tamamen Plugin temelli bir geliştirme ortamıdır. Birçok farklı dilde uygulama geliştirilebilen VS Code içerisinde Flutter ile mobil uygulama geliştirmek de mümkündür.

metin, ekran görüntüsü, ekran, siyah içeren bir resim

Açıklama otomatik olarak oluşturuldu

Bunun için VS Code kurulumunu bilgisayarınıza yaptıktan sonra sol paneldeki   Extentions (Ctrl + Shift + X) butonuna tıklayarak eklenti yönetim ekranını açabilirsiniz. Burada eklenti havuzundan (Extention Marketplace); “Dart, Flutter, Vscode-icons” eklentilerini kurmamız gerekmektedir. Sonrasında VSCode ile Flutter projeleri yazmaya hazırız. Eklenti kurulumlarından sonra VSCode IDE’sini yeniden başlatınız. Android Studio’da yeni Flutter projesi oluşturmak için proje şablonu ikonu ve bir sihirbaz olmasına karşın VSCode içerisinde bu özellik bulunmamaktadır. VSCode içerisinde yeni Flutter projelerini Flutter’ın kendi komut desteği ile Terminal penceresi üzerinden yapacağız. VSCode, kendi içerisinde Terminal penceresi sunarak bu süreçleri tek ekranda yapmamıza olanak vermektedir.

Flutter Doctor ile Son Kontrol

Flutter kurulumlarını gerçeklediyseniz başta çalıştırdığımız “flutter doctor” komutu ile kurulumların başarılı şekilde tamamlanıp tamamlanmadığını kontrol ediniz.

metin içeren bir resim

Açıklama otomatik olarak oluşturuldu

Eğer yukarıdaki maddelerde onaylanmamış bir tane görüyorsanız bunla ilgili kurulumlar bilgisayarınızda eksik veya Flutter SDK’sı düzgün ayarlanmamış demektir. Tek tek maddeleri ele alacak olursak;

 Flutter (Channel dev, 2.5.0-6.0.pre, on Microsoft Windows [Version 10.0.19043.1165], locale tr-TR)

Kurulum yapılan bilgisayar ve kurulumun hangi Flutter dağılımı ile yapıldığını göstermektedir. Bu kurulumda Flutter Development Channel üzerinden 2.5.0 sürümünün son ön yüklemesinin Türkçe bir Windows 10 işletim sistemine yapıldığı (Flutter SDK’sının bu şekilde düzenlendiği) görülmektedir.

 Android toolchain – develop for Android devices (Android SDK version 30.0.2)

Android Studio ve Android SDK’sının bilgisayarda kurulu olduğu ve Flutter’ın hangi Android SDK’sını baz aldığını göstermektedir. Bir Android Studio kurulumunda birden fazla Android SDK sürümü kurulabilir. Aksi belirtilmedikçe Flutter en yüksek SDK ile çalışmak için kendini ayarlar. Burada da 30.0.2 Android SDK sürümünün kurulu bilgisayarda yüklü ve Flutter tarafından erişebilir olduğu görülmektedir.

 Chrome – develop for the web

Flutter ile sadece Mobil platformlara değil Web ve Masaüstü için de uygulama geliştirebileceğimizi söylemiştik. Bilgisayarınızda “Google Chrome” uygulaması kurulu olmasını bu açıdan kontrol etmektedir. Eğer Web üzerinden uygulamanızın çalışmasını test etmeyecekseniz bu opsiyonu doğrulamak zorunda değilsiniz.

 Visual Studio- develop for Windows (Visual Studio Enterprise 2019 16.10.4)

Kurulum yapılan makine bir Windows işletim sistemine sahip ise geliştireceğiniz uygulamaların masaüstü sürümünün Windows işletim sisteminde çalıştırılabilmesi gerekmektedir. Flutter, Windows işletim sisteminde çalışmak için Visual Studio C++ kütüphanelerini kullanmaktadır. Bu kütüphanelerin bilgisayarınızda düzgün şekilde yüklenmesinin en kolay yolu Visual Studio IDE’sini bilgisayarınıza C++ Masaüstü geliştirme desteği ile kurmaktır. Visual Studio ile Visual Studio Code birbirinden farklı iki ayrı geliştirme ortamıdır. “Visual Studio” Microsoft firmasının uygulama geliştirme için amiral gemisi konumundadır.  Community, Professional ve Enterprise olmak üzere üç farklı sürümle piyasaya sürülmektedir. Kurulum yapılan bilgisayarda Visual Studio Enterprise 2019 sürümü Flutter tarafından bulunmuştur. Eğer Windows işletim sisteminde çalışacak uygulamalar yapmak istiyorsanız (Dersimiz kapsamında emülatör çalıştırmaktan daha basit olduğu için çoğu örnekte tercih edilecektir.) Visual Studio İnternet sayfasından Community sürümünü ücretsiz olarak indirip kurabilirsiniz.

 Android Studio (version 2020.3)

Bilgisayarınızda Android Studio’nun kurulu ve ayarlarının uygun olduğunu gösterir.

 IntelliJ IDEA Community Edition (version 2021.1)

Bilgisayarınızda InterlliJ IDEA’nın (Android Studio ve VSCode haricinde kullanabileceğiniz diğer IDE) kurulu ve ayarlarının uygun olduğunu gösterir.

 Connected device (3 available)

Bilgisayarınızda Flutter uygulamanızı çalıştırabileceğiniz bağlı ortam sayısını göstermektedir. Kurduğunuz Flutter Channel’a göre burada (0 available) ibaresini görebilirsiniz. Bu yanlış bir işlem yaptınız manasına gelmemektedir. Eğer Stable Channel üzerinden kurulum yaparsanız varsayılan olarak sadece mobil platformlara uygulama geliştirirsiniz. Yani Flutter derleme işleminde sadece Android ve iOS işletim sistemleri için derlenmiş uygulama üretecektir. Bu durumda Android / iOS cihazı veya Emülatörü sisteme bağlı ve çalışır durumda değilse uygun bir cihaz bulunamadı (0 available) görünmektedir. Daha önceki başlıkta anlatıldığı şekilde Android Emülatörü çalıştırıp emülatör açıkken “flutter doctor” komutunu çalıştırdığınızda (1 available) ibaresini görmeniz gerekir. Örnek kurulumumuzda dikkat ederseniz Developer Channel’dan bir Flutter yüklemesi mevcuttur. Bu nedenle web (chrome), web (firefox) ve Windows olmak üzere 3 farklı çalıştırılabilir cihaz “flutter doctor” tarafından bulunmuştur.

Eğer kurulumunuzun web ve Windows desteklerini içermesini istiyorsanız aktif kanalı değiştirerek ve konfigürasyonunuzu düzelterek bu ortamları desteklemeyi sağlayabilirsiniz. Aşağıdaki linklerde bu kurulum adımları anlatılmaktadır;

Masaüstü Desteği Kurulumu:  https://flutter.dev/desktop

Web Desteği Kurulumu: https://flutter.dev/docs/get-started/web

Basitçe masaüstü desteğinin Windows altında açılması için aşağıdaki komutları terminalden girmeniz yeterlidir. (Not: Visual Studio Community Edition’ı C++ Masaüstü geliştirme desteği ile kurduğunuzu varsayıyoruz.)

VSCode ile İlk Projemizi Oluşturalım

Flutter doctor ile kontrolleri yaptığınızda gerekli yazılımların bilgisayarınızda olduğunu teyit ettikten sonra artık ilk Flutter projemizi oluşturabiliriz. Dediğimiz gibi VS Code ile çalışacağımız için Flutter ile ilgili birtakım işlemleri terminal üzerinden gerçekleştireceğiz. VS Code terminal ekranına alıştığınızda bunun proje oluşturma sihirbazlarını kullanmaktan daha pratik olduğunu göreceksiniz. Adım adım ilk projemizi oluşturalım ve VS Code ekranına aşina olalım.

Terminalden Proje Oluşturma

İşletim sistemlerinde Terminal (Windows jargonunda Konsol) işletim sistemine komut göndermek için kullanıldığımız arayüzdür. En eski işletim sistemlerinden günümüze gelen işletim sisteminin vaz geçilmez parçasıdır. İşletim sisteminin özü kernel(çekirdek) kullanıcıların etkileştiği kısmı da Shell(kabuk) olarak ifade edilmektedir. Terminal de kabuk kısmının ana elemanıdır. İşletim sistemi üzerinde doğrudan yazılım geliştirme sürecine bu nedenle Kabuk Programlama (ShellScripting) adı takılmıştır. Biz de Flutter komutlarını kabuk üzerinden (Terminal vasıtasıyla) çağıracağız. Hatta bunu yapabilmek için kurulum adımında Flutter kurduğumuz klasörü işletim sistemi Path tanımlamasına kaydettik.

Öncelikle Terminal ekranını açmak için farklı seçeneklerden bahsedelim. Windows işletim sisteminde üç farklı şekilde terminal(konsol) kullanılabilir.

 Komut İstemi (Command Prompt): Win+R ile açılan çalıştır ekranına “cmd” yazarak komut istemi açılabilir.

 PowerShell: Win+R ile açılan çalıştır ekranına “powershell” yazarak veya Başlat’ta PowerShell ifadesini aratarak PoweShell uygulaması açılabilir. Power Shell artık GitHub üzerinden açık kaynak bir uygulama olarak geliştirilmektedir. Tüm işletim sistemlerinde kullanılabilir. Klasik terminal ekranlarına göre daha konforlu bir çalışma ortamı sunmaktadır. Ders içerisindeki ekran görüntüleri de genelde “PowerShell 7” üzerinden alınmıştır.

 VSCode IDE’si İçerisinden: VSCode ile uygulama geliştirirken terminal erişimini daha çok IDE içerisindeki Terminal penceresinde gerçekleştireceğiz. Bunun için VS Code içerisinde alt bölmedeki Terminal sekmesine geçmeniz gerekmektedir. Eğer Terminal sekmesi görünmüyorsa üst menüden View -> Terminal veya  kısayol tuş kombinasyonu ile açabilirsiniz. VS Code kendi terminal penceresinde PowerShell kullanmaktadır.

Flutter projesini oluşturmak istediğimiz dizini terminal ekranında aktif dizin haline getirmeliyiz. Örneğin Projelerimizi C:\Works\Flutter dizini altında oluşturmak istiyorsak terminal ekranında bu dizini aktif dizin yapmamız gerekir.

metin içeren bir resim

Açıklama otomatik olarak oluşturuldu

Flutter projesi oluşturmak için basitçe create komutunu kullanabiliriz.

Terminal üzerinden yeni proje oluştururken ek özellikleri de tanımlanabilir. Bunun için Flutter sayfasından detaylı komut kümesine bakılabilir. Bizim için varsayılan ayarlarla bir proje oluşturmak şimdilik yeterlidir. Daha detaylı bir proje oluşturma örneği olarak aşağıdaki örnek incelenebilir. Burada Android ve iOS tarafında kullanılacak native dillerin bilgileri verilmiştir.

Proje oluşturmak için diğer alternatiflere https://flutter.dev/docs/get-started/test-drive sayfasından bakabilirsiniz.

Bölüm Özeti

Bu bölüm mobil platformlar, mobil programlama dilleri, tür açısından mobil programlama dünyası ve bu konu ile ilgili basit bir tarihçe sunulmuştur. Mobil programlama özünde Web ve Masaüstü programlamaya benzese de bazı farklılıklar içermektedir ve günümüzde çok hızla gelişen bir alan haline gelmiştir. Hızlı değişimle beraber yazılım geliştirme süreci dallanmış ve maliyeti artmıştır. Bu durum cross-platform yazılım geliştirme ihtiyacını doğurmuştur. Flutter, Google firmasının desteklediği Dart programlama dilini temel alan açık kaynak, cross-platform bir uygulama geliştirme çerçevesi (framework) olarak karşımıza çıkmaktadır. Google Flutter için kurulum ve diğer içerikleri flutter.dev İnternet adresi üzerinden sağlamaktadır. Flutter ile uygulama geliştirmek için öncelikle bilgisayarımızın buna hazır hale getirilmesi gerekmektedir. Bunun için Flutter SDK, JDK, Android Studio, Android SDK, Visual Studio Code ve IDElere ait Flutter ve Dart eklentilerinin kurulumları yapılmalıdır. Ayrıca masaüstünde veya web için çalışan Flutter uygulamaları geliştirmek için ek kurulumlar gerekmektedir.

Kaynakça

https://flutter.dev/

https://developer.ibm.com/articles/choosing-the-best-programming-language-for-mobile-app-development/

https://www.statista.com/statistics/272698/global-market-share-held-by-mobile-operating-systems-since-2009/


Ünite Soruları

Soru-1 :

Hangi donanım bileşeni akıllı telefonlarla masaüstü bilgisayarlar arasında asıl farklılık oluşturan unsurdur?

(Çoktan Seçmeli)

(•) – Merkezi İşlem Birimi (CPU)

(•) – Rasgele Erişimli Hafıza (RAM)

(•) – Sabit Hafıza (ROM)

(•) – Giriş-Çıkış Cihazları (I/O)

(•) – Grafik İşlemci

Cevap-1 :

Giriş-Çıkış Cihazları (I/O)


Soru-2 :

yılında piyasadaki mobil işletim sistemlerinden hangisinin yaygınlığı daha fazladır?

(Çoktan Seçmeli)

(•) – Android

(•) – iOS

(•) – Symbian OS

(•) – Windows Phone

(•) – Harmony OS

Cevap-2 :

Android


Soru-3 :

Mobil uygulama geliştirmek istediğimizde hangi iki işletim sistemini hedef alan bir yaklaşımımız olmalıdır?

(Çoktan Seçmeli)

(•) – Ubuntu – Windows7

(•) – Android – iOS

(•) – Android – Symbian OS

(•) – Windows10 – iOS

(•) – MacOS – iOS

Cevap-3 :

Android – iOS


Soru-4 :

Aşağıdan hangisi yaygın mobil programlama türlerinden biridir?

(Çoktan Seçmeli)

(•) – Fonksiyonel (functional)

(•) – Veritabanı (database)

(•) – Çoklu Platformlu (cross-platform)

(•) – Veri Akış (dataflow)

(•) – Paralel (parallel)

Cevap-4 :

Çoklu Platformlu (cross-platform)


Soru-5 :

Android işlemtim sisteminde doğrudan Linux çekirdeği üzerinde C++ ile yazılmış kodlama yapabilmek için aşağıdakilerden hangisine ihtiyaç vardır?

(Çoktan Seçmeli)

(•) – AVD

(•) – HAXM

(•) – JVM

(•) – Kotlin

(•) – NDK

Cevap-5 :

NDK


Soru-6 :

Aşağıdakilerden hangisi Android işletim sisteminin doğal (native) kodlama için kullanıdığı dillerden biridir?

(Çoktan Seçmeli)

(•) – Objective-C

(•) – Swift

(•) – C#

(•) – Java

(•) – Python

Cevap-6 :

Java


Soru-7 :

Aşağıdakilerden hangisi çoklu platform(cross-platform) bir mobil programlama çerçevesidir (Framework)?

(Çoktan Seçmeli)

(•) – Kotlin

(•) – Xamarin

(•) – Java

(•) – C#

(•) – Hibernate

Cevap-7 :

Xamarin


Soru-8 :

Flutter’ın arayüz çizimi için kullandığı grafik motoru hangisidir?

(Çoktan Seçmeli)

(•) – Dart

(•) – DirectX

(•) – Skia

(•) – CryEngine

(•) – GTK

Cevap-8 :

Skia


Soru-9 :

Aşağıdakilerden hangisi Flutter hakkında dokümantasyonların yer aldığı resmi İnternet sayfasının adresidir?

(Çoktan Seçmeli)

(•) – flutter.dev

(•) – pub.dev

(•) – dartpad.dev

(•) – github.io

(•) – developer.android.com

Cevap-9 :

flutter.dev


Comments