1.7.8 版本是 5 月 1.5.4 穩定版的後續發行,合併了 1289 個 PR 並關閉了 184 個議題。 本次發行的主要主題包括:

  • 支援 Android 32 位元與 64 位元套件
  • 大量 iOS 功能與修復, 包含更完善的文字編輯與在地化
  • 透過 flutter create--androidx 旗標,為新專案提供 AndroidX 支援
  • 新元件:RangeSlider

如我們的路線圖所述, 我們也持續在 Flutter engine 及 framework 上進行支援 Web 與桌面目標的相關工作; 不過,目前尚未適合一般用戶使用。

支援 32 位元與 64 位元 Android 套件

#

自 2019 年 8 月 1 日起,使用原生程式碼並以 Android 9 Pie 為目標的 Android 應用程式,在發佈至 Google Play 商店時,除了 32 位元版本外,必須同時提供 64 位元版本。由於所有 Flutter 應用程式都包含原生程式碼,這項規定將影響所有新提交至商店的 Flutter 應用程式,以及現有 Flutter 應用程式的更新。已發佈於商店的現有應用版本則不受影響。

本次發行已支援建構同時包含 32 位元與 64 位元二進位檔的 app bundle 與 APK,完成了我們在 ⟦L268⟧ 上的相關工作。使用本次版本建構 Android 應用程式時,您的 App Bundle 或 APK 現在預設同時支援 32 位元與 64 位元 CPU 架構。

重大變更(Breaking Changes)

#

以下為本次發行中的重大變更列表,包含每項變更的說明及在 Flutter 程式碼中如何處理。

嚴重崩潰修正

#

我們也在本次發行中修正了多個導致崩潰的問題。

  • #31228 修正 ExpansionPanelList 重複 Global Keys 例外
  • #31581 修正巢狀 TabBarView 銷毀時的例外
  • #34460 恢復可於 Gradle 覆寫本地 engine 的能力

iOS

#

我們持續專注於 Flutter 的 iOS 支援,本次發行包含更強化的文字編輯與在地化。

  • #29809 修正文字選取工具列出現在遮蔽物下方
  • #29824 Cupertino 在地化第 8 步:建立 gen_cupertino_localizations 並產生英文與法文的 cupertino 在地化
  • #29954 Cupertino 在地化第 9 步:新增測試
  • #30129 修正 gallery demo 中的 refresh control,並更新註解
  • #30224 Cupertino 在地化第 10 步:更新 flutter_localizations 的 README
  • #31039 修正使用 flutter run 啟動 iOS 時的 bundle id
  • #31308 CupertinoDialogAction 當 isDefaultAction 為 true 時新增粗體字型
  • #31326 新增更多隨機 cupertino 圖示
  • #31332 iOS 選取控制點不可見
  • #31464 CupertinoPicker 精細度修正
  • #31623 修正邊緣滑動與回到起點的問題
  • #31644 Cupertino 在地化第 12 步:推送所有支援語言的翻譯
  • #31687 置中 iOS 游標,移除不會縮放的固定偏移量
  • #31763 修正 ScrollbarPainter thumbExtent 計算並新增 padding
  • #31852 文字選取控制點有時無法互動
  • #32013 Cupertino 土耳其語翻譯
  • #32086 修正 CupertinoSliverRefreshControl 的 onRefresh callback
  • #32469 讓 CupertinoNavigationBarBackButton 可自訂 onPressed
  • #32513 Cupertino 在地化第 12 步第 2 次嘗試:推送所有支援語言的翻譯
  • #32620 為 TextField 新增 ScrollController
  • #32823 為 CupertinoTextField 新增 enableInteractiveSelection
  • #32974 修正停用狀態下的 CupertinoTextField 樣式
  • #33450 IosProject.isSwift 不再回傳 null
  • #33624 修正 CupertinoTabScaffold 異常
  • #33634 支援顯示捲軸
  • #33653 將 TextEditingController API 加入有關 dispose 的建議
  • #33684 停用 Xcode build phase 中 CocoaPods 的 input 與 output 路徑,並採用新 Xcode build system
  • #33739 修正 cupertinoTextField placeholder 的 textAlign
  • #33852 停用 Xcode build phase 中 CocoaPods 的 input 與 output 路徑,並採用新 Xcode build system
  • #34293 將 Xcode developmentRegion 改為 'en',CFBundleDevelopmentRegion 改為 DEVELOPMENT_LANGUAGE
  • #34964 CupertinoTextField.onTap

