Flutter Platform Channels -只支持一个平台[已关闭]

0kjbasz6  于 2023-05-19  发布在  Flutter
关注(0)|答案(1)|浏览(174)

已关闭,此问题为opinion-based。目前不接受答复。
**想改善这个问题吗?**更新问题,以便editing this post可以用事实和引用来回答。

昨天关门了。
Improve this question
我正在编写一个Flutter应用程序,它将在Android和iOS设备上运行。在这个应用程序中,我使用平台频道用于各种目的,包括用户是否确认了一个对话框,这个对话框只在iOS上显示。所以我得到了true或false,在Android上,我可以继续运行我的代码,而不必进行这个查询。
我想知道什么是正确的方法来处理这个只在一个平台上需要的平台方法实现。目前我脑子里有三种可能性,我建议并希望听取意见,但也许还有一种完全不同的可能性。

选项一:

在Android上实现platform方法并返回默认值。

MethodChannel(flutterEngine.dartExecutor.binaryMessenger, "CHANNEL").setMethodCallHandler { call, result ->
            if (call.method == "methodName") {
                result.success(true)
            }
        }

选项二:

如果Dart代码中的查询是错误的平台,请不要执行平台方法。

if (Platform.isAndroid) return true;
try {
  final bool permission = await platform.invokeMethod("methodName", {});
  return permission;
}

选项三:

不执行任何实现,并通过捕获PlatformException返回默认值。

try {
  final bool permission = await platform.invokeMethod("methodName", {});
  return permission;
} on PlatformException catch (_) {
  return true;
}
dl5txlt9

dl5txlt91#

还有一个我最喜欢的选择。在插件的Flutter端捕获平台异常,并在不支持平台的情况下返回默认值。
这使得客户端代码更具可读性。如果你想添加对特定平台的支持,你可以很容易地做到这一点,而不需要在Flutter方面做任何改变。在这种情况下,您的客户将不必进行任何重构。

相关问题