Form 小部件不再支持作为 sliver。
概述
#以前,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