Flutter 3.19 ve Dart Programlama Dili 3.3 Güncellemesi

Ömer Dincer
9 min readFeb 16, 2024

--

Flutter 3.19'un sunmuş olduğu bir dizi özellikle, benim de kendi projemde (OmrApp), ilk çıktığı beta sürümden beri kullandığım ve özelliklerini keşfetmeye çalıştığım, Gemini AI için yeni bir Dart SDK, daha ince ayarlı widget animasyonları, Impeller güncellemeleri ve Windows Arm64 desteği gibi özellikler, uygulama geliştirme deneyimini daha da zenginleştiriyor. Flutter 3.19, uygulama geliştirmenin standartlarını yeniden belirliyor ve bu heyecan verici güncellemelerle birlikte sektörde yeni bir dönemin başlangıcını müjdeliyor. Bu yeniliklerin yanı sıra, Dart 3.3'ün getirdiği yeniliklerle de performans ve cross platform geliştirme alanında önemli bir adım atılıyor. Extention türleri sayesinde performans optimizasyonu ve yerel kodla etkileşimde devrim niteliğinde yenilikler sağlanırken, JavaScript entegrasyon modelindeki yenilikler de web platformunun gücünden daha etkin bir şekilde yararlanmayı mümkün kılıyor. Ayrıca, Dart uygulamalarında da Google yapay zekası (Gemini AI) desteği artık bir gerçek haline geliyor.

Flutter 3.19

Flutter 3.19 Güncellemesi

AI Entegrasyonu

Google’ın en son yapay zeka modelleri ailesi olan Gemini tarafından desteklenen üretken yapay zeka özelliklerini Dart veya Flutter uygulamanıza entegre etmenizi sağlar.

pub.dev’de bulunan google_generative_ai paketini kullanarak, ve tabii ki dökümantasyonu da inceleyerek Google AI Dart SDK ile uygulama geliştirebilirsiniz. Daha fazla bilgi almak için bu blog yazısını inceleyebilir veya doğrudan Dart hızlı başlangıç ​​yapabilirsiniz.

Framework

Kaydırma İyileştirmeleri

Flutter, iki parmağınızı sürüklediğinizde iki kat daha hızlı kaydırma yapıyordu. Artık parmak sayısından bağımsız kaydırma davranışı elde etmek için MultiTouchDragStrategy.latestPointer ile varsayılan ScrollBehavior’u yapılandırabilirsiniz. Bu değişiklik hakkında daha fazla bilgi için migration kılavuzuna bakın.

Bunun yanı sıra, SingleChildScrollView ve ReorderableList için bildirilen birçok hata çözüldü.

İki boyutlu kaydırma içinde, her iki yönde de bir kaydırma sürerken sürüklediğinizde veya dokunduğunuzda, kaydırma etkinliği beklenildiği gibi durur hale getirildi.

two_dimensional_scrollables paketindeki TableView widget’ı da son sürümden bu yana güncellenerek daha fazla güçlendirilmiş, birleştirilmiş hücreler için destek eklenmiş ve 3.16'nın son kararlı sürümünden sonra 2D temelinin yeni özelliklerinden daha fazlası benimsenmiştir

Animasyon Stili

Flutter’a MaterialApp, ExpansionTile ve PopupMenuButton gibi bileşenlerde varsayılan animasyon davranışını geçersiz kılan yeni bir AnimationStyle bileşeni eklendi. Bu, geliştiricilere animasyon eğrilerini ve sürelerini geçersiz kılmalarını sağlıyor.

SegmentedButton.styleFrom

Diğer düğme türlerinde olduğu gibi bir styleFrom statik yardımcı yöntemi eklendi. Bu yöntem, hızlı bir şekilde bir SegmentedButton’ın ButtonStyle’ını oluşturmanıza olanak tanıyor ve diğer segmentli düğmelerle paylaşılabilir veya uygulamanın SegmentedButtonTheme’ini yapılandırmak için kullanabilirsiniz.

Adaptive Switch

