比方说,在Dart/Flutter中,您正在设计一个插件API,它有这样的功能:
static Future<void> startPlaying(Uint8List bytes) async {
_channel.invokeMethod('playBytes', bytes);
}
可以说,由于Dart的null安全功能,如果插件用户将"bytes"参数作为null传入(从而导致运行时崩溃(,我们不负责任,因为为了做到这一点,他们必须显式地打开可为null的变量,从而保证它不是null。
或者。。。我们还应该做其他事情吗,比如抛出异常?
如果声音为空安全性,则无法使用null
作为参数来调用该方法。
对于不健全的空安全,如果不是程序的每个库都选择了空安全,那么从技术上讲,可以将null
作为参数传递(因为非空安全库可能正在进行调用,或者可能正在将null
传递到其他空安全代码中,因为它假定为空安全,所以不会进行检查。(
作为额外的预防措施,您可以选择检查输入的值。这种语言让你很难做到这一点,因为在本地代码看起来是空安全的。类似的东西
if (bytes as dynamic == null) throw ArgumentError.notNull("bytes");
我个人不会为此而烦恼,除非如果null
设法进入代码中,确实存在出现严重错误的风险。它被记录为不允许null
值,大多数行为良好的代码都会尊重这一点。最终,当所有程序都完全为空安全时,该检查将只是死代码。
第一个:
如果你指的是在设备上使用应用程序的最终用户,你应该有一个validation
作为输入。
第二:
如果你的意思是有人尝试你的插件来编写应用程序。你可以添加required
关键字,如果不通过bytes
,dart分析会给用户错误。
static Future<void> startPlaying({required Uint8List bytes}) async {
_channel.invokeMethod('playBytes', bytes);
}