Flutter 更新日誌 0.0.21 - 1.0.0
此頁面是從 Flutter wiki 的舊更新日誌頁面轉儲而來,直到 flutter.dev 釋出 Flutter 版本說明為止。
截至 1.0.0 的更改
#- Skia 和引擎更新,以解決以下問題
- 引擎更新以修復
- 為與模板一起提供的文件、文件和文件工具進行了各種修復。
自 v0.10.2 以來的更改
#flutter/engine#6883 - FlutterViewController 將不再預設載入應用的啟動畫面。該實現已移至新方法
loadDefaultSplashScreenView。#23755 移除了 flutter_test 對
package:test的直接依賴。Flutter 現在需要 test 版本 1.5.1 和 mockito 版本 4.0.0。重大更改
#這要求在您的 pubspec.yaml 中新增顯式依賴項
yamldev_dependencies: test: ^1.5.1#24024 和 flutter/engine#6760 將 harfbuzz 升級到 2.1.0,顯著提高了文字佈局和零寬度連線符 (zwj) 支援,以改善 iOS 上的 emoji 顯示。
#23417 在區域設定不可用或無效時提供
null,而不是_。#23583 使用 scriptCodes 和完整的首選區域設定列表支援改進了本地化演算法,當區域設定更改時會導致回調發生重大更改(傳遞列表而不是單個區域設定)。
v0.11.0
#v0.10.2 中的更改(自 v0.9.4 起)- beta 10
#v0.10.2
#v0.10.1
#- #22977 將大部分
Null替換為void。請參閱 提議此更改的郵件。 - #22985 實現正確的正交投影
- #23104 更新換行訊息
- #22924 支援停用互動式 TextField 插入符號和選擇
- #22870 使用新的
mixin語法用於 super-mixins - #22022 允許在 flutter create 中使用命令列選項 "--project-name"
- #23126 每次導航發生時都分發 Flutter.Navigation 事件。
- #23183 修復了從...
- #22394 修復 ClampingScrollSimulation 中超出範圍的彈簧模擬
- #23174 啟用 lint prefer_void_to_null
- #23184 TextTheme.apply() 不應假定 TextStyle 欄位非空
- #23168 添加了蒙古語 (mn) 翻譯
- #23167 修復了停用的表單欄位驗證
- #23015 在單行 TextField 上按下 Enter 鍵時完成編輯
- #23021 使 CocoaPods 更易於用於 iOS 的 Add2App
- #22825 修復 Curves.bounceInOut 數學
- #22977 偏好 void 而非 null
- #22822 添加了長按抬起回撥
- #18770 為 DropdownButton 添加了
disabledHint - #21657 使 AndroidView 接受手勢識別器工廠。
- #22449 添加了文字陰影支援
- flutter/engine#6644 向 Paragraph.getBoxesForRange() 添加了 BoxHeightStyle 和 BoxWidthStyle 作為引數,以獲取各種樣式的封閉框。
- Skia 更新,改變了模糊和抗鋸齒的底層實現,這可能會破壞黃金測試。
v0.9.7
#- flutter/engine#6393 向 Android MethodChannel/MethodCall 添加了可空性註解。
v0.9.6
#- #21251 添加了 CupertinoDatePicker,一個 iOS 風格的選擇器控制元件,支援日期模式和日期+時間模式。
v0.9.4 中的更改(自 v0.8.2 起)- beta 9
#v0.9.4
#- #21715,預設的 MaterialPageRoute 過渡現在由 Theme 定義。添加了對 Android P 樣式頁面過渡(可選)的支援。MaterialPageRoute 支援“託管”另一個路由以重用其 buildTransitions() 方法已被移除,因為 PageTransitionsBuilders(包括 CupertinoPageTransitionBuilder)是獨立的類。
v0.9.3
#- #22108 略微更改了
flutter doctor的輸出,這可能會影響依賴於確切輸出的自動化指令碼。
v0.9.2
#- #21540 向
Animatable添加了transform()方法。它由Tween(Animatable的主要子類)實現,但直接繼承Animatable的類需要實現它。通常可以將現有的evaluate()方法更改為實現transform(),使用transform()引數提供的值,而不是evaluate()提供的動畫的當前值。evaluate()現在有一個預設實現,它會呼叫transform()。
v0.8.2 中的更改(自 v0.7.3 起)- beta 8
#v0.7.4
#- #20322 在導航頁面之間執行
CupertinoNavigationBar和CupertinoSliverNavigationBar之間的視差過渡。
v0.7.3 中的更改(自 v0.6.0 起)- beta 7
#v0.7.3
#- #20966 添加了
CupertinoTimerPicker。
v0.7.2
#- #20929 修復了當鍵盤顯示時
CupertinoPageScaffold未正確內嵌內容的問題。
v0.7.1
#- #19637
CupertinoNavigationBar和CupertinoSliverNavigationBar現在會根據其CupertinoPageRoute.title自動填充其標題和後退按鈕標籤。
v0.6.0 中的更改(自 v0.5.1 起)- beta 6
#v0.6.0
#- Dart SDK 已更新為 Dart 2 版本(2.1.0-dev.0.0)。包和外掛作者應確保其
pubspec.yaml檔案包含一個 Dart SDK 約束,其上限為<3.0.0。有關詳細資訊,請參閱 為 Dart 2 做準備文章。 - #19025 將
CupertinoRefreshControl重新命名為CupertinoSliverRefreshControl以保持一致性。 - #19317 為 TextField(Material)游標添加了 CursorWidth 和 CursorRadius。
- #20116 將釋出二進位制檔案大小減少了約 2MB
- #20267 添加了 `CupertinoSegmentedControl`。
- #19232 添加了用於 iOS 風格底部彈出表的
CupertinoActionSheet。 - #20101 提高了
CupertinoScrollbar在超範圍滾動時的視覺保真度。 - #19789 為
CupertinoPicker添加了無限滾動和迴圈滾動支援。 - #18381 提高了
CupertinoAlertDialog的視覺保真度。
v0.5.8
#- #19284 為錯位圓柱投影添加了多列
CupertinoPicker支援。
v0.5.7
#- #18469 添加了一個
CupertinoApp用於建立 iOS 風格的應用。
v0.5.6
#- #18614 從 Flutter 匯出了
isInstanceOf函式,因為 package:matcher 棄用了其isInstanceOf的實現。 - flutter/engine#5517 啟用了
--sync-asyncDart 標誌。
v0.5.5
#- #18488 使
flutter trace的--debug-port引數成為必填項,因為之前的行為不可靠且會導致測試不穩定。
v0.5.2
#- #18096 更改了文字欄位中字元計數器的渲染,使其更符合 Material Design 規範。
v0.5.1 中的更改(自 v0.3.2 起)- beta 5
#v0.5.0
##17661 更改了
ListTile的佈局和大小,以更好地符合最新的 Material Design 規範。#17620 略微減小了
Checkbox、Radio和Switch的預設尺寸,以更好地符合最新的 Material Design 規範。#17637 更新了
Checkbox、Radio和Switch以使用ThemeDatatoggleableActiveColor。如果您使用的是淺色主題並且沒有在ThemeData中指定accentColor,這些控制元件現在將使用主色塊中對比度更高的顏色。#17586 向
TextStyle添加了一個新的background屬性。子類必須確保在建構函式和copyWith中處理此屬性。
v0.4.4 中的更改(自 v0.3.2 起)- beta 4
#v0.4.0
##17021 為 iOS 添加了隱式可訪問滾動。為此,視口在領先邊緣和尾隨邊緣之前定義了一個快取範圍,並且 sliver 在落入快取範圍時需要提供語義資訊。
重大更改
#透過此更改,當前在視口中不可見的視口子項現在被視為舞臺外。要在測試中查詢它們,請在 Finder 上指定
skipOffstage: false。
v0.3.6
##17094 引入了在 widget 測試中進行黃金影像測試的功能。在 widget 測試中,您現在可以使用以下匹配器來確保您的 widget 的柵格化影像與黃金檔案(例如
foo.png)匹配dartawait expectLater(find.byType(MyWidget), matchesGoldenFile('foo.png'));重大更改
#此更改的一個後果是,透過
flutter test執行的所有測試現在都明確依賴於package:flutter_test。flutter test的使用者需要更新其pubspec.yaml檔案,如果尚不存在,則包含以下內容yamldev_dependencies: flutter_test: sdk: flutter如果您的
pubspec.yaml不包含必需的依賴項,並且您執行flutter test,您將看到以下形式的錯誤compiler message: Error: Could not resolve the package 'flutter_test' in 'package:flutter_test/flutter_test.dart'.
v0.3.3
#flutter/engine#5060 引入了透過
Image.toByteData()將dart:ui Image編碼為 PNG 的功能。希望獲取編碼位元組的呼叫者可以透過傳遞format引數來實現,如下所示dartimage.toByteData(format: ui.ImageByteFormat.png);
v0.3.2 中的更改(自 v0.3.1 起)- beta 3
#v0.3.1 中的更改(自 v0.2.8 起)- beta 2 更新
#我們意識到 HttpClient 實現中存在證書驗證的潛在問題。要跟蹤我們的調查,請參閱 Dart issue 32936。
v0.3.1
#flutter/engine#4932 引入了一個具有眾多新功能的新 Shell 嵌入 API。特別是,單個程序現在可以託管多個 Flutter Shell。
flutter/engine#4762 和 flutter/engine#5008 引入了
Image.toByteData(),它用於獲取dart:ui中Image例項的原始 RGBA 位元組。#16721 iOS 上的滾動運動啟動已得到微調,以避免滾動開始移動時出現跳躍,並更準確地反映原生行為。
v0.2.11
#- #16039 和 #16447 大幅修改了
Chip的實現,添加了新的 Chip 型別:InputChip、ChoiceChip、FilterChip、ActionChip,並更新了 Chip 的外觀。
v0.2.9
#- #16187 更新了
Cardwidget 的形狀和elevation。
Dart 更改(自 Flutter v0.2.8 起)
#dart:async:移除了Stream.firstWhere和Stream.lastWhere上已棄用的defaultValue引數。dart:core:向int、double、num、BigInt、Uri和DateTime添加了tryParse靜態方法,並棄用了int.parse、double.parse和num.parse上的onError引數。- 現在始終可以省略
new關鍵字。const關鍵字是建立常量表達式所必需的,儘管在表示式內部,可以省略進一步的const關鍵字。
v0.2.8 中的更改(自 v0.2.3 起)- beta 2
#v0.2.8
#- #16040 添加了一個 API,允許透過
CupertinoTabBar的currentIndex以程式設計方式更改CupertinoTabScaffold的當前選項卡。
v0.2.5
##15416 從 Flutter 中移除了
package:http,並用dart:io中的HttpClient替換了所有用法。如果您使用package:http,則必須在pubspec.yaml中將其新增為依賴項才能繼續使用。createHttpClient()在被標記為棄用後也被移除了。要更改框架建立 http 客戶端的方式,您可以使用dart:io中的 HttpOverrides 為全域性或每個區域提供自己的createHttpClient()回撥。更多詳細資訊可在 公告中找到。
#15871 更改了
flutter create建立的AndroidManifest.xml的預設配置。“screenLayout”和“density”現在預設包含在 configChanges 屬性中,從而防止 Flutter 應用在這些屬性更改時重啟。#15324 添加了一個新的 CupertinoRefreshControl widget,樣式模仿 iOS 的下拉重新整理模式。Flutter Gallery 中提供了一個演示。
v0.2.4
##15565 預設開啟了 Dart 2 模式。要執行在 Dart 1 模式下,您仍然可以使用
--no-preview-dart-2。更多詳細資訊可在 公告中找到。
#15537 移除了 SemanticsSortOrder。從現在起,遍歷排序僅在同級節點之間進行。
更多詳細資訊可在 公告中找到。
#15484 更改了
TextFormFieldinitialValue建構函式引數的含義。TextFormField 的 initialValue 引數不再無條件地初始化其 TextEditingController 的 text 屬性。如果您建立一個 TextFormField 並提供一個 controller,則 initialValue 必須為 null,這現在是預設值。如果您提供了一個 controller,您可以透過 TextEditingController 的 text 屬性來指定其初始文字值。
之前
#new TextFormField( initialValue: 'Hello World', controller: _myTextEditingController, );
之後
#new TextFormField( controller: _myTextEditingController ..text = 'Hello World', ) // 或者更典型地: _myTextEditingController = new TextEditingController( text: 'Hello World', ); new TextFormField( controller: _myTextEditingController, );
#15303 更新了
showDialog函式以接受 builder 並棄用了widget引數。之前
#showDialog(context: context, child: new Text('hello'))
之後
#showDialog(context: context, builder: (BuildContext context) => new Text('hello'))
#15265 更新了
ThemeData以使用MaterialColor的主顏色,而不是在淺色主題中無條件使用 500 色調。顏色值保持不變。之前
#expect(widget.color, Colors.blue.shade500) // 主顏色
之後
#expect(widget.color, Colors.blue) // 主顏色
#15548 添加了除錯標誌
debugDisableClipLayers、debugDisablePhysicalShapeLayers和debugDisableOpacityLayers,以幫助診斷光柵化速度的效能。
v0.2.3 中的更改(自 v0.1.5 起)- beta 1 更新
#v0.2.0
#flutter/engine#4742 更新了資源以直接從 Android 的 APK 中讀取。因此,現在不支援影像資源路徑中的前導斜槓
之前
#new Image.asset('/foo/bar.png')
之後
#new Image.asset('foo/bar.png')
v0.1.9
#- #14901 Slider 的視覺更新更改了顏色、透明度和值指示器的形狀和行為。它還從 Slider 類中移除了“
thumbOpenAtMin”標誌,該標誌已不再需要,並且可以透過自定義拇指形狀支援來模擬。
v0.1.5 中的更改(自 v0.1.4 起)- beta 1.1
#v0.1.5
#v0.1.4 中的更改(自 v0.0.20 起)- beta 1
#v0.1.3
#- #14702 移除了 flutter 工具的
Version類中的engineDartVersiongetter。
v0.1.1
#flutter/engine#4607 和 #14601 移除了以下
dart:ui類的預設建構函式CodecFrameInfoGradientImageParagraphPictureSceneSemanticsUpdateShader
移除了預設建構函式是為了防止建立這些類的未初始化例項(在某些情況下是為了防止繼承這些類)。這些類只能由 Flutter 引擎例項化,或透過命名建構函式(如果提供)進行例項化。
v0.0.24
##14410 包含對
ButtonTheme的重大 API 更改- 建構函式
ButtonTheme()和ButtonTheme.bar()不再是const可構造的 ButtonTheme.textTheme現在是ButtonTheme.data.textThemeButtonTheme.minWidth現在是ButtonTheme.data.minWidthButtonTheme.height現在是ButtonTheme.data.heightButtonTheme.padding現在是ButtonTheme.data.padding
- 建構函式
#14410 更改了
FlatButton和RaisedButton的繼承層次結構 - 它們現在都繼承自RawMaterialButton,而不是MaterialButton。#14410 更改了
RaisedButton,使其在停用時不再投射陰影。
v0.0.23
#- #14343 修改了 EditableText 的複製、剪下和貼上工作方式:抽象類 TextSelectionControls 現在有新的方法 canCopy、canCut 等,以確定這些操作是否可用。TextSelectionDelegate 介面現在需要一個額外的方法 bringIntoView(TextPosition position) 來將 TextPosition 滾動到 TextField 的可見部分。此外,該介面不再由 TextSelectionOverlay 實現。取而代之的是 EditableTextState,它實現了該介面。另請參閱:flutter-dev/IHPndyUDy0M
Sliver API
##14449 用
SliverGridLayout.computeMaxScrollOffset方法替換了SliverGridLayout.estimateMaxScrollOffset方法。新方法必須報告一個準確的值,而不僅僅是估算值。這對於修復有限的SliverGrid無法處理滾動到螢幕頂部之外的問題(因為我們無法確定其內容量)是必要的。出於類似的原因,
RenderSliverBoxChildManager介面有一個新的 getterchildCount,如果createChild可以返回 null,則它必須返回一個非 null 值。實際上,實現此介面是不尋常的,因此這應該不會產生任何影響。更常見的是實現 widgets 層等效項SliverChildDelegate。此介面已經有一個estimatedChildCountgetter。getter 繼續存在,儘管其語義已略作調整,要求如果委託上的build方法返回 null,則返回的值必須準確。
v0.0.21
##13734、#14055 和 #14177 大幅修改了 InputDecorator 等 widget。輸入裝飾器的部件佈局略有變化,這意味著文字欄位的內部佈局也發生了變化。依賴於文字欄位內部幾何的測試需要更新。
此外,
hideDivider: true必須被新的border: InputBorder.none替換。這是我們使輸入渲染更易於自定義的一部分;您現在還可以提供自定義 InputBorder 子類,如果您對輸入裝飾有特別新穎的要求。#4528 和 #14011 棄用了標準平臺通道訊息/方法編解碼器中對大整數的支援,將在四周寬限期後不可用。此更改是由於過渡到 Dart 2.0,其中
int型別不再是無限大小。#4487 將
io.flutter.plugin.common.PluginRegistry中的所有RequestPermissionResult回撥概念替換為RequestPermissionsResult,添加了一個缺失的s以與相應的 Android SDK 概念保持一致。舊 API 已被棄用,將在後續版本中不可用。引入棄用和使舊 API 不可用的版本之間將有至少四周的寬限期。