此頁面是從 Flutter wiki 的舊更新日誌頁面轉儲而來,直到 flutter.dev 釋出 Flutter 版本說明為止。

截至 1.0.0 的更改

#

自 v0.10.2 以來的更改

#
  • flutter/engine#6883 - FlutterViewController 將不再預設載入應用的啟動畫面。該實現已移至新方法 loadDefaultSplashScreenView

  • #23755 移除了 flutter_test 對 package:test 的直接依賴。Flutter 現在需要 test 版本 1.5.1 和 mockito 版本 4.0.0。

    重大更改

    #

    這要求在您的 pubspec.yaml 中新增顯式依賴項

    yaml
    dev_dependencies:
      test: ^1.5.1
  • #24024flutter/engine#6760 將 harfbuzz 升級到 2.1.0,顯著提高了文字佈局和零寬度連線符 (zwj) 支援,以改善 iOS 上的 emoji 顯示。

  • #23417 在區域設定不可用或無效時提供 null,而不是 _

  • #23583 使用 scriptCodes 和完整的首選區域設定列表支援改進了本地化演算法,當區域設定更改時會導致回調發生重大更改(傳遞列表而不是單個區域設定)。

v0.11.0

#
  • #23320 恢復了 Cupertino 導航欄的跨頁面過渡的滑動手勢支援。
  • #23320 支援跨多個 Navigator 的 Hero 過渡。

v0.10.2 中的更改(自 v0.9.4 起)- beta 10

#

v0.10.2

#
  • #23194 添加了 CupertinoTextField,一個 iOS 風格的文字輸入欄位。
  • #23221 為 Cupertino 導航欄的跨頁面過渡添加了 RTL 支援。

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

#

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

#
  • #21540Animatable 添加了 transform() 方法。它由 TweenAnimatable 的主要子類)實現,但直接繼承 Animatable 的類需要實現它。通常可以將現有的 evaluate() 方法更改為實現 transform(),使用 transform() 引數提供的值,而不是 evaluate() 提供的動畫的當前值。evaluate() 現在有一個預設實現,它會呼叫 transform()

v0.8.2 中的更改(自 v0.7.3 起)- beta 8

#

v0.7.4

#
  • #20322 在導航頁面之間執行 CupertinoNavigationBarCupertinoSliverNavigationBar 之間的視差過渡。

v0.7.3 中的更改(自 v0.6.0 起)- beta 7

#

v0.7.3

#
  • #20966 添加了 CupertinoTimerPicker

v0.7.2

#
  • #20929 修復了當鍵盤顯示時 CupertinoPageScaffold 未正確內嵌內容的問題。

v0.7.1

#
  • #19637 CupertinoNavigationBarCupertinoSliverNavigationBar 現在會根據其 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 做準備文章
  • #19025CupertinoRefreshControl 重新命名為 CupertinoSliverRefreshControl 以保持一致性。
  • #19317 為 TextField(Material)游標添加了 CursorWidth 和 CursorRadius。
  • #20116 將釋出二進位制檔案大小減少了約 2MB
  • #20267 添加了 `CupertinoSegmentedControl`。
  • #19232 添加了用於 iOS 風格底部彈出表的 CupertinoActionSheet
  • #20101 提高了 CupertinoScrollbar 在超範圍滾動時的視覺保真度。
  • #19789CupertinoPicker 添加了無限滾動和迴圈滾動支援。
  • #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-async Dart 標誌。

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 略微減小了 CheckboxRadioSwitch 的預設尺寸,以更好地符合最新的 Material Design 規範。

  • #17637 更新了 CheckboxRadioSwitch 以使用 ThemeData toggleableActiveColor。如果您使用的是淺色主題並且沒有在 ThemeData 中指定 accentColor,這些控制元件現在將使用主色塊中對比度更高的顏色。

  • #17586TextStyle 添加了一個新的 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)匹配

    dart
    await expectLater(find.byType(MyWidget), matchesGoldenFile('foo.png'));

    重大更改

    #

    此更改的一個後果是,透過 flutter test 執行的所有測試現在都明確依賴於 package:flutter_testflutter test 的使用者需要更新其 pubspec.yaml 檔案,如果尚不存在,則包含以下內容

    yaml
    dev_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 引數來實現,如下所示

    dart
    image.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#4762flutter/engine#5008 引入了 Image.toByteData(),它用於獲取 dart:uiImage 例項的原始 RGBA 位元組。

  • #16721 iOS 上的滾動運動啟動已得到微調,以避免滾動開始移動時出現跳躍,並更準確地反映原生行為。

v0.2.11

