Hari ini kami mempersembahkan kepada Anda rilis Flutter terbaru, Flutter 3.19. Rilis ini menghadirkan Dart SDK baru untuk Gemini, widget yang memungkinkan developer menambahkan kontrol presisi pada animasi widget, peningkatan rendering dengan update untuk Impeller, peralatan untuk membantu mengimplementasikan deep link, dukungan Windows Arm64, dan masih banyak lagi!
Komunitas Flutter terus memberikan kesan yang luar biasa, menggabungkan 1429 permintaan pull dari 168 anggota komunitas, dengan 43 anggota komunitas melakukan permintaan pull Flutter pertama mereka!
Lanjutkan membaca untuk mengetahui semua penambahan dan peningkatan baru yang telah diberikan oleh komunitas Flutter pada rilis terbaru ini!
Integrasi AI
Rilis beta Gemini Google AI Dart SDK
Google AI Dart SDK telah dirilis ke versi beta. Rilis ini memungkinkan Anda membangun fitur AI generatif ke dalam aplikasi Dart atau Flutter Anda, didukung oleh Gemini, keluarga model AI terbaru dari Google. Sekarang ada paket google_generative_ai
di pub.dev. Pelajari lebih lanjut cara membangun dengan Google AI Dart SDK dalam postingan blog ini atau langsung masuk ke panduan memulai Dart.
Kerangka kerja
Peningkatan scroll
Flutter dahulu men-scroll dua kali lebih cepat jika Anda menarik dengan dua jari. Sekarang Anda bisa mengonfigurasi ScrollBehavior
default dengan MultiTouchDragStrategy.latestPointer
untuk mendapatkan perilaku scroll agnostik sesuai jumlah jari. Untuk informasi selengkapnya tentang perubahan ini, lihat panduan migrasi.
Kami juga menyelesaikan perbaikan bug untuk SingleChildScrollView
dan ReorderableList
, mengatasi sejumlah error yang dilaporkan dan perilaku yang tidak diharapkan.
Pada scrolling dua dimensi, kami sudah menyelesaikan masalahnya, jadi sekarang, jika Anda menarik atau mengetuk sewaktu melakukan scroll, aktivitas scroll akan berhenti seperti yang diharapkan.
Widget TableView
dalam paket two_dimensional_scrollables
juga sudah diupdate sejak rilis terakhir, memberikan banyak penyempurnaan, menambahkan dukungan untuk penggabungan sel, dan mengadopsi lebih banyak fitur baru dasar 2D setelah rilis stabil 3.16 yang terakhir.
AnimationStyle
Berkat kontribusi dari anggota komunitas Flutter @TahaTesser, Flutter memiliki widget AnimationStyle
baru yang memungkinkan pengguna mengganti perilaku animasi default pada widget, seperti MaterialApp
, ExpansionTile
, dan PopupMenuButton
, yang memberikan kemampuan kepada developer untuk mengganti kurva dan durasi animasi.
SegmentedButton.styleFrom
Anggota komunitas Flutter, @AcarFurkan menambahkan metode utilitas statis styleFrom
, seperti yang disediakan oleh tipe tombol lainnya. Metode ini memungkinkan pembuatan ButtonStyle
dari SegmentedButton
dengan cepat yang bisa dibagikan dengan tombol tersegmentasi lainnya atau digunakan untuk mengonfigurasi SegmentedButtonTheme
aplikasi.
Switch Adaptif
Komponen adaptif ini terlihat dan terasa native di macOS dan iOS serta memiliki tampilan dan nuansa Desain Material di platform lainnya. Ia tidak bergantung pada library Cupertino sehingga API-nya sama persis di semua platform.
Lihat permintaan pull switch adaptif dan contoh langsungnya di halaman API konstruktor Switch.adaptive
.
ID aksesibilitas SemanticsProperties
ID aksesibilitas baru di SemanticsProperties
menyediakan ID untuk node semantik dalam hierarki aksesibilitas native. Di Android, ia muncul dalam hierarki aksesibilitas sebagai resource-id
. Pada iOS, ini menetapkan UIAccessibilityElement.accessibilityIdentifier
. Kami ingin berterima kasih kepada anggota komunitas @bartekpacia atas perubahan ini, yang mencakup engine dan framework.
Peningkatan akses ke status widget teks
Kami menambahkan dukungan untuk MaterialStatesController
dalam TextField
dan TextFormField
sehingga Anda bisa mendengarkan perubahan MaterialState
.
Stack UndoHistory
Kami telah memperbaiki masalah terkait riwayat undo/redo yang dapat hilang pada keyboard berbahasa Jepang. Anda sekarang bisa memodifikasi entri sebelum mendorongnya ke stack UndoHistory
.
Engine
Progres Impeller
Pratinjau OpenGL Android
Pada rilis stabil 3.16, kami mengundang pengguna untuk mencoba Impeller pada perangkat Android yang mendukung Vulkan, yang mencakup 77% dari perangkat Android di dunia. Dalam beberapa bulan terakhir, kami telah membawa backend OpenGL Impeller ke fitur yang setara dengan backend Vulkan, misalnya, dengan menambahkan dukungan untuk MSAA. Ini berarti bahwa aplikasi Flutter pada hampir semua perangkat Android diharapkan bisa melakukan render secara benar, dengan pengecualian sejumlah kecil fitur lainnya yang akan segera menyusul, seperti shader khusus dan dukungan penuh untuk tekstur eksternal.
Kami meminta developer Flutter untuk melakukan upgrade ke versi stabil terbaru, dan melaporkan setiap masalah yang ditemukan ketika Impeller diaktifkan. Masukan pada tahap ini sangat berharga untuk memastikan bahwa Impeller berhasil di Android dan kami bisa dengan percaya diri menjadikannya sebagai renderer default dalam rilis akhir tahun ini. Ekosistem hardware Android jauh lebih beragam daripada ekosistem iOS. Oleh karena itu, masukan terbaik tentang Impeller harus menyertakan informasi mendetail tentang perangkat dan versi Android yang mengalami masalah secara spesifik.
Selanjutnya, sebagai pengingat, backend Vulkan dari Impeller memungkinkan kemampuan proses debug tambahan dalam build debug di samping apa yang digunakan dengan Skia, dan kemampuan ini memiliki overhead runtime tambahan. Oleh karena itu, sangatlah penting untuk memberikan masukan mengenai performa Impeller dari profil atau build rilis. Laporan bug ini harus menyertakan linimasa dari DevTools dan perbandingan dengan backend Skia pada perangkat yang sama. Terakhir, seperti biasa, kami sangat berterima kasih untuk semua masukan yang menyertakan kasus pengujian kecil yang dapat direproduksi untuk menunjukkan masalah tersebut.
Roadmap
Setelah fidelitas rendering, fokus utama kami dalam periode pratinjau Android Impeller adalah performa. Kami terus membuat progres secara bertahap, tetapi beberapa peningkatan yang lebih besar juga sedang dilakukan. Kami berharap dapat memanfaatkan subpass Vulkan untuk meningkatkan performa mode campuran lanjutan secara signifikan. Selain itu, kami juga berharap bahwa perubahan dalam strategi rendering dari yang sebelumnya selalu memetakan setiap jalur pada CPU mengarah ke pendekatan Stencil-then-cover akan sangat mengurangi penggunaan CPU Impeller pada Android dan iOS. Yang terakhir, kami berharap bahwa implementasi baru Gaussian blurring akan mengompensasi throughput implementasi Skia, dan meningkatkan penggunaan idiomatis blurring pada iOS.
Peningkatan API
Informasi Glyph
Rilis ini menyertakan dua metode baru pada objek Paragraph
: getClosestGlyphInfoForOffset
dari dart:ui
, dan getGlyphInfoAt
, yang masing-masing mengembalikan objek tipe baru GlyphInfo
. Lihat dokumentasi mengenai tipe GlyphInfo
baru.
Pelacakan GPU
Pada Impeller Metal (iOS, macOS, Simulator) dan pada perangkat Android yang mendukung Vulkan, engine Flutter sekarang melaporkan waktu GPU untuk setiap bingkai di linimasa dalam debug dan build profil. Pengaturan waktu bingkai GPU bisa diperiksa dalam DevTools di bawah tajuk "GPUTracer".
Harap perhatikan bahwa karena perangkat Android non-Vulkan bisa saja salah melaporkan dukungannya untuk melakukan kueri timing GPU, pelacakan GPU Impeller hanya bisa diaktifkan dengan flag yang diatur dalam file AndroidManifest.xml
pada perangkat ini.
<meta-data
android:name="io.flutter.embedding.android.EnableOpenGLGPUTracing"
android:value="true" />
Optimalisasi kinerja
Konstanta spesialisasi
Tim menambahkan dukungan untuk konstanta spesialisasi ke Impeller. Memanfaatkan fitur ini dalam shader Impeller telah mengurangi ukuran biner yang tidak terkompresi pada engine Flutter hingga hampir 350KB.
Percepatan filter latar belakang
Masih banyak yang harus dikerjakan, tetapi rilis ini menyertakan beberapa peningkatan performa yang bagus untuk filter latar belakang dan blur pada Impeller. Secara khusus, kontributor open source @knopp melihat bahwa Impeller secara keliru meminta kemampuan untuk membaca dari tekstur di layar. Menghapus kemampuan ini telah meningkatkan gambar yang menyertakan beberapa filter latar belakang, antara 20-70% dalam tolok ukur kami, tergantung kompleksitasnya.
Selain itu, Impeller tidak lagi tanpa syarat menyimpan buffering stensil pada setiap filter latar belakang. Sebagai gantinya, setiap klip yang memengaruhi operasi direkam, dan diputar ulang ke dalam buffering stensil baru ketika memulihkan lapisan penyimpanan untuk filter latar belakang.
Berkat perubahan ini, tolok ukur kami untuk mode campuran lanjutan beranimasi pada Pixel 7 Pro yang menjalankan Impeller dengan backend Vulkan meningkatkan waktu render frame rata-rata GPU dari 55ms menjadi 16ms, dan meningkatkan waktu thread raster CPU 90%-ile dari sekitar 110ms turun menjadi 22ms.
Android
Validator web deeplinking
Kami telah belajar dari developer bahwa deep linking (membawa pengguna dari URL web ke halaman tertentu di aplikasi seluler) selalu sulit diimplementasikan, dan rentan terhadap kesalahan. Jadi, pertama-tama kami membuat alat validasi untuk membantu developer memahami link yang tidak dikonfigurasi dengan benar, dan memberikan panduan implementasi. Kami sangat senang mengumumkan bahwa versi awal validator deeplink Flutter kini telah tersedia!
Pada versi awal ini, validator deep link Flutter mendukung pengecekan web di Android, yang berarti memvalidasi pengaturan file assetlinks.json
Anda. Anda bisa membuka DevTools, mengklik tab Deep Links, dan mengimpor proyek Flutter yang berisi deeplink. Validator deeplinking memberi tahu Anda jika file web Anda dikonfigurasi dengan benar. Anda bisa merujuk ke petunjuk pengujian alat validasi deep link untuk informasi selengkapnya.
Kami harap alat ini adalah langkah pertama Anda untuk menyederhanakan perjalanan implementasi deep linking. Kami akan terus berupaya menyediakan dukungan di masa mendatang untuk pengecekan web di iOS, dan pengecekan aplikasi di iOS dan Android!
Dukungan untuk Share.invoke
Tombol Share default pada kolom teks dan tampilan sebelumnya tidak ada di Android, tetapi kami telah menambahkannya dalam rilis ini sebagai bagian dari upaya berkelanjutan kami untuk memastikan semua tombol menu konteks default tersedia di semua platform. Anda bisa mengikuti pekerjaan yang sedang berlangsung di PR #107578.
Fitur aset native
Jika Anda tertarik dengan interoperabilitas Flutter dengan fungsi dari bahasa lain dalam kode Flutter, kini Anda bisa melakukan panggilan FFI melalui aset Native di Android sebagai bagian dari upaya berkelanjutan kami untuk mendukung aset Native.
Mode Texture Layer Hybrid Composition (TLHC)
Flutter 3.19 mencakup perbaikan yang sekarang membuat Google Maps dan pembesar input teks bekerja dalam mode TLHC, yang berarti performa yang lebih baik untuk aplikasi Anda. Jika Anda menggunakan Google Maps, kami sarankan Anda mencoba perubahannya dan berikan masukan kepada kami!
Pekerjaan ini tidak termasuk commit di bawah Framework atau Engine, tetapi Anda bisa melihat pekerjaannya di PR 5408, bersama dengan langkah-langkah untuk menguji THLC.
Tombol toolbar pemilihan teks seluruh sistem khusus
Aplikasi Android bisa menambahkan item menu pilihan teks khusus yang muncul di semua menu pilihan teks (menu yang muncul ketika Anda menekan lama teks). Menu pilihan TextField
Flutter sekarang sudah menyertakan semua item tersebut.
iOS
Font native iOS Flutter
Teks Flutter sekarang terlihat sedikit lebih ringkas dan lebih native di iOS. Menurut panduan desain Apple, font yang lebih kecil di iOS harus lebih menyebar agar mudah dibaca di perangkat seluler, sementara font yang lebih besar harus lebih ringkas agar tidak menghabiskan banyak ruang. Sebelumnya, kami salah menggunakan font yang lebih kecil dengan banyak spasi dalam semua kasus. Sekarang, secara default Flutter akan menggunakan font ringkas untuk teks yang lebih besar.
DevTools
Update DevTools
Beberapa sorotan untuk DevTools dengan rilis ini adalah:
- Penambahan fitur dan layar baru di DevTools untuk memvalidasi pengaturan deeplink di Android.
- Penambahan opsi dalam menu Enhance Tracing untuk melacak aktivitas saluran platform. Ini berguna untuk aplikasi dengan plugin.
- Layar profiler Performa dan CPU sekarang tersedia apabila tidak ada aplikasi yang terhubung. Data performa atau profil CPU yang sebelumnya disimpan dari DevTools bisa dimuat ulang untuk dilihat dari layar ini.
- Flutter Sidebar di VS Code sekarang memiliki kemampuan untuk mengaktifkan platform baru jika tidak diaktifkan untuk proyek saat ini, dan menu DevTools di sidebar sekarang memiliki opsi untuk membuka DevTools di jendela browser eksternal.
Untuk mempelajari lebih lanjut, lihat catatan rilis untuk DevTools, 2.29.0, 2.30.0, dan 2.31.0.
Desktop
Dukungan Windows Arm64
Flutter di Windows sekarang menerima dukungan awal untuk arsitektur Arm64, berkat upaya yang patut diapresiasi dari anggota komunitas @pbo-linaro. Dukungan awal ini membuka jalan bagi aplikasi Flutter yang lebih efisien dan berkinerja tinggi yang berjalan secara native pada perangkat Windows Arm64. Meskipun masih dalam tahap pengembangan, dengan progres yang dapat dilacak di GitHub edisi #62597, langkah ini menandakan peningkatan yang menjanjikan bagi developer Flutter yang ingin mengoptimalkan aplikasi mereka untuk perangkat Windows yang lebih luas.
Ekosistem
Alasan perlunya manifes privasi
Flutter kini menyertakan manifes privasi di iOS untuk memenuhi persyaratan Apple mendatang.
Progres ekosistem paket Flutter dan Dart
Jika Anda melewatkannya, silakan baca postingan blog dari bulan Januari mengenai progres ekosistem paket Flutter dan Dart.
Penghentian dukungan dan perubahan yang dapat menyebabkan gangguan
Menghentikan dukungan Windows 7 dan 8
Seiring perkembangan Flutter, kami sangat antusias berfokus pada teknologi terbaru dengan mengakhiri dukungan untuk Windows 7 dan 8 dengan merilis Dart 3.3 dan Flutter 3.19. Pergeseran ini, sejalan dengan strategi Microsoft, memungkinkan kami untuk meningkatkan Flutter pada sistem operasi modern. Kami menghargai upaya penyesuaian yang dilakukan developer kami dan berkomitmen untuk membantu Anda melewati masa transisi ini. Langkah ini membuka jalan bagi lingkungan pengembangan yang lebih aman, efisien, dan kaya fitur pada versi Windows yang didukung. Terima kasih atas pengertian dan kesediaan Anda untuk beradaptasi selagi kita terus berinovasi bersama dalam ekosistem Flutter.
Flag dithering Impeller
Seperti yang tercantum dalam catatan rilis untuk rilis stabil 3.16, flag global Paint.enableDithering
telah dihapus. Lihat pengumuman perubahan yang dapat menyebabkan gangguan di situs untuk detail selengkapnya.
Menghentikan dukungan iOS 11
Karena error runtime saat API jaringan tertentu dipanggil, Flutter tidak lagi mendukung iOS 11. Ini berarti bahwa aplikasi yang dibuat dengan Flutter 3.16.6 dan yang lebih baru tidak akan berjalan pada perangkat tersebut.
Penghentian dukungan mode render otomatis
Perubahan yang dapat menyebabkan gangguan dalam rilis ini mencakup API yang sudah tidak digunakan lagi yang kedaluwarsa setelah rilis v3.16. Untuk melihat semua API yang terpengaruh, bersama dengan konteks tambahan dan panduan migrasi, lihat panduan penghentian dukungan untuk rilis ini. Banyak dari penghentian ini didukung oleh Flutter fix, termasuk perbaikan cepat dalam IDE. Perbaikan massal bisa dievaluasi dan diterapkan dengan alat command line dart fix
.
Seperti biasa, terima kasih banyak kepada komunitas yang telah menyumbangkan pengujian — ini membantu kami mengidentifikasi perubahan yang dapat menyebabkan gangguan. Untuk mempelajari lebih lanjut, lihat kebijakan perubahan yang dapat menyebabkan gangguan Flutter.
Ini adalah rilis pertama yang mengadopsi paket flutter_driver ke dalam kebijakan penghentian dukungan selain paket yang sudah didukung, flutter dan flutter_test.
Kesimpulan
Kami dengan sengaja menyorot kontributor-kontributor yang luar biasa di awal pengumuman ini. Evolusi Flutter menjadi toolkit yang kuat dan efisien seperti sekarang merupakan bukti langsung dari dedikasi dan kerja keras komunitas kami yang luar biasa. Terima kasih yang sebesar-besarnya kepada Anda semua.
Untuk mendalami secara spesifik tentang apa yang telah dicapai dengan rilis ini, kami mengundang Anda untuk melihat catatan rilis dan log perubahan untuk daftar lengkap penambahan di Flutter 3.19.
Flutter 3.19, bersama Dart 3.3, sekarang tersedia di saluran stabil. Memulai perjalanan terbaru ini dengan Flutter semudah menjalankan upgrade flutter.