1.7.8 版本是 5 月份釋出的 1.5.4 穩定版之後的跟進版本,共合併了 1289 個 PR,關閉了 184 個 issue。本次版本的主要內容包括:

  • 支援 Android 上的 32 位和 64 位應用程式包
  • 大量的 iOS 功能和修復,包括改進的文字編輯和本地化
  • 透過 `flutter create` 的 `--androidx` 標誌為新專案提供 AndroidX 支援
  • 一個新小部件:RangeSlider

正如我們在 路線圖 中詳細介紹的那樣,我們還在繼續進行 Flutter 引擎和框架方面的持續工作,以支援啟用 Web 和桌面平臺目標;但是,目前這還未準備好供一般使用。

支援 32 位和 64 位 Android 應用程式包

#

自 2019 年 8 月 1 日起,使用原生程式碼並以 Android 9 Pie 為目標平臺的 Android 應用程式在釋出到 Google Play 商店時,將被要求提供 64 位版本,同時還要提供 32 位版本。由於所有 Flutter 應用都包含原生程式碼,因此此要求將影響提交到商店的新 Flutter 應用以及現有 Flutter 應用的更新。這不影響已釋出到商店的現有應用版本。

此版本包括對構建同時支援 32 位和 64 位二進位制檔案的應用程式包和 APK 的支援,完成了我們在 https://github.com/flutter/flutter/issues/31922 上的工作。透過在構建 Android 應用程式時使用此版本,您的應用程式包或 APK 現在預設支援 32 位和 64 位 CPU 架構。

重大變更

#

以下是此版本中破壞性更改的列表,以及對每項更改的描述以及如何在 Flutter 程式碼中處理它們。

嚴重崩潰修復

#

在此版本中,我們還修復了若干崩潰問題。

  • #31228 修復 ExpansionPanelList 全域性鍵重複異常
  • #31581 修復巢狀 TabBarView 處置時的異常
  • #34460 在 Gradle 中恢復覆蓋本地引擎的能力

iOS

#

我們繼續在 Flutter 中大力關注 iOS 支援,包括在此版本中增強文字編輯和本地化。

  • #29809 修復文字選擇工具欄出現在障礙物下方的問題
  • #29824 Cupertino 本地化步驟 8:建立 gen_cupertino_localizations 併為 Cupertino 英語和法語生成一個
  • #29954 Cupertino 本地化步驟 9:新增測試
  • #30129 修復相簿演示中的重新整理控制元件,更新註釋
  • #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 計算並新增填充
  • #31852 文字選擇控制代碼有時不可互動
  • #32013 Cupertino 土耳其語翻譯
  • #32086 修復 CupertinoSliverRefreshControl 的 onRefresh 回撥
  • #32469 讓 CupertinoNavigationBarBackButton 接受自定義 onPressed
  • #32513 Cupertino 本地化步驟 12 第二次嘗試:推送所有支援語言的翻譯
  • #32620 向 TextField 添加了 ScrollController
  • #32823 為 CupertinoTextField 新增 enableInteractiveSelection
  • #32974 修復停用的 CupertinoTextField 樣式
  • #33450 不會從 IosProject.isSwift 返回 null
  • #33624 CupertinoTabScaffold 崩潰修復
  • #33634 加入捲軸
  • #33653 在 TextEditingController API 中包含有關 dispose 的建議
  • #33684 在 Xcode 構建階段停用 CocoaPods 輸入和輸出路徑,並採用新的 Xcode 構建系統
  • #33739 修復 cupertinoTextField 佔位符 textAlign
  • #33852 在 Xcode 構建階段停用 CocoaPods 輸入和輸出路徑,並採用新的 Xcode 構建系統
  • #34293 將 Xcode developmentRegion 設定為 'en',並將 CFBundleDevelopmentRegion 設定為 DEVELOPMENT_LANGUAGE
  • #34964 CupertinoTextField.onTap

Android

#

