Yapay zekadan makale özeti
- Kısa
- Ayrıntılı
- Bu video, Flutter geliştiricileri arasında geçen teknik bir sohbet ve röportaj formatındadır. Katılımcılar arasında Mehmet, Kadir (Bacı Classis'te çalışan ve Google Developer Expert), Cihat, Sami Demir ve Arda bulunmaktadır.
- Video, Flutter uygulama geliştirme sürecinde karşılaşılan teknik konuları ele almaktadır. State management teknikleri (Provider, MobX, GetX), widget yaşam döngüsü, singleton tasarım deseni, event loop, lazy loading, veri taşıma yöntemleri ve performans optimizasyonu gibi konular detaylı bir şekilde tartışılmaktadır. Ayrıca, uygulama başlatma süreçleri, splash screen yönetimi ve sayfa geçişleri gibi pratik konular da ele alınmaktadır.
- Katılımcılar arasında kariyer hikayeleri de paylaşılmakta, özellikle Flutter ve Dart programlama dilleri hakkında teknik bilgiler ve deneyimler aktarılmaktadır. Video, kod örnekleri üzerinden konuların açıklanması ve soru-cevap şeklinde ilerlemektedir.
- 00:09Giriş ve Tanışma
- Kanal sahibi ilk içeriklerini paylaşmak için heyecanlı olduğunu belirtiyor.
- Mehmet, Kocaeli Üniversitesi'nde son sınıf öğrencisi olarak mezuniyetine yaklaşıyor ve bilgisayar mühendisliği programında eğitim alıyor.
- Mehmet'in kariyeri mobil programlama alanında başladı ve 2020 yılında Türkiye'de bir firma ile çalışmaya başladı.
- 01:41İş Deneyimi ve Projeler
- Mehmet, 2020 Temmuz'undan beri yaklaşık bir buçuk iki yıla yakın bir süre boyunca bir firma için çalışmakta ve iki farklı uygulama geliştirmekte.
- Birinci uygulama CV oluşturma ve düzenleme özelliğine sahipken, ikinci uygulama kullanıcıların seçtiği yetenekler ve bilgilerle web sitesi oluşturmalarını sağlıyor.
- Mehmet yaklaşık bir yıl sonra farklı bir teknoloji olan Swift'e yönelmiş ve yaklaşık yedi aydır Swift ile çalışmakta.
- 03:29Başarılar ve Projeler
- Mehmet, yaklaşık iki hafta önce bir fotoğraf düzenleme projesine katılmış ve ekibiyle birlikte mobil uygulama geliştirmiş.
- Projenin sonucunda takımının 35 takımdan biri olarak birinci olma başarısı elde etmiş.
- Kanal sahibi, Mehmet'in henüz mezun olmamış olmasına rağmen yaptığı başarılı projeleri övüyor.
- 05:02Kanal Sahibi ve Arkadaşları
- Kanal sahibi, Bacı Classis'te çalıştığını ve mobilya uygulaması geliştirdiğini belirtiyor.
- Kadir, Bacı Classis'te çalıştığını ve Klasik uygulamasını sıfırdan yazmaya çalıştıklarını söylüyor.
- Mehmet, kanal sahibinin videolarını yaklaşık bir senedir takip ettiğini ve provada kaldığını belirtiyor.
- 06:17Flutter ve State Management
- Kanal sahibi, Flutter'da state management olmadan uygulama geliştirilip geliştirilemeyeceğini sorguluyor.
- Mehmet, state management'ın Flutter için olmazsa olmaz bir nokta olduğunu ve farklı alternatifler olduğunu belirtiyor.
- Mehmet, uygulamalarında tutarlılık sağlamak ve yeni gelen insanlar için kodları kolayca anlatabilmek için state management kullanmanın avantajlarını vurguluyor.
- 08:37State Life Cycle
- Kanal sahibi, stateful widget içinde state değişikliği yaparken hata alındığını sorguluyor.
- Mehmet, bu hatanın sebebinin sayfanın halihazırda çizilmiş olması ve yeni state değişikliğinin çalışması gerektiğinden kaynaklandığını açıklıyor.
- Hata çözümü olarak post-frame ve microtask kullanılabilmesi öneriliyor.
- 10:22Flutter Teknik Özellikler
- Proxy provider, farklı kontekstler arasında veri paylaşımı sağlayarak runtime performans kazandırır.
- Lazy loading, sadece çağrıldığında çalışarak bellek kullanımını optimize eder.
- ListView ve ListBuilder arasındaki temel fark, ListView'in statik veri gerektirdiği halde ListBuilder'in dinamik veri sağladığıdır.
- 13:22Flutter Uygulama Tasarımı
- Lazy loading, sayfaların yüklenmesini optimize ederek performansı artırır.
- Tema değişiklikleri için Theme komponenti kullanılmalıdır.
- Tekrar eden tasarım öğeleri için komponentler oluşturulmalıdır.
- 20:38Kullanıcı Tanıtımı
- Cihat Karabağ, 22 yaşında Fırat Üniversitesi Yazılım Mühendisliği 3. sınıf öğrencisidir.
- Son iki senedir Flutter ile çalışmaktadır.
- Sektöre iki senedir profesyonel işler yapmakta ve şu anda aktif olarak full time çalışmaktadır.
- 21:28Mobile Geliştiricilerin Tanıtımı
- Kadir, Klas Şirketi'nde mobil uygulama girişi olarak çalışmakta ve CLAS uygulamasını sıfırdan geliştirmektedir.
- Mehmet, mobile developer olarak çalışmakta ve çözüm odaklı bir yaklaşım benimsemektedir.
- Cihat, mobile developer olarak çalışmakta ve projelerde MobX ve GetX gibi state management teknolojilerini kullanmaktadır.
- 22:36State Management Tartışması
- Flutter uygulamalarında paket kullanmadan state management yapılabilir, özellikle liste ve vanilya state management yöntemleri kullanılabilir.
- Flutter'ın varsayılan state yönetim yöntemi karmaşık projelerde yetersiz kalabilir, bu nedenle performans için sadece gerekli widgetları yeniden build etmek önemlidir.
- Performans için statik yerlere observable değerler yerleştirilmemeli, sadece gerekli widgetları sarmalayarak hafıza kaybı yaşanmamalıdır.
- 26:12Singleton Kullanımı
- GetX'te en dikkat çeken konu, singleton yapıların sık sık kullanılmasıdır.
- Singleton, hafızayı çok kullanmamak için kullanılan bir yöntemdir; statik bir değişken oluşturup uygulamanın başlangıcında hafızaya yüklenmesi ve gerekli yerlerde referans olarak kullanılması amaçlanır.
- Singleton, sürekli nesne oluşturmak yerine tek bir yerde oluşturup çağırmak için kullanılır.
- 27:34Singleton Yapısı ve Flutter'da Nesne Oluşturma
- Singleton yapısı, bir sınıftan sadece bir nesne oluşturulmasını sağlar ve bunun için constructor'ı private yaparak ve statik bir değişken kullanarak referansı tutar.
- Flutter'da tüm sınıflar ortak özellikler içerir çünkü en üstte bir abstract sınıf vardır ve diğer sınıflar ondan türemiştir.
- Flutter'da widget'lar olmadan çalışmayan kodlar için future, async gibi yöntemler kullanılabilir.
- 29:55Performans ve Memory Optimizasyonu
- Bir sayfanın bir kez çizildikten sonra tekrar çizilmemesi için lazy yapılar kullanılabilir.
- Memory'de siteye almak için statik bir liste oluşturulabilir ve referans kaybolması engellenebilir.
- Otomatik mix gibi bir mixin kullanılarak state widget'ı tutulabilir ve sayfada statik veriler gözden kaçırılmaz.
- 31:04Genel Programlama Konuları
- Facebook autication gibi özel işler için buton oluşturulurken, stateful veya stateless widget oluşturulabilir veya mevcut buton sınıfları extend edilebilir.
- Callback fonksiyonlarda future objesi döndürülebilir.
- Genelikle araba örneği verilen jenerik türler, farklı modeller için tek bir dropdown komponenti oluşturmayı sağlar.
- 34:03State Widget Life Cycle ve Event Loop
- State widget life cycle'de update widget, veri değişikliklerinde sayfayı güncellemek için kullanılabilir.
- Update widget, eski ve yeni veriyi karşılaştırarak sayfada değişiklik yapabilir.
- Event loop yapısı, main thread'de hangi işlemin öncelikli olduğu ve future objelerinin ne zaman çalıştığı gibi konuları içerir.
- 38:52Event Loop Kavramı
- Event loop, ana thread üzerinde işlemlerin sırayla çalışmasını sağlayan bir mekanizmadır.
- Önce ana işlemler tamamlanır, ardından diğer işlemlere geçilir.
- Senkron programlama yerine event loop kullanıldığında, işlemler sırayla tamamlanır ve bir sonraki işlem bitmeden devam etmez.
- 40:42Flutter'da State Management
- Flutter'da bir internet isteği atarken, metodun tekrar tekrar tetiklenmemesi için state management çözümleri kullanılabilir.
- State management için Rx, Provider veya Stream gibi teknolojiler kullanılabilir.
- Bir kere tetiklenmesi istenen işlemler için useEffect gibi widgetlar kullanılabilir.
- 44:47Panel Üyelerinin Tanıtımı
- Üç panel üyesi, Samil Demir ile birlikte panelde yer almaktadır.
- Samil Demir, Sivas'ta yaşayan ve üniversite okuyan bir Flutter geliştiricisidir.
- 2020'nin Ocak ayında Kotlin ile yazılım öğrenmeye başlamış ve 6 ay sonra Teknopark'te junior Android developer olarak çalışmaya başlamıştır.
- 46:23Flutter Deneyimi
- Şirkette hem iOS hem Android geliştirmesi için Flutter tercih edilmiştir.
- İlk Flutter projesi olan anasayfa tasarımı üç saatte tamamlanmıştır.
- Sağlık alanında e-ticaret uygulamalar geliştirmiş ve Flutter Festivali'nde derece almıştır.
- 49:56Flutter Proje Başlatma ve Performans
- Flutter projesi başlatıldığında genellikle main fonksiyonunda başlar ve rap öncesinde bazen Firebase initial gibi işlemler yapılabilir.
- RAP öncesinde yazılan kodlar native taraftaki splash screen'i uzatır ve bu performans sorunu yaratabilir.
- Performans için kodları splash sayfasında yapmak daha mantıklı olur çünkü loading bar müşteriyi oyalamak için tasarlanmıştır.
- 51:47Proje Geliştirme Yaklaşımları
- Tasarım geliştirirken kullanıcıyı yormadan oyalayacak bir loading animasyonu kullanılması daha iyi olabilir.
- Sayfaları kodlarken tasarım ile ayırarak, loader ve veri çekme işlemleri için sabit bir yapı oluşturulabilir.
- Zorunlu güncelleme durumunda kullanıcı ileri gidemez, isteğe bağlı güncelleme için "sonra" seçeneği sunulabilir.
- 54:10State Management ve Veri Taşıma
- Observer kullanırken sadece değişen verilere odaklanmak daha etkili olur, her veri geldiğinde tüm state'i yenilemek yerine sadece gerekli alanları yenilemek daha verimlidir.
- Sayfalar arasında veri taşımak için constructor içinde isimlendirilmiş parametreler kullanılabilir veya navigator servis oluşturulabilir.
- Navigator servis kullanarak kolay okunurluk sağlanabilir ve her seferinde navigator yazmaktan kurtulunabilir.
- 56:38Atomik Tasarım ve Tekrar Kullanılabilirlik
- Login sayfasında tekrar tekrar kullanılacak alanlar için atomik tasarım yaklaşımı kullanılabilir.
- Password textfield'ında göz simgesi gibi tekrar tekrar kullanılacak özellikler için ayrı bir class oluşturulabilir.
- Uygulama içinde farklı kullanımlar için ayrı class'lar oluşturulabilir (örneğin login textfield, custom textfield).
- 58:33Stil Yönetimi ve Buton Tasarımı
- TextField'ın style'ları ve decoration'ları uygulama genelinde kullanıldığı için main temada yönetilmelidir.
- Butonlar için ayrı bir class oluşturulabilir ve içinde loading durumunu yöneten metodlar bulunabilir.
- Buton içinde loading durumunda tıklama engellenir ve servisten gelen değişiklikler için state management teknikleri kullanılabilir.
- 1:01:55Model ve Servis Verileri İşleme
- Model tarafında servisten gelen verileri işlemek için JSON formatı kullanılıyor.
- Model güncelleme işlemlerinde, modelin içinde metotlar tanımlanarak (örneğin "increment") verilerin güncellenmesi daha profesyonel bir yaklaşımdır.
- Sepet işlemleri gibi senaryolarda da benzer yaklaşım kullanılabilir.
- 1:04:49Şerit Kullanımı ve Güvenlik
- Şerit (SharedPreferences) kullanımı sırasında verilerin şifrelenmesi önemlidir çünkü veriler kolayca okunabilir.
- Android'te şerit verileri 128 API seviyesinden itibaren erişilebilir, bu nedenle güvenlik açısından dikkatli olunmalıdır.
- Şerit verilerini korumak için şifreleme ve singleton pattern gibi yaklaşımlar kullanılabilir.
- 1:06:31Sayfa Geçişi Hatası Çözümü
- Sayfa geçişi sırasında çalışan işlemler için "mounted" kontrolü yapılabilir.
- Bir widget eklendiğinde "mounted" değeri true olur, silindiğinde false olur.
- İşlem tamamlanmadan sayfa değiştirildiğinde, "if (mounted)" kontrolü ile işlemi durdurabilirsiniz.
- 1:09:34Sohbetin Sonu ve Gelecek Planları
- Katılımcılar birbirlerine teşekkür ediyor ve işbirliği için referans olacak bir ekran görüntüsü alınıyor.
- Bir katılımcı YouTube kanalında içerik paylaşmayı planladığını belirtiyor.
- Diğer katılımcı, emek ve paylaşımın önemini vurgulayarak destek sözü veriyor.