#
  • #16039#16447 大幅修改了 Chip 的實現,添加了新的 Chip 型別:InputChipChoiceChipFilterChipActionChip,並更新了 Chip 的外觀。

v0.2.9

#
  • #16187 更新了 Card widget 的形狀和elevation。

Dart 更改(自 Flutter v0.2.8 起)

#
  • dart:async:移除了 Stream.firstWhereStream.lastWhere 上已棄用的 defaultValue 引數。
  • dart:core:向 intdoublenumBigIntUriDateTime 添加了 tryParse 靜態方法,並棄用了 int.parsedouble.parsenum.parse 上的 onError 引數。
  • 現在始終可以省略 new 關鍵字。const 關鍵字是建立常量表達式所必需的,儘管在表示式內部,可以省略進一步的 const 關鍵字。

v0.2.8 中的更改(自 v0.2.3 起)- beta 2

#

v0.2.8

#
  • #16040 添加了一個 API,允許透過 CupertinoTabBarcurrentIndex 以程式設計方式更改 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 更改了 TextFormField initialValue 建構函式引數的含義。

    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 添加了除錯標誌 debugDisableClipLayersdebugDisablePhysicalShapeLayersdebugDisableOpacityLayers,以幫助診斷光柵化速度的效能。

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

#
  • #14714 修復了 Flutter Gallery 的 groovy 指令碼,從而修復了 #14912

v0.1.4 中的更改(自 v0.0.20 起)- beta 1

#

v0.1.3

#
  • #14702 移除了 flutter 工具的 Version 類中的 engineDartVersion getter。

v0.1.1

#
  • flutter/engine#4607#14601 移除了以下 dart:ui 類的預設建構函式

    • Codec
    • FrameInfo
    • Gradient
    • Image
    • Paragraph
    • Picture
    • Scene
    • SemanticsUpdate
    • Shader

    移除了預設建構函式是為了防止建立這些類的未初始化例項(在某些情況下是為了防止繼承這些類)。這些類只能由 Flutter 引擎例項化,或透過命名建構函式(如果提供)進行例項化。

v0.0.24

#
  • #14410 包含對 ButtonTheme 的重大 API 更改

    • 建構函式 ButtonTheme()ButtonTheme.bar() 不再是 const 可構造的
    • ButtonTheme.textTheme 現在是 ButtonTheme.data.textTheme
    • ButtonTheme.minWidth 現在是 ButtonTheme.data.minWidth
    • ButtonTheme.height 現在是 ButtonTheme.data.height
    • ButtonTheme.padding 現在是 ButtonTheme.data.padding
  • #14410 更改了 FlatButtonRaisedButton 的繼承層次結構 - 它們現在都繼承自 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

#
  • #14449SliverGridLayout.computeMaxScrollOffset 方法替換了 SliverGridLayout.estimateMaxScrollOffset 方法。新方法必須報告一個準確的值,而不僅僅是估算值。這對於修復有限的 SliverGrid 無法處理滾動到螢幕頂部之外的問題(因為我們無法確定其內容量)是必要的。

    出於類似的原因,RenderSliverBoxChildManager 介面有一個新的 getter childCount,如果 createChild 可以返回 null,則它必須返回一個非 null 值。實際上,實現此介面是不尋常的,因此這應該不會產生任何影響。更常見的是實現 widgets 層等效項 SliverChildDelegate。此介面已經有一個 estimatedChildCount getter。getter 繼續存在,儘管其語義已略作調整,要求如果委託上的 build 方法返回 null,則返回的值必須準確。

v0.0.21

#
  • #13734#14055#14177 大幅修改了 InputDecorator 等 widget。輸入裝飾器的部件佈局略有變化,這意味著文字欄位的內部佈局也發生了變化。依賴於文字欄位內部幾何的測試需要更新。

    此外,hideDivider: true 必須被新的 border: InputBorder.none 替換。這是我們使輸入渲染更易於自定義的一部分;您現在還可以提供自定義 InputBorder 子類,如果您對輸入裝飾有特別新穎的要求。

  • #4528#14011 棄用了標準平臺通道訊息/方法編解碼器中對大整數的支援,將在四周寬限期後不可用。此更改是由於過渡到 Dart 2.0,其中 int 型別不再是無限大小。

  • #4487io.flutter.plugin.common.PluginRegistry 中的所有 RequestPermissionResult 回撥概念替換為 RequestPermissionsResult,添加了一個缺失的 s 以與相應的 Android SDK 概念保持一致。

    舊 API 已被棄用,將在後續版本中不可用。引入棄用和使舊 API 不可用的版本之間將有至少四周的寬限期。