概述

#

本遷移指南描述瞭如何將使用各種靜態 `of` 函式來檢索上下文資訊(以前返回可空值,現在返回非可空值)的程式碼進行轉換。

背景

#

Flutter 中有一個常見的模式,允許使用靜態成員函式(通常稱為 `of`)來查詢某些型別的 widget(通常是 InheritedWidget,但也有其他型別)。

當可空性成為預設值後,就希望最常用的 API 返回非可空值。這是因為呼叫 `Scrollable.of(context)` 後仍然需要 `!` 運算子或 `?` 加上一個回退值,這感覺很彆扭,並且不符合非可空 Dart 程式碼的習慣用法。

之前的遷移 中,我們在消除 `nullOk` 引數時完成了大部分遷移,但其中一些 `of` 方法在此次遷移中被遺漏,還有一些隨後被添加了可空返回值型別,這與我們的通用模式相悖。

在此次遷移中,受影響的 `of` 訪問器被拆分為兩個呼叫:一個返回非可空值,並在找不到所需值時丟擲異常(仍稱為 `of`);另一個返回可空值,並且不丟擲異常,如果找不到值則返回 null(這是一個新方法,稱為 `maybeOf`)。

變更說明

#

此更改修改了這些靜態 `of` API,使其返回非可空值。如果找不到值,它們現在也會在除錯模式下斷言,並在釋出模式下丟擲異常。

此更改還在上述函式旁邊引入了新的靜態 `maybeOf` API,這些 API 返回相同值的可空版本,如果找不到值,則僅返回 null,而不會丟擲任何異常。

遷移指南

#

要將您的程式碼修改為使用新形式的 API,請首先將所有原始靜態 `of` 函式的例項(如果其可空性很重要)轉換為使用 `maybeOf` 形式。

遷移前的程式碼

dart
ScrollController? controller = Scrollable.of(context);

遷移後的程式碼

dart
ScrollController? controller = Scrollable.maybeOf(context);

然後,對於呼叫 `of` API 後跟感嘆號的例項,只需刪除感嘆號:它現在不能返回可空值。

遷移前的程式碼

dart
ScrollController controller = Scrollable.of(context)!;

遷移後的程式碼

dart
ScrollController controller = Scrollable.of(context);

以下內容也可能有所幫助

時間線

#

穩定版釋出於: 3.7

參考資料

#

API 文件

相關 PR