在此版本中,我們改進了對 Android 的支援,來自外部貢獻者的新 AndroidX 支援(感謝 Josh!),並支援 64 位和 32 位 APK 應用程式包,以符合 Google Play 商店的更新政策

  • #31028 添加了對生成使用 AndroidX 支援庫的專案aneous 的支援
  • #31359 移除對在 Android 上構建動態補丁的支援
  • #31491 允許 adb stdout 包含埠號而不失敗
  • #31835 將 ADB CrOS 修復合併到 beta 版
  • #32787 支援 32 位和 64 位
  • #33191 從 Gradle 任務名稱中移除冒號,因為它已棄用
  • #33611 使用 Dart 的新直接 ELF 生成器將 AOT 編譯後的程式碼塊打包為 Android APK 中的共享庫
  • #33696 生成 ELF 共享庫並允許 APK 和應用程式包中包含多 ABI 庫
  • #33901 響應 AndroidView 焦點事件。
  • #33923 [flutter_tool] 跟蹤 APK sha 計算時間
  • #33951 將 adb.exe 堆損壞退出程式碼列入白名單。
  • #34066 將 androidX 標誌新增到模組的 pubspec.yaml 模板中,以便它被 se...
  • #34123 生成 ELF 共享庫並允許 APK 和應用程式包中包含多 ABI 庫

Material

#

此版本包括對現有 Material 元件的若干改進,包括 DatePicker、SnackBar 和 TimePicker,以及一個新元件:RangeSlider

  • #30572 [Material] 自適應 Slider 建構函式
  • #30884 [Material] 更新 TabController 以支援動態 Tabs
  • #31018 [Material] BottomNavigationBar 上的 selected/unselected 標籤樣式 + 圖示主題
  • #31025 在 Scaffold 小部件中添加了 scrimColor 屬性
  • #31275 更新 SnackBar 以支援 Material 規範中的新樣式
  • #31295 改進 ThemeData.accentColor 與 secondary color 的連線
  • #31318 新增 BottomSheetTheme 以啟用 BottomSheet 的顏色、elevation 和 shape 主題化
  • #31438 為 Material 按鈕實現了焦點處理和懸停。
  • #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 倉庫中,為這項預釋出技術提供更簡單的開發體驗。我們已經 為 Web 編譯了許多現有的 Flutter 示例。盡情享用!

  • #32360 允許使用 flutter 編譯 flutter web
  • #33197 為 Web 連線熱過載和增量重建
  • #33406 為 Platform.isPlatform getter 新增 Web 安全間接引用
  • #33525 新增 flutter test –platform=chrome 的能力
  • #33533 重新提交 - 為 Web 連線熱過載和增量重建
  • #33629 使用 webkit 檢查協議為 Web 新增真正的熱過載
  • #33859 重新提交支援在 Platform Chrome 上執行 flutter test
  • #33892 新增基準測試以跟蹤 Web 大小
  • #33956 為 flutter web 應用程式生成入口點
  • #34018 為 Web 新增 flutter create
  • #34084 使 Web 執行變得“神奇”
  • #34112 分離網路影像的 Web 和 io 實現
  • #34159 使用產品定義用於 flutter web 並移除額外的資源伺服器
  • #34589 移除構建 Web 的大部分目標邏輯,清理規則
  • #34856 將裝置名稱設定為 Chrome
  • #34885 重新提交:重新命名 Web 裝置

桌面端

#

Flutter 中對桌面平臺實驗性支援也在繼續,對桌面所需的基礎功能進行了許多改進,如懸停、焦點遍歷、快捷方式、操作甚至遊戲控制器!我們還繼續簡化開發人員體驗,您可以在 這裡 閱讀相關內容。這還處於早期階段,但如果您正在嘗試 Flutter 的桌面支援,請在發現問題時 記錄 issue

  • #30076 實現 FocusTraversalPolicy 和 DefaultFocusTraversal 功能。
  • #30339 將按鈕新增到手勢中
  • #31329 新增 macOS 目標的 Xcode 構建指令碼
  • #31515 支援 macOS 的本地引擎和資產同步
  • #31567 移除 Linux 桌面 build/name 指令碼的需要
  • #31631 讓 Linux 使用本地引擎
  • #31699 重新提交:新增對 Tooltip 懸停的支援
  • #31802 重做“修復 Opacity 下的文字欄位選擇工具欄 (#31097)”
  • #31819 重做:將按鈕新增到手勢中
  • #31873 新增基本的 Linux 桌面檢查
  • #31935 重做#2:將按鈕新增到手勢中
  • #32025 使 Hover Listener 能夠響應變換
  • #32142 修復 RenderPointerListener,使其回撥不會在錯誤的時間被呼叫。
  • #32335 為 Windows 教授 flutter msbuild
  • #32776 文字欄位焦點和懸停支援。
  • #32838 被鍵盤隱藏的控制代碼
  • #32914 當按鈕和欄位停用時,不響應懸停和焦點。
  • #33090 [Material] 為按鈕新增對懸停、按下和聚焦文字顏色的支援。
  • #33277 在 flutter doctor 中實現 macOS 支援
  • #33279 修復首次焦點確定的問題。
  • #33298 新增操作和鍵盤快捷鍵對映支援
  • #33443 將 Windows 構建呼叫封裝在批處理指令碼中
  • #33454 確保 unpack 宣告必需的工件
  • #33477 修復滑鼠移出時呼叫 onExit
  • #33540 將本地引擎變數傳遞給 Windows 構建
  • #33608 重構 macOS 專案檔案
  • #33632 從源頭更新按鍵碼
  • #33636 為 macOS 實現外掛工具支援
  • #33695 為 shift、meta、alt 和 control 等按鍵新增偽鍵同義詞。
  • #33868 遊戲控制器按鈕支援
  • #33872 為 Windows 新增 'doctor' 支援
  • #33874 防止 Windows Web doctor 啟動 chrome
  • #34050 複製資產時限制 macOS 的開啟檔案數
  • #34376 為 macOS 上的 'driver' 支援新增缺失的元件
  • #34755 新增 Linux doctor 實現

