将 `of` 迁移到非空返回值,并添加 `maybeOf`
摘要
#本迁移指南描述了如何转换使用各种静态 of
函数从上下文检索信息的代码,这些函数以前返回可空值,但现在返回非空值。
上下文
#Flutter 有一种常见的模式,允许使用静态成员函数(通常称为 of
)查找某些类型的 Widget(通常是 InheritedWidget
,但也包括其他类型)。
当非空性成为默认值时,希望最常用的 API 返回非空值。这是因为在调用 Scrollable.of(context)
后仍然需要使用 !
运算符或 ?
和回退值会让人感觉很笨拙,并且对于非空 Dart 代码来说也不符合惯例。
在 之前的一次迁移中,我们消除了 nullOk
参数,并且完成了许多此类迁移,但一些 of
方法在该迁移中被遗漏了,并且随后添加了一些具有可空返回类型的 of
方法,这与我们的通用模式相悖。
在此迁移中,受影响的 of
访问器被拆分为两个调用:一个返回非空值并在找不到所需值时抛出异常(仍然称为 of
),另一个返回可空值且不抛出异常,如果找不到值则返回 null(一个名为 maybeOf
的新方法)。
更改说明
#此更改修改了这些静态 of
API 以返回非空值。如果找不到值,它们现在还将在调试模式下进行断言,并在发布模式下抛出异常。
AutofillGroup.of
DefaultTabController.of
DefaultTextHeightBehavior.of
Form.of
HeroControllerScope.of
Material.of
Overlay.of
PageStorage.of
PrimaryScrollController.of
RenderAbstractViewport.of
RestorationScope.of
Scrollable.of
ScrollNotificationObserver.of
此更改还在上述函数旁边引入了新的静态 maybeOf
API,它们返回相同值的可选版本,如果找不到值,则简单地返回 null,而不会抛出任何异常。
AutofillGroup.maybeOf
DefaultTabController.maybeOf
DefaultTextHeightBehavior.maybeOf
Form.maybeOf
HeroControllerScope.maybeOf
Material.maybeOf
Overlay.maybeOf
PageStorage.maybeOf
PrimaryScrollController.maybeOf
RenderAbstractViewport.maybeOf
RestorationScope.maybeOf
Scrollable.maybeOf
ScrollNotificationObserver.maybeOf
迁移指南
#要修改代码以使用 API 的新形式,首先将原始静态 of
函数(其可空性很重要)的所有实例转换为使用 maybeOf
形式。
迁移前的代码
ScrollController? controller = Scrollable.of(context);
迁移后的代码
ScrollController? controller = Scrollable.maybeOf(context);
然后,对于代码调用 of
API 后跟感叹号的实例,只需删除感叹号:它不再能够返回可空值。
迁移前的代码
ScrollController controller = Scrollable.of(context)!;
迁移后的代码
ScrollController controller = Scrollable.of(context);
以下内容可能也有帮助
unnecessary_non_null_assertion
(代码分析器消息)标识应删除!
运算符的位置unnecessary_null_checks
(分析选项)标识不需要?
运算符的位置unnecessary_null_in_if_null_operators
标识不需要??
运算符的位置unnecessary_nullable_for_final_variable_declarations
(分析选项)查找final
和const
变量上不必要的问号运算符
时间线
#稳定版本:3.7
参考文献
#API 文档
相关 PR
除非另有说明,否则本网站上的文档反映了 Flutter 的最新稳定版本。页面上次更新于 2024-04-04。 查看源代码 或 报告问题。