如何确保用户不会将 null 变量传递给 Flutter 插件?

How to ensure user does not pass null variable to Flutter plugin?

假设,在 Dart/Flutter 中,您正在设计一个插件 API 具有如下功能:

static Future<void> startPlaying(Uint8List bytes) async {
    _channel.invokeMethod('playBytes', bytes);
}

如果说由于 Dart 的 null 安全特性,我们不对插件用户将 'bytes' 参数作为 null 传入的事件负责(因此导致运行时崩溃)因为为了这样做,他们必须显式地解包一个可为空的变量,从而保证它不是空的。

或者...我们是否应该做一些其他事情,例如抛出异常?

第一个:

如果您指的是在设备上使用应用程序的最终用户,您应该有一个 validation 用于输入。

第二个:

如果您的意思是有人尝试使用您的插件来编写应用程序代码。 你可以添加 required 关键字,如果不通过 bytes.

则飞镖分析会给用户错误
static Future<void> startPlaying({required Uint8List bytes}) async {
    _channel.invokeMethod('playBytes', bytes);
}

使用 sound 空安全,无法以 null 作为参数调用该方法。

有了 不可靠的 空安全,如果不是你的程序的每个库都选择了空安全,这就是你得到的,技术上可以将 null 作为参数(因为 non-null 安全库可能正在执行调用,或者可能将 null 传递给其他空安全代码,因为它假定空安全而不会检查。)

您可以选择检查传入的值,作为额外的预防措施。 该语言使您很难做到这一点,因为代码在本地看起来是空安全的。 像

if (bytes as dynamic == null) throw ArgumentError.notNull("bytes");

我个人不会为此烦恼,除非如果 null 设法进入代码,确实存在出现严重错误的风险。 它被记录为不允许 null 值,大多数 well-behaved 代码都会遵守这一点。最终,当所有程序都完全安全时,该检查将只是死代码。