Saya Rangkum Update Flutter 3.35: Hot Reload di Web!
Pendahuluan
Pada update Flutter 3.35 ini terdapat 1.108 commit dari 168 contributor, 39 diantaranya baru bergabung.
Web
Hot reload di web aktif secara default
Hot reload untuk development web sekarang sudah tersedia sebagai fitur experimental. Sebelumnya, aktifasi memerlukan flag --web-experimental-hot-reload saat debug. Untuk menonaktifkan, gunakan flag --no-web-experimental-hot-reload.
Wasm dengan dry run
Setiap JS yang dibuild kini memberlakukan "dry run", sebagai antisipasi penggunaan default WebAssembly (Wasm) untuk target build ke web. Fitur dapat disetel dengan flag --(no-)wasm-dry-run.
Framework
Peningkatan accessibility
Web semantic
Semantic locale sudah ditambahkan, kegunannya untuk menentukan bahasa yang digunakan untuk accessibility. (#171196)
Widget baru
Widget SemanticsLabelBuilder sudah ditambahkan, kegunaannya untuk menggabungkan beberapa string menjadi satu (#171683).
Widget SliverEnsureSemantics sudah ditambahkan, kegunaannya untuk memastikan widget sliver yang di luar layar tetap berada di accessibility tree, membantu navigasi saat menggunakan screen reader (#166889).
Update widget dan platform
- Untuk iOS, terdapat perbaikan pada scaling teks di
CupertinoSliverNavigationBar(#168866), dan aktivasi tab di VoiceOver (#170076). - Untuk Android, TalkBack kini berfungsi untuk komponen native yang di-embed dengan platform views (#168939).
- Properti semantic untuk
CustomPainterdiperbarui agar UI lebih dapat dikustomisasi (#168113). - Toolbar saat seleksi teks pada bahasa yang berformat RTL sudah disejajarkan (#169854).
Material dan Cupertino
Komponen baru dan yang di-update
DropdownMenuFormFieldsudah ditambahkan, sebagai pengganti dari penggunaanDropdownMenudi form (#163721).NavigationRailsekarang bisa scrollable (#169421).NavigationDrawersekarang memiliki header dan footer (#168005).CupertinoExpansionTilesudah ditambahkan (#165606).
Fidelity dan interaktifitas
- Bentuk beberapa widget Cupertino kini sudah diperbarui mengikuti
RSuperellipse(#167784). - Haptic feedback sudah ditambahkan ke komponen interaktif penting seperti
CupertinoPicker(#170641) danCupertinoSlider(#167362). - Indikator value
Slidersekarang bisa disetel agar selalu terlihat (#162223).
Lainnya dari framework
Sliver
Sekarang dapat secara eksplisit mengontrol paint order (z-order) di sliver (#164818).
Navigasi dan form
- Properti
fullscreenDialog(#167794) ditambahkan ke ModalRoute (beserta semua turunannya) danshowDialog, kegunaannya untuk kustomisasi navigasi ke dan dari route dialog. FormFieldsekarang memiliki callback onReset (#167060).
Input dan seleksi teks
- Handling gesture kini digeneralisir dengan interface baru, yaitu
PositionedGestureDetails(#160714). - Field teks sebaris sudah tidak lagi srollable, menjadi selaras dengan iOS native (#162841).
Penambahan tombol shortcut Home dan End di Android (#168184)
| Tombol | Fungsi |
|---|---|
Home/End |
Memindahkan cursor to ke awal/akhir baris. |
Home/End + Shift |
Melebarkan seleksi ke awal/akhir baris. |
Home/End + Ctrl |
Memindahkan cursor to ke awal/akhir field. |
Home/End + Shift + Ctrl |
Melebarkan seleksi ke awal/akhir field. |
Android
Proteksi konten sensitif
Di Android 15, API 35, widget SensitiveContent sudah ditambahkan, kegunaannya untuk mem-blur seluruh layar saat screen share.
Engine
General update di engine
iOS
- Opsi Live Text (OCR) pada field teks diadakan kembali.
Android
- Template project baru sekarang menggunakan Android 24.
DevTools dan IDE
Server MCP Dart dan Flutter experimental tersedia di channel stable
AI coding assistant
Server MCP Dart dan Flutter bertindak sebagai bridge, menjadikan AI coding assistant dapat mengakses ke lebih banyak konteks pada project melalui toolchain Dart dan Flutter. AI coding assistant kini dapat memahami project secara mendalam dan mengambil tindakan seperti:
- Fix runtime error: Melakukan inspect pada widget tree yang sedang berlangsung, mengidentifikasi RenderFlex yang overflow, dan menerapkan fix secara otomatis.
- Mengelola dependency: Menemukan package di pub.dev untuk task tertentu, menambahkannya ke
pubspec.yaml, dan menjalankanpub get. - Menulis dan memperbaiki kode: Membuat boilerplate fitur baru, lalu memperbaiki sendiri error analisis yang muncul.
Widget Previews (Experimental)
Widget Previews memungkinkan untuk melakukan visualisasi dan testing widget pada environment sandbox. Misalnya saat membuat design system atau saat testing komponen dengan konfigurasi berbeda, seperti ukuran layar, theme, dan scaling teks. Ini dilakukan secara sekaligus dan berdampingan.
Analysis Server
Beberapa command dari dart command-line tool yang menggunakan analysis server seperti dart analyze, dart fix, dan dart language-server, sekarang menjalankan snapshot analysis server yang AOT-compiled.
Breaking changes dan deprecation
AppBarTheme,BottomAppBarTheme, danInputDecorationThemesudah di-refactor keThemeDataagar lebih konsisten dengan Material 3.- Widget
Radio,CupertinoRadio, danRadioListTilesudah di-redesign untuk menambah accessibility. PropertigroupValuedanonChangedsudah deprecated dan diganti dengan widgetRadioGroupuntuk mengelola state dari sekumpulan radio button. - Widget
Formtidak lagi dapat digunakan sebagai sliver, form harus dibungkus denganSliverToBoxAdapteruntuk digunakan di dalamCustomScrollView. - Parameter
valuediDropdownButtonFormFieldsekarang deprecated, diganti menjadiinitialValue.
Deprecated Android ber-architecture 32-bit x86
Deprecated dukungan IDE untuk SDK Flutter sebelum 3.13
SDK Android minimum
API 24 (Android 7) adalah minimum untuk flutter.minSdkVersion. Dan berikut adalah minimum dependency Android:
- Gradle version: 8.7.0
- Android Gradle Plugin (AGP): 8.6.0
- Java: 17
Related Posts
Implementasi Timer yang Bisa Pause dengan PausableTimer di Flutter
Normalnya kita mengimplementasi Timer di Flutter sebagai berikut: var counter = 3; Timer.periodic(const Duration(seconds: 2), (timer) { print(timer.tick); counter--; if (counter == 0) { print('Cancel ...
Cara Membuat Text Border/Outline di Flutter yang Simpel
Artikel ini berdasarkan kesulitan saya dengan flutter saat ingin membuat widget text yang memiliki outline, saat itu saya butuh untuk memperjelas teks agar tidak samar dengan gradasi background dan ba...