Flutter 1.7.8 版本說明
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 程式碼中處理它們。
- #29188 修復 25807:在 sliver multibox 小部件中實現移動
- #29683 根據裝置型別顯示/隱藏工具欄和控制代碼
- #30040 為桌面平臺實現焦點遍歷,鞋拔子版。
- #30579 PointerDownEvent 和 PointerMoveEvent 的預設按鈕為 1
- #30874 重做“從某些指標事件中移除壓力自定義”
- #31227 新增 CupertinoTabController
- #31574 提高 RadioListTile 回撥行為一致性
- #32059 修復 issue 14014 只讀文字欄位
- #32842 允許“from”hero 狀態在 push 動畫中保留 hero 動畫
- #33148 ExpandIcon 自定義顏色
- #33164 因無使用且無測試而移除 Layer.replaceWith
- #33370 FadeInImage 更新以使用新的 Image API
- #34051 文字內聯小部件,TextSpan 重構 (#30069),改進了向後相容性
- #34095 Cupertino 文字編輯到 oltip,重構
- #34501 [Material] 修復 RangeSliderThumbShape 和 RangeSliderValueIndicatorShape 的 TextDirection 和 selected thumb
- #33946 重新提交“文字內聯小部件,TextSpan 重構”
嚴重崩潰修復
#在此版本中,我們還修復了若干崩潰問題。
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 列表。