Bu adaptif bileşen, macOS ve iOS’ta yerel bir görünüm ve his sunar ve diğer yerlerde Material Design görünüm ve hissine sahiptir. Cupertino kitaplığına bağlı değildir, bu yüzden tüm platformlarda tamamen aynıdır. Adaptif switch pull isteğine ve Switch.adaptive oluşturucu API sayfasındaki canlı örneğe bakabilirsiniz.

SemanticsProperties erişilebilirlik tanımlayıcısı

SemanticsProperties’deki yeni bir erişilebilirlik tanımlayıcısı, yerel erişilebilirlik hiyerarşisinde bir semantik düğüm için bir tanımlayıcı sağlar. Android’de, bu erişilebilirlik hiyerarşisinde kaynak kimliği olarak görünür. iOS’ta, bu UIAccessibilityElement.accessibilityIdentifier olarak ayarlanır.

Metin widget’ı durumuna daha fazla erişim

TextField ve TextFormField’da bir MaterialStatesController desteği eklendi, böylece MateryalStates değişikliklerini dinleyebilirsiniz.

UndoHistory yığını

Japonca klavyelerde geri al/yinele geçmişinin kaybolmasına neden olan bir sorun çözüldü. Artık bir girişi UndoHistory yığınına itilmeden önce değiştirebilirsiniz.

Engine (Motor)

API İyileştirmeleri
Karakter Bilgileri:
Bu sürüm, dart:ui’nin Paragraf nesnesindeki iki yeni yöntemi içerir: getClosestGlyphInfoForOffset ve getGlyphInfoAt, her biri yeni bir tür olan GlyphInfo nesnesini döndürür. Yeni GlyphInfo türü hakkındaki belgelere göz atın.

GPU izleme: Impeller’da Metal (iOS, macOS, Simülatör) ve Vulkan özellikli Android cihazlarda, Flutter motoru artık hata ayıklama ve profil yapılarında her kare için zamanlanan GPU sürelerini zaman çizelgesinde raporlar. GPU kare zamanlaması, DevTools altında “GPUTracer” başlığı altında incelenebilir.

! Dikkat
Lütfen Vulkan olmayan Android cihazların GPU zamanlamasını sorgulama desteklerini yanlış bildirebileceğinden, Impeller’ın GPU izlemesinin yalnızca bu cihazlarda AndroidManifest.xml dosyasında ayarlanan bir bayrakla etkinleştirilebileceğini unutmayın.

<meta-data
android:name="io.flutter.embedding.android.EnableOpenGLGPUTracing"
android:value="true" />

Performans Optimizasyonları

Özelleştirme sabitleri: Flutter ekibi, Impeller’a özelleştirme sabitleri desteği ekledi. Bu özelliği Impeller’ın gölgelerinde kullanmak, Flutter motorunun sıkıştırılmamış ikili boyutunu neredeyse 350KB azalttı.

Arka plan filtresi hızlanmaları: Daha çok iş yapılması gerekiyor, ancak bu sürümde, Impeller’da arka plan filtreleri ve bulanıklıklar için birkaç güzel performans iyileştirmesi bulunuyor. Impeller’ın ekrandan okuma yeteneğini yanlışlıkla istediğini fark edildi. Bu yeteneğin kaldırılması, karmaşıklığa bağlı olarak benchmarklarımızda çoklu arka plan filtresi içeren sahnelerin performansını %20 ila %70 arasında iyileştirdi.

Ayrıca, Impeller artık her arka plan filtresinde stencil önbelleğini koşulsuz olarak saklamıyor. Bunun yerine, herhangi bir klipten etkilenen işlemler kaydedilir ve arka plan filtresi için kaydedilen katmanı geri yüklerken yeni bir stencil önbelleğe yeniden çalınır.

Bu değişiklikle, Pixel 7 Pro’da Impeller’ın Vulkan arka planı ile çalışan animasyonlu gelişmiş karışım modlarının benchmark’ı, ortalama GPU kare sürelerini 55ms’den 16ms’ye ve raster iş parçacığı CPU sürelerini yaklaşık 110ms’den 22ms’ye düştü.

Android