動畫、滾動和影像

#

在此版本中,我們繼續對動畫、滾動和影像支援進行最佳化。

  • #21896 底部導航欄滾動
  • #28834 Sliver 動畫列表 #29677 修復當 Navigator 不是全屏時的 hero rectTween 計算
  • #32730 向 AnimationController 新增 reverseDuration
  • #32843 添加了一個缺失的 AnimationController dispose,該控制器曾導致 Ticker 洩露。
  • #31832 當其子項未填充整個範圍時,允許拖動 DSS
  • #33627 SliverFillRemaining 標誌適用於不同用例
  • #32853 在 consolidateHttpClientResponseBytes() 中新增 onBytesReceived 回撥
  • #32857 新增 debugNetworkImageHttpClientProvider
  • #32936 向 ImageStream 監聽器 API 添加了一些健全性檢查
  • #33729 更新 consolidateHttpClientResponseBytes() 以使用 compressionState
  • #33369 向 Image 新增載入支援

排版和可訪問性

#

我們還繼續致力於實現出色的排版和可訪問性,包括支援訪問 OpenType 字型特定功能,如 此示例 所示。

  • #31987 文字換行寬度
  • #33230 框架支援文字樣式中的字型功能
  • #33808 修復 ExpansionPanelList 在不必要時合併 header 語義
  • #34368 修復 semantics_tester
  • #34434 語義修復

基礎

#

和往常一樣,我們繼續最佳化基礎功能。

  • #30388 在 SearchDelegate 中新增 hintStyle
  • #30406 將 binaryMessenger 建構函式引數新增到平臺通道
  • #30612 為 FlexibleSpaceBarSettings 添加了必需的引數
  • #30796 Unbounded TextField 寬度錯誤
  • #30942 rectMoreOrLess equals,為 64 位 rect 做準備
  • #31282 停止預快取動態模式的工件。
  • #31485 防止在 hasScrolledBody 上丟擲異常
  • #31520 不要將空 OpacityLayer 新增到引擎
  • #31526 用真實實現替換無操作的 log reader
  • #31757 使 FlutterProject 工廠同步
  • #31807 使 const 可用於覆蓋 AssetBundle 的類
  • #31825 修復函式字面量中缺失的 return 語句
  • #31861 向 Constrained Chip 標籤計算新增水平填充
  • #31868 處理通知錯誤
  • #31889 開始透過共享介面抽象平臺邏輯構建
  • #32126 升級 multicast_dns 版本
  • #32192 將 PointerEvents 轉換為事件接收器的本地座標系
  • #32328 向 TextOverflow 添加了麵包屑
  • #32434 支援在處置舊 TabController 後替換它
  • #32528 預設情況下,點選模態底部工作表不會將其關閉
  • #33152 ModalRoute 在 didPopNext 時恢復之前的焦點
  • #33297 儀器化新增到應用流程
  • #33458 新增到應用度量
  • #33462 修復 strut 樣式的文字縮放
  • #33473 修復 23723 四捨五入錯誤
  • #33474 修復了 DropdownButton 在使用不包含 fontSize 的樣式時崩潰的問題
  • #33475 將語義處理器的宣告從 detector 移到 recognizer
  • #33488 在 diagnosticProperties 中使用 toFixedAsString 和 DoubleProperty
  • #33802 雙擊切換而不是錯誤
  • #33876 重新提交“框架支援文字樣式中的字型功能”
  • #33886 向 SchedulerBinding 新增 currentSystemFrameTimeStamp
  • #33955 向 ScaleDetector 新增 localFocalPoint
  • #33999 使用 viewPadding 更新 MediaQuery
  • #34055 修復工具欄切換異常
  • #34057 向 Divider 和 VerticalDivider 新增 endIndent 屬性
  • #34068 修復雙擊只讀文字...時出現的空選擇箭頭
  • #34081 報告當前未報告的非同步回撥錯誤。
  • #34175 如果內容不足,則不顯示捲軸
  • #34243 更新 Flutter.Frame 事件以使用新的引擎 API
  • #34295 為 Uint8List SDK 破壞性更改做準備
  • #34298 保留 SafeArea:第二部分
  • #34355 文字欄位垂直對齊
  • #34365 重構使用新引擎 API 的 Flutter.Frame 事件
  • #34508 將路由資訊新增到 Flutter.Navigation 事件
  • #34512 確保 fab 語義位於頂部
  • #34515 OutlineInputBorder 調整以適應過大的 borderRadius
  • #34519 修復頁面滾動位置四捨五入錯誤
  • #34526 快取下載期間的 HttpException 重試
  • #34529 移除編譯跟蹤和動態支援程式碼
  • #34573 確保 flutter jar 被新增到外掛專案的所有構建型別中
  • #34587 當層偏移量為零時,不要複製路徑、矩形和圓角矩形
  • #34932 向 TextFormField 添加了 onChanged 屬性
  • #35092 新增 FlutterProjectFactory 以便在內部覆蓋。
  • #33272 在 mergeAssets 任務中新增 mustRunAfter 以強制任務排序
  • #33535 DataTable 頁首和資料行的自定義高度引數
  • #33628 DataTable 自定義水平填充

