概述

#

以前,Form 小部件本質上是其子項的直接包裝器。這種設計允許包含 sliver 子項的 Form(例如,Form(child: other sliver))在 CustomScrollView 或類似的滾動父項中被視為 sliver 本身。

然而,此 PR 在 Form 小部件的內部結構中引入了一個新的語義小部件。此更改改變了其渲染行為,這意味著 Form 不再可以直接作為 sliver 工作。

背景

#

此更改是改進 Flutter 小部件的可訪問性和語義理解的持續努力的一部分。透過直接在 Form 中嵌入語義小部件,框架可以為輔助功能服務提供更好的資訊。

變更說明

#

核心更改是將語義小部件整合到 Form 小部件的 build 方法中。

遷移指南

#

如果您的應用當前不將 Form 小部件直接用作滾動列表中的 sliver(例如,作為 CustomScrollView 的 slivers 屬性的直接子項),則無需進行任何更改。

如果您的應用將 Form 用作 sliver,您需要將 Form 小部件包裝在 SliverToBoxAdapter 中。SliverToBoxAdapter 是一個包含單個框小部件的 sliver,它將常規小部件轉換為可以放置在 CustomScrollView 中的 sliver。

遷移前的程式碼

dart
sliver: Form(
    key: controller.formKey,
    child: SomeWidgetWithFormFields(),
)

遷移後的程式碼

dart
sliver: SliverToBoxAdapter(
    child: Form(
        key: controller.formKey,
        child: SomeWidgetWithFormFields(),
    )
)

時間線

#

已合併於版本:3.35.0-pre
穩定版釋出:3.35

參考資料

#

API 文件

相關問題

相關 PR