Deeplinking web validator (Derin Bağlantı Web Doğrulayıcı)
Bu erken sürümde, Flutter derin bağlantı doğrulayıcısı Android’de web kontrolünü destekliyor, yani assetlinks.json dosyanızın yapılandırmasını doğruluyor. DevTools’u açabilir, Deep Links sekmesine tıklayabilir ve derin bağlantılar içeren bir Flutter projesini içe aktarabilirsiniz. Derin bağlantı doğrulayıcısı web dosyanızın doğru bir şekilde yapılandırılıp yapılandırılmadığını size bildirir. Daha fazla bilgi için Deep Links doğrulama aracı test talimatlarına başvurabilirsiniz.

Share.invoke Desteği
Metin alanları ve görünümlerindeki varsayılan Paylaş düğmesi önceden Android’de bulunmuyordu, ancak tüm varsayılan bağlam menüsü düğmelerinin her platformda mevcut olması adına bu sürüme eklendi. Bu devam eden çalışmayı buradan takip edebilirsiniz.

Native assets (Yerel varlıklar) özelliği
Flutter kodunuzda diğer dillerden fonksiyonlarla etkileşim konusunda ilgileniyorsanız, devam eden projenin bir parçası olarak Android’de Yerel varlıklar aracılığıyla FFI çağrıları yapabilirsiniz.

Doku Katmanı Hibrit Kompozisyon (TLHC) modu
Flutter 3.19, artık Google Haritalar ve metin girişi büyütücüsünün TLHC modunda çalışmasını sağlayan bir çalışmayı içeriyor, bu da uygulamalarınız için daha iyi performans anlamına geliyor.

Bu çalışma, Çerçeve veya Motor altında yapılan taahhütleri içermez, ancak bu çalışmayı ve TLHC’yi test etme adımlarını görebilirsiniz.

Özel sistem genelinde metin seçimi araç çubuğu düğmeleri
Android uygulamaları, tüm metin seçim menülerinde (metne uzun basıldığında görünen menü) görünen özel metin seçimi menü öğeleri ekleyebilir. Flutter’ın TextField seçim menüsü artık bu öğeleri içeriyor.

iOS

Flutter iOS yerel fontlar
Flutter metni artık iOS’ta biraz daha sıkışık ve biraz daha yerel görünüyor. Apple tasarım yönergelerine göre, iOS’ta küçük fontlar mobil cihazlarda daha kolay okunması için daha yayılmalıdır, büyük fontlar ise daha az yer kaplamak için daha sıkışık olmalıdır. Daha önce, tüm durumlarda yanlış olarak, daha yayılmış küçük fontu kullanıyordu. Artık varsayılan olarak Flutter, daha büyük metinler için sıkışık fontu kullanacak.

DevTools

DevTools Güncellemeleri
Bu sürümle ilgili DevTools’taki bazı önemli noktalar şunlardır:

  • Android’de derin bağlantı kurulumunu doğrulamak için DevTools’da yeni bir özellik ve ekran eklendi.
  • Enhance Tracing menüsüne, platform kanalı etkinliğini izleme seçeneği eklendi. Bu, eklentilere sahip uygulamalar için faydalıdır.
  • Performans ve CPU profilleyici ekranları artık bağlı bir uygulama olmadığında da kullanılabilir durumda. Daha önce DevTools’tan kaydedilmiş performans verileri veya CPU profilleri, bu ekranlardan görüntülemek için yeniden yüklenebilir.
  • VS Code’daki Flutter Yan Çubuğu, mevcut projede etkinleştirilmemişse yeni platformları etkinleştirme yeteneğine sahiptir ve yan çubuktaki DevTools menüsünde, DevTools’u harici bir tarayıcı penceresinde açma seçeneği bulunmaktadır.

Daha fazla bilgi almak için DevTools, 2.29.0, 2.30.0 ve 2.31.0 sürüm notlarına göz atabilirsiniz.

Desktop

Windows Arm64 desteği
Flutter, Windows’ta Art64 mimarisi için ilk desteği benimsemeye başlıyor, bu destek, Windows Arm64 cihazlarında doğal olarak çalışan daha verimli ve performanslı Flutter uygulamaları için yol açıyor. Henüz geliştirme aşamasında olmasına rağmen, GitHub issue #62597'de takip edilebilecek ilerleme gösteriyor. Bu hareket, uygulamalarını Windows cihazlarının daha geniş bir yelpazesine optimize etmeyi hedefleyen Flutter geliştiricileri için umut verici bir gelişmeyi temsil ediyor.

