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



比方说,在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);
}

最新更新