工具

#

最後但同樣重要的是,我們還繼續對工具進行最佳化和簡化,包括在 Flutter 工具發現自己處於只讀目錄時提供更清晰的錯誤訊息(這是 Flutter 開發人員經常遇到的問題,我們希望這能有所幫助)。

  • #31342 在重新生成特定於平臺的工具之前檢查專案是否存在
  • #31399 為 build aot 新增 ignorable track-widget-creation 標誌
  • #31406 如果沒有 .ios 或 ios 子專案,則不嘗試為 iOS 構建
  • #31446 允許將裝置過濾為僅當前專案支援的裝置
  • #31591 確保在 Runner.xcodeproj 檔案丟失時提前退出
  • #31804 僅在 pubspec 中聲明瞭 asset 時構建 asset
  • #31812 修復 #31764:當 fonts pubspec.yaml 不可迭代時顯示適當的錯誤訊息
  • #32072 空 pubspec 不會 NPE
  • #33041 將 flutter packages 重新命名為 flutter pub
  • #33448 使用 vswhere 查詢 Visual Studio
  • #33472 新增 daemon 命令以列舉支援的平臺
  • #33924 向 flutter run 添加了 –dart-flags 選項
  • #33980 增加 daemon 協議版本以獲取 getSupportedPlatforms
  • #33990 為 daemon 新增裝置類別
  • #34181 重新提交“向 flutter run 添加了 –dart-flags 選項 (#33924)”
  • #34291 檢查 FLUTTER_ROOT 和 FLUTTER_ROOT/bin 是否可寫。
  • #34353 重構 Gradle 外掛
  • #34517 將 .packages 路徑傳遞給 snapshot 呼叫
  • #34527 當 .packages 檔案無效時,不崩潰
  • #34606 移除 Gradle 指令碼中與動態打補丁相關的部分
  • #34616 在測試未能幹淨退出時終止編譯器程序
  • #34624 將 flutter doctor 驗證和結果分解
  • #34683 新增只讀語義標誌
  • #34684 為錯誤新增更多結構。
  • #34685 測試完成後關閉平臺(處置編譯器並刪除字型檔案)
  • #34725 修復 flutter tools 中的 NPE
  • #34736 移除與動態打補丁相關的標誌
  • #34785 調整模擬器的顯示名稱
  • #34794 向 daemon 中的裝置新增 emulatorID 欄位
  • #34802 在命令列執行時優先選擇臨時裝置
  • #34859 修復垂直對齊迴歸
  • #35074 嘗試啟用工具覆蓋重構
  • #35084 將 findTargetDevices 移至 DeviceManager
  • #33284 確保我們也構建測試目標
  • #33867 移除命令列桌面和 Web 的環境變數保護
  • #33283 修復工具中的相對路徑和快照邏輯

完整問題列表

#

您可以在 此處 檢視此版本中已解決的所有 issue 列表。