Ekosistem

Gerekli gizlilik manifestosu
Flutter artık önümüzdeki Apple gereksinimlerini karşılamak için iOS’ta bir gizlilik manifestosu içeriyor.

Flutter ve Dart paket ekosisteminin ilerlemesi
Eğer kaçırdıysanız, Flutter ve Dart paket ekosisteminin ilerlemesi hakkındaki Ocak ayı blog yazısına göz atın.

Kullanımdan kaldırmalar ve son değişiklikler

Windows 7 ve 8 desteğinin sonlandırılması
Flutter geliştikçe, Dart 3.3 ve Flutter 3.19 sürümleriyle Windows 7 ve 8 desteğini sonlandırarak en son teknolojilere odaklanmayı hedefliyor. Bu değişim, Microsoft’un stratejisiyle uyumlu olarak, Flutter’ı modern işletim sistemlerinde geliştirmemizi sağlar. Bu adım, desteklenen Windows sürümlerinde daha güvenli, verimli ve özelliklerle dolu bir geliştirme ortamının kapısını aralar.

Impeller dithering bayrağı
3.16 stabil sürümü için yayınlanan sürüm notlarına göre, global bayrak Paint.enableDithering kaldırılmıştır. Tam detaylar için web sitesindeki son değişiklik duyurusuna bakın.

iOS 11'in kullanım dışı bırakılması
Bazı ağ API’leri çağrıldığında çalışma zamanı çökmesi nedeniyle Flutter artık iOS 11'i desteklemiyor. Bu, Flutter 3.16.6 ve sonrasına karşı derlenen uygulamaların bu cihazlarda çalışmayacağı anlamına gelir.

Otomatik render modunun kullanım dışı bırakılması
Bu sürümdeki son değişiklikler, v3.16 sürümünün yayınlanmasından sonra süresi dolmuş API’leri içerir. Etkilenen tüm API’leri, ek kontekst ve göç rehberliği ile birlikte görmek için bu sürümün kullanım dışı bırakma kılavuzuna bakın. Bu kullanım dışı bırakmaların birçoğu Flutter fix tarafından desteklenmektedir, IDE’deki hızlı düzeltmeler de dahil olmak üzere. Toplu düzeltmeler, dart fix komut satırı aracıyla değerlendirilebilir ve uygulanabilir.

Dart Programlama Dili 3.3 Güncellemesi

Yeni Tanıtılan Extension Types

Extension türleri, türler için sıfır maliyetli sarmalayıcılar sunar. Performansa duyarlı kodu optimize etmek için özellikle ana bilgisayar platformlarıyla etkileşimde bulunurken bunları kullanabilirsiniz. Uzantı türleri, belirli üyelere sahip özel türlerin rahatlığını sağlarken tipik sarmalayıcı ayırma ek yükünü ortadan kaldırır.

extension type Wrapper(int i) {
void showValue() {
print('verilen değer $i');
}
}

void main() {
final wrapper = Wrapper(32);
wrapper.showValue(); // Ekran Çıktısı: 'verilen değer 32'
}