Android

#

本次發行針對 Android 進行了多項改進,包括來自外部貢獻者的新 AndroidX 支援(感謝 Josh!),以及符合 Google Play 商店新政策 的 64 位元與 32 位元 APK 套件支援。

  • #31028 新增產生使用 AndroidX 支援函式庫的專案功能
  • #31359 移除 Android 動態修補建構支援
  • #31491 允許 adb stdout 包含 port 號時不會失敗
  • #31835 將 ADB CrOS 修正回補至 beta
  • #32787 支援 32 與 64 位元
  • #33191 移除 Gradle 任務名稱中的冒號,因已棄用
  • #33611 使用 Dart 新的 ELF 產生器將 AOT blobs 打包為 Android APK 的共享函式庫
  • #33696 產生 ELF 共享函式庫並允許 APK 與 App bundle 中有多 ABI 函式庫
  • #33901 回應 AndroidView 的 focus 事件
  • #33923 [flutter_tool] 追蹤 APK sha 計算時間
  • #33951 白名單 adb.exe heap corruption 的結束碼
  • #34066 為 modules pubspec.yaml 範本新增 androidX 旗標
  • #34123 產生 ELF 共享函式庫並允許 APK 與 App bundle 中有多 ABI 函式庫

Material

#

本次發行對現有 Material 元件進行了多項改進,包括 DatePicker、SnackBar 與 TimePicker,同時也新增了一個新元件:RangeSlider

  • #30572 [Material] 自適應 Slider 建構子
  • #30884 [Material] 更新 TabController 以支援動態 Tabs
  • #31018 [Material] BottomNavigationBar 上已選/未選標籤樣式與圖示主題
  • #31025 Scaffold 元件新增 scrimColor 屬性
  • #31275 更新 SnackBar 以支援 Material 規範的新樣式
  • #31295 改善 ThemeData.accentColor 與 secondary color 的關聯
  • #31318 新增 BottomSheetTheme 以主題化 BottomSheet 的顏色、高度、形狀
  • #31438 實作 Material 按鈕的 focus 與 hover 處理
  • #31514 Date picker 版面例外修正
  • #31566 TimePicker 在選擇小時後自動切換到分鐘模式
  • #31662 SliverAppBar 新增 shape 屬性
  • #31681 [Material] 建立可主題化的 Range Slider(連續與離散)
  • #31693 為 Radio/RadioListTile 的 onChange 新增註解
  • #31902 更新 primaryColor 文件以參考 colorScheme 屬性
  • #31938 使用正確的 const 格式更新 scrimDrawerColor
  • #32053 增加 TimePicker 觸控目標範圍
  • #32070 將 foreground 與 background 重新命名為 light 與 dark
  • #32527 PopupMenuButton 新增 'enabled' 屬性
  • #32726 Material 不應阻止 ScrollNotifications 向上冒泡
  • #32904 Tooltip 與 InkWell 使用 reverseDuration
  • #32911 Material 長按文字控制點閃爍
  • #33073 SliverAppBar shape 屬性
  • #34869 [Material] 正確呼叫 Range Slider 的 onChangeStart 與 onChangeEnd
  • #32950 Material 在未收合時允許「全選」

Web

#

Web 功能的開發持續進行,已將 flutter_web 倉庫的程式碼合併進主 flutter 倉庫,讓這項預覽技術的開發體驗更簡單。我們已經將許多現有的 Flutter 範例編譯成 Web 版本。 歡迎體驗!

  • #32360 允許使用 flutter 編譯 flutter web
  • #33197 為 web 接上 hot restart 與增量重建
  • #33406 為 Platform.isPlatform getter 新增 web 安全間接層
  • #33525 flutter test 新增 –platform=chrome 支援
  • #33533 重新上線 - 為 web 接上 hot restart 與增量重建
  • #33629 使用 webkit inspection protocol 為 web 新增更真實的 restart
  • #33859 重新上線 flutter test 支援 platform chrome
  • #33892 新增 web 體積追蹤基準測試
  • #33956 為 flutter web 應用程式產生程式進入點
  • #34018 新增 flutter create for the web
  • #34084 讓 web 執行變得「spooky」
  • #34112 分離 web 與 io 的 network image 實作
  • #34159 flutter web 使用 product define 並移除多餘資產伺服器
  • #34589 移除大部分 build web 的目標邏輯,清理規則
  • [#34856