概述

#

以前,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