Flutter 1.5.4 版本說明
自 1.2 版本以來,我們持續專注於提升質量和穩定性。Flutter 1.5.4 穩定版在臨近 Google I/O 大會之際,增加了一系列新功能。此外,Apple 要求在 12.1 版本的 iOS SDK 中進行構建,本次更新已滿足此要求。您只需拉取 1.5.4 穩定版,構建並更新您的 Flutter 應用到 Apple Store,即可滿足 Apple 的要求。
此外,本次構建修復了 Flutter 1.2 中的兩個迴歸問題。
- #28640 NoSuchMethodError:**android.view.MotionEvent.isFromSource 已關閉,並在 1.3.7 版本之後的所有版本中得到修復。
- #28484 Flutter 更新後 Widget 顯示異常:1.4.0 版本中已對該回歸問題進行修復。
最後,關於其他修復和新功能的詳細資訊,請繼續閱讀。
重大變更
#我們最近的調查顯示,Flutter 開發者傾向於接受破壞性變更,如果這意味著 API 和 Flutter 的行為能夠得到改進。當然,我們仍然謹慎地進行破壞性變更。以下是本次釋出中的破壞性變更列表,以及每個變更的詳細描述和如何在 Flutter 程式碼中處理它們的連結。
- flutter#26261:CupertinoTextField 的 cursorColor 預設值現在與應用的 theme 匹配(公告與緩解措施)。
- flutter#26026:在使用原始 EditableText 時,需要手動觸發選擇工具欄(公告與緩解措施)。
- flutter#23148:提議修復統一 Firebase Messaging 外掛中 Android 和 iOS 的響應(公告與緩解措施)。
- flutter#28014:將 PointerEvent 轉換為 Diagnosticable(公告與緩解措施)。
- flutter#20183:CupertinoTextField:合併提供的 TextStyle 與 Theme 的 TextStyle(公告與緩解措施)。
- flutter#20693:長按手勢識別器(LongPressGestureRecognizer)在長按後移動不再會丟棄抬起事件(公告與緩解措施)。
- flutter#20693:GestureRecognizerState 列舉新增了 'accepted' 值(公告與緩解措施)。
- flutter#18314、flutter#22830、flutter#23424:Drag moveBy 呼叫存在兩個問題,並且所有帶有拖動識別器的 Widget 的預設 DragStartBehavior 已更改為 DragStartBehavior.start(公告與緩解措施)。
- flutter#27891:為所有平臺上的物理形狀複合層(composite layers)提供支援(公告與緩解措施)。
- flutter#19418:向 AndroidViewController 新增 onPlatformViewCreated(公告與緩解措施)。
- flutter#29070:BackdropFilter 將會填充其父/祖父剪裁區域(公告與緩解措施)。
- flutter#29816:FontWeight.lerp 在引數為 null 時返回 null(公告與緩解措施)。
- flutter#29696:提議將 PointerEnterEvent 和 PointerExitEvent 從 fromHoverEvent 重新命名為 fromMouseEvent(公告與緩解措施)。
- flutter#28602:允許從任何 PointerEvent 建立 PointerEnterEvent 和 PointerExitEvents。
- flutter#28953:在語義樹(semantics tree)中包含 platformViewId。
- flutter#27612:使用 strut 強制設定 TextField 的行高。
- flutter#30991:在 Android 上使用字形的完整高度來計算插入符(caret)的高度。
- flutter#30414:從部分指標事件中移除壓力(pressure)定製。
- engine#8274:[ui] 在 FontWeight.lerp 中新增 null 檢查。
嚴重的效能和崩潰修復
#在此版本中,我們修復了多個嚴重的效能和崩潰問題。
- flutter#30990:允許在 profile 模式下進行 profile widget 構建。
- flutter#30985:新增 rrect contains 微基準測試。
- flutter#28651:無法執行操作,因為 FlutterJNI 未附加到原生端。
iOS 變動
#對 iOS 的支援對 Flutter 團隊來說與對 Android 的支援同等重要,您可以看到我們在本版本中進行了大量的修改,以進一步改善 iOS 的體驗。
- flutter#29200:Cupertino 本地化第一步:新增英文 arb 檔案。
- flutter#29821:Cupertino 本地化 1.5 步:修復 cupertino_en.arb 中的資源不匹配問題。
- flutter#30160:Cupertino 本地化 1.9 步:為 cupertino_en.arb 新增所需的單數資源。
- flutter#29644:Cupertino 本地化第三步:就地移動部分 Material 元件工具,為 Cupertino 騰出空間。
- flutter#29650:Cupertino 本地化第四步:允許生成的日期本地化組合 Material 和 Cupertino 地區設定。
- flutter#29708:Cupertino 本地化第五步:新增法語 arb 作為翻譯示例。
- flutter#29767:Cupertino 本地化第六步:新增一個帶有日期時間格式的 GlobalCupertinoLocalizations 基類。
- flutter#30527:Cupertino 本地化第 11 步:在說明中新增更多翻譯說明。
- flutter#28629:確保在向右滑動返回時,Cupertino 頁面過渡中的所有內容都可以線性進行。
- flutter#28001:CupertinoTextField:添加了更改佔位符顏色的功能。
- flutter#29304:為 iOS 在語義樹中包含 platformViewId。
- flutter#29946:允許 CupertinoPageScaffold 在點選狀態列時滾動到頂部。
- flutter#29474:允許 CupertinoTextField 的清除按鈕也呼叫 onChanged。
- flutter#29008:更新 CupertinoTextField。
- flutter#29630:將心形新增到 CupertinoIcons 中。
- flutter#28597:調整剩餘的 Cupertino 路由動畫以匹配原生。
- flutter#29407:[cupertino_icons] 新增 circle 和 circle_filled,用於單選按鈕。
- flutter#29024:修復 CupertinoTabView 在檢視插值(view inset)變化時重新塑形的問題。
- flutter#28478:支援報告壓力資料為 0 的 iOS 裝置。
- flutter#29987:更新 CupertinoSwitch 文件。
- flutter#29943:移除導航欄和安全區域子元素之間不必要的間隙。
- flutter#28855:將 Material iOS 向後滑動測試移至 Material。
- flutter#28756:處理被 Navigator push 中斷的 Cupertino 後退手勢。
- flutter#31088:TextField 滾動物理。
- flutter#30946:新增更多 Cupertino 圖示。
- flutter#30521:在 CupertinoTheme 中提供預設的 IconTheme。
- flutter#30475:Trackpad 模式崩潰修復。
Material 元件變動
#當然,Material 元件仍然是 Flutter 團隊的重點。
- flutter#28290:[Material] 建立 FloatingActionButton ThemeData 並在 FloatingActionButton 中遵守它(#28735)。
- flutter#29980:修復賬戶抽屜頭部箭頭在呼叫 setState 時旋轉的問題。
- flutter#29563:拖動選擇文字時避免閃爍。
- flutter#29138:更新 DropdownButton 下劃線以支援自定義。
- flutter#29572:DropdownButton 圖示可定製性。
- flutter#29183:在 TabBarTheme 中實現 labelPadding 配置。
- flutter#21834:在 AppBar 中新增 shapeBorder 選項。
- flutter#28163:[Material] 新增為 Chip 和 Chip 主題設定陰影顏色和選中陰影顏色的功能。
- flutter#27711:使擴充套件 FAB 的圖示可選。
- flutter#28159:[Material] 擴充套件 BottomNavigationBar API(重述)。
- flutter#27973:向 Scaffold 新增 extendBody 引數,body 的 MediaQuery 反映 BAB 高度。
- flutter#30390:[Material] 使用新的尺寸、形狀和顏色對映更新 Slider 和 SliderTheme。
- flutter#29390:使 ExpansionPanel 可以透過點選其標題來選擇性地切換狀態。
- flutter#30754:[Material] 修復由舊上下文導致的 showDialog 崩潰。
- flutter#30525:修復輸入框寬度外的游標問題。
- flutter#30805:使用 Scaffold 模板更新 ExpansionPanelList 示例。
- flutter#30537:嵌入影像並將變體新增到 ListTile 示例程式碼中。
- flutter#30455:透過確保卡片尺寸適合螢幕,防止 shrine 中的垂直滾動。
- flutter#29413:僅使用 builder 時修復 MaterialApp 的 _navigatorObserver。
桌面端變動
#Flutter 在擴充套件對桌面級輸入機制的支援方面取得了進展,包括鍵盤對映、文字選擇、滑鼠滾輪和懸停,以及我們工具鏈中的桌面支援的初步工作。
- flutter#29993:為 Linux 新增鍵盤對映。
- flutter#29769:為 Cupertino 文字欄位新增透過滑鼠進行文字選擇的支援。
- flutter#22762:新增對滾輪的支援。
- flutter#28900:向 Cupertino 按鈕新增鍵盤支援。
- flutter#28290:透過滑鼠進行文字選擇。
- flutter#28602:允許從任何 PointerEvent 建立 PointerEnterEvent 和 PointerExitEvents。
- flutter#30829:使懸停(hover)註解層與滑鼠檢測器保持同步。
- flutter#30648:允許下載桌面嵌入工件。
- flutter#31283:向 doctor 新增桌面工作流。
- flutter#31229:為 Linux 和 Windows 新增 flutter run 支援。
- flutter#31277:將 track widget 建立標誌傳遞給構建指令碼。
- flutter#31218:為 macOS 目標新增 run 功能。
- flutter#31205:新增桌面專案和構建命令(實驗性)。
- flutter#30670:為 C++ Shell 實現 StandardMethodCodec。
框架變動
#除了平臺特定功能之外,我們還在繼續推進 Flutter 框架的核心。
- engine#8402:啟用關閉 VM 中的所有根 Isolate。
- flutter#31210:在 Android v2 上使用字形的完整高度來計算插入符(caret)的高度。
- flutter#30422:一旦抬起後退手勢,立即提交 navigator.pop。
- flutter#30792:重新命名 Border.uniform() 為 Border.fromSide()。
- flutter#31159:撤銷“在 Android 上使用字形的完整高度來計算插入符(caret)的高度”。
- flutter#30932:2D 變換使用者體驗改進。
- flutter#30898:檢查 ErrorWidget.builder 在測試後未被修改。
- flutter#30809:修復問題 23527:異常:RenderViewport 超出最大數量…
- flutter#30880:讓 sliver.dart 中的 _createErrorWidget 與其他 Widgets 一起工作。
- flutter#30876:簡化 toImage future 處理。
- flutter#30470:修復了 Table flex 列布局錯誤 #30437。
- flutter#30215:檢查無效的 elevation。
- flutter#30667:修復額外的 @mustCallSuper 間接覆蓋和 mixins。
- flutter#30814:修復 StatefulWidget 和 StatelessWidget 示例文件。
- flutter#30760:修復 invokeListMethod 和 invokeMapMethod 中的 cast NPE。
- flutter#30640:新增 const Border.uniformSide()。
- flutter#30644:使 FormField._validate() 返回 void。
- flutter#30645:為 FormFieldValidator 新增文件。
- flutter#30563:修復了 Expanded API 文件中的一個拼寫錯誤。
- flutter#30513:修復問題 21640:斷言錯誤 : '_listenerAttached': is not true。
- flutter#30305:更簡潔的可空列表副本。
- flutter#30468:BottomNavigationBar 的嵌入圖。
外掛變動
#在此版本中,Flutter 外掛也有一些變動,包括 camera、Google Maps、WebView、image_picker、Firebase 外掛,以及現在可供您的應用使用的 應用內購買外掛 beta 版。
- plugins#1477:[camera] 移除 Activity 生命週期。
- plugins#1022:[camera] 為 camera 外掛新增序列 dispatch_queue 以避免阻塞 UI。
- plugins#1331:[connectivity] 支援獲取當前 Wi-Fi 網路的 BSSID。
- plugins#1455:[connectivity] 添加了整合測試。
- plugins#1377:[firebase_admob] 更新文件以新增 iOS Admob ID,並在示例專案中新增 iOS Admob ID。
- plugins#1492:[firebase_analytics] 初始整合測試。
- plugins#896:[firebase-analytics] 為 iOS 啟用 setAnalyticsCollectionEnabled 支援。
- plugins#1159:[firebase_auth] 啟用無密碼登入。
- plugins#1487:[firebase_auth] 將 FlutterAuthPlugin 從已棄用的 API 遷移。
- plugins#1443:[firebase_core] 將 Gradle BoM 與 firebase_core 一起使用。
- plugins#1427:[firebase_crashlytics] 不要破壞除錯日誌格式。
- plugins#1437:[firebase_crashlytics] 修復 Fabric 初始化問題。
- plugins#1096:[firebase_database] 從 DatabaseError#toString() 返回錯誤訊息。
- plugins#1532:[firebase_messaging] 移除過時的文件說明。
- plugins#1405:[firebase_messaging] iOS 的附加步驟。
- plugins#1353:[firebase_messaging] 更新示例。
- plugins#1223:[firebase_ml_vision] 修復在 iOS 上掃描 URL QR 碼時崩潰的問題。
- plugins#1514:[firebase_remote_config] 初始整合測試。
- plugins#815:[google_maps_flutter] 添加了從位元組陣列(PNG)載入自定義圖示的支援。
- plugins#1229:[google_maps_flutter] Marker API 現在是基於 Widget 的(Android)。
- plugins#1421:[in_app_purchase] 使支付 API 統一。
- plugins#1380:[in_app_purchase] 載入購買。
- flutter#26329:IAP:購買自動續訂訂閱。
- flutter#26331:IAP:購買非續訂訂閱。
- flutter#26326:IAP:載入之前的購買記錄。
- plugins#1249:[in_app_purchase] payment queue dart ios。
- flutter#26327:IAP:購買解鎖。
- flutter#26328:IAP:購買消耗品。
- flutter#29837:當 barcode_scan 和 image_picker 一起使用時,image_picker 閃爍。
- flutter#17950:如果 Flutter Activity 在原生 Activity 顯示時被殺死,image_picker 外掛將失敗。
- flutter#18700:[image_picker] 在嘗試使用相機時,Galaxy S5 和 Note 4 崩潰。
- plugins#1372:[image_picker] 修復“如果先訪問了相機,則相簿中的取消按鈕不可見”。
- plugins#1471:[image_picker] 修復從 Google Photos 返回的無效路徑。
- flutter#29422:image_picker 錯誤:許可權拒絕。
- plugins#1237:[share] 將 share 外掛的 compileSdkVersion 改為 28。
- plugins#1373:[shared_preferences] 新增 contains 方法。
- plugins#1470:[video_player] Android:添加了缺失的 event.put("event", "completed");
- flutter#25329:[WebView] 允許 WebView 在即將載入 URL 時接管。
工具變動
#最後但同樣重要的是,我們對 Flutter 核心倉庫中的工具進行了一系列更改,以改善開發者的體驗,尤其是在提高熱過載效能方面(您以前覺得它還不夠快嗎!)。
- flutter#29693:使用編譯器中的源列表來跟蹤熱過載的失效檔案。
- flutter#28152:提高熱過載效能。
- flutter#29494:用於工具的覆蓋率生成指令碼的初始工作。
- flutter#31171:允許透過環境變數停用所有指紋快取。
- flutter#31073:Fuchsia 第一步:新增 SDK 版本檔案和工件下載。
- flutter#31064:為 flutter version 命令新增排序功能。
- flutter#31063:下載並處理 Flutter 打補丁的 SDK 的產品版本。
- flutter#31074:使 CoverageCollector 的 flutterProject 選項成為可選。
- flutter#30818:新的 flutter drive 標誌,用於跳過在裝置上安裝新應用。
- flutter#30867:新增 debugProfileWidgetBuilds 的切換開關。
- flutter#27034:更新了包模板的 .gitignore 檔案。
- flutter#30115:轉發丟失的 pub 命令。
- flutter#30254:Reland:確保 flutter run/drive/test/update_packages 只下載所需的工件。
- flutter#30153:允許在穩定分支上停用實驗性命令和裝置。
- flutter#30428:為 Arch Linux 更新 repair 命令。
此外,自 Flutter 上一個穩定版本以來,IDE 外掛也得到了一系列更新。
- Visual Studio Code:2019 年 2 月 21 日 (2.23.1)
- Visual Studio Code:2019 年 2 月 27 日 (2.24.0)
- IntelliJ/Android Studio:2019 年 3 月 29 日 (M34)
- Visual Studio Code:2019 年 4 月 17 日 (2.25.1)
- IntelliJ/Android Studio:2019 年 4 月 26 日 (M35)
- Visual Studio Code:2019 年 5 月 1 日 (2.26.1)
動態更新(又名 Code Push)
#最後,我們即將接近年中,是時候重新評估我們可以在哪些領域產生最重要的影響了。我們決定從 2019 年路線圖中移除動態更新(即 code push)的計劃。如果您對此原因感興趣,可以閱讀詳細解釋。放棄這項工作使我們能夠更加專注於質量,以及我們在 Flutter for Web 和 Flutter for Desktop 方面的實驗。
完整問題列表
#您可以在 此版本中提交的 PR 列表 檢視完整列表。