Örnekte Wrapper’ı bir uzantı türü olarak tanımlıyor, ancak onu basit bir Dart türü gibi kullanıyor. Onu örnekleyebilir ve işlevleri çağırabilirsiniz. Temel fark, Dart’ın onu normal bir Dart int olarak derlemesidir. Extension türleri, tipik bir sarmalayıcı türünü tahsis etme dolaylı maliyeti olmadan benzersiz üyelere sahip bir tür oluşturmanın kolaylığını sağlar. Dolayısıyla, extension members özelliği (Dart 2.7'den beri kullanılıyor), mevcut bir türe işlevler ve özellikler eklemenize olanak tanırken ,extension türü özelliği aynısını yapabilir ve aynı zamanda temel temsilin altındaki API’yı gizleyen yeni bir API tanımlamanıza olanak sağlar.

Bu özellik özellikle ana bilgisayar platformlarıyla etkileşimde yararlıdır. Özgün türler doğrudan kullanılabilir ve sarmalayıcılar oluşturma maliyeti olmadan ve ilişkili dolaylılık sağlanarak temiz, üretim Dart API’sı sağlar. Extension türleri hakkında daha fazla bilgi için yeni belgelendirmeye göz atın.

JavaScript Entegrasyonunun Gelişimi

Dart 3.3, JavaScript kütüphaneleri ve web ile etkileşim için yeni bir model sunar. Yeni bir JavaScript ile etkileşim için API setiyle başlar: dart:js_interop kütüphanesi. Artık Dart geliştiricileri, JavaScript ile etkileşim için tip belirli bir API’ye erişebilirler. Bu API, iki dil arasındaki sınırı statik denetim ile net bir şekilde tanımlar. Bu, derleme zamanından önce bir bütün sorun sınıfını ortadan kaldırır. JavaScript koduna erişmek için yeni API’lerin yanı sıra, Dart artık JavaScript tiplerini uzantı türleri kullanarak temsil etmek için yeni bir model içerir.

import 'dart:js_interop';

/// `console` tarayıcı api'sini temsil eder
extension type MyConsole(JSObject _) implements JSObject {
external void log(JSAny? value);
external void debug(JSAny? value);
external void info(JSAny? value);
external void warn(JSAny? value);
}

Uzantı türlerine dayanan syntax, uzantı üyelerinden daha fazla ifade ve sağlamlık sağlar. Bu, JavaScript API’lerini Dart’tan daha kolay kullanmayı basitleştirir. JavaScript ile etkileşim hakkında daha fazla bilgiyi JS interop üzerine yeni belgelendirmede bulabilirsiniz.

Tarayıcı kütüphanelerinin geliştirilmesi

1.0 sürümünden beri, Dart SDK kapsamlı bir tarayıcı kütüphane setini içermektedir. Bunlar, temel dart:html kütüphanesiyle birlikte SVG, WebGL ve diğer kütüphaneleri içeriyor.

Geliştirilmiş JavaScript etkileşim modeli, bu kütüphaneleri yeniden hayal etme fırsatı sundu. Bundan sonra, tarayıcı kütüphane desteğimiz paket:web’e odaklanacaktır. Bu, sürümleme işlemlerini basitleştirir, güncellemeleri hızlandırır ve MDN kaynaklarıyla uyumlu hale getirir.

Bu iyileştirmeler zinciri, bir sonraki büyük adıma yönlendiriyor: Dart’ın WebAssembly’e derlenmesi.

Son olarak; Google AI Dart SDK’nın Tanıtımı

Google, Google AI Dart SDK’yı beta sürümüne yayınladı. Artık Dart veya Flutter uygulamanıza üretken yapay zeka özellikleri ekleyebilirsiniz. Bu uygulamalar, Google’ın en son AI modelleri ailesi olan Gemini’yi kullanır. package:google_generative_ai paketine bir göz atın. Google AI Dart SDK ile nasıl uygulama geliştirileceğini bu blog yazısında öğrenin veya hemen hızlı başlangıç yapın.

Sonuç

Bu makalemde sizlere, Flutter 3.19 ve Dart 3.3 güncelleştirmesi ile Flutter serüvenimize dahil olan yeni özellikler, yapılan değişiklikler, ileri dönemlerde serüvene dahil olacak birkaç özelliğin sinyallerini ve kaldırılan kullanımları aktardım.
Flutter ve Dart, trend,yararlı ve hayat kolaylaştırıcı tüm yenilikleri bünyesine almaya devam ederek, git gide güçleniyor. Ben ise bu değişiklikleri ve yenilikleri yakından takip ederek, sizlere olabildiğince aktarmaya çalışacağım. Takipte kalın..
Flutter ekibi 3.19 güncelleştirmesini 15 Şubat tarihinde yayımladığı için sevgililer gününe ithaf etti. Ben de bu makaleyi çok değerli nişanlım, Tuba’ya ithaf ediyorum…

--

--