Flutter 创建 Android 平台特定代码

17 Mar 2025 | 4 分钟阅读

在本节中,我们将了解如何在 Flutter 中编写自定义的平台特定代码。 Flutter 是一个优秀的框架,它提供了一种处理/访问平台特定功能的机制。此功能允许开发人员扩展 Flutter 框架的功能。一些可以通过框架轻松访问的重要平台特定功能包括相机、电池电量、浏览器等。

Flutter 使用灵活的系统来调用平台特定的 API,这些 API 可以在 Java 或 Kotlin 代码中的 Android 上使用,也可以在 Objective-C 或 Swift 代码中的 iOS 上使用。 在 Flutter 中访问平台特定代码的一般思路是通过**消息传递协议**。消息使用公共消息通道在**客户端** (UI) 和**主机** (平台) 之间传递。这意味着客户端通过使用此消息通道向主机发送消息。接下来,主机监听该消息通道,接收消息,执行适当的功能,最后将结果返回给客户端。

以下框图显示了适当的平台特定代码架构。

Flutter Creating Android Platform-Specific Code

消息传递通道使用标准消息**编解码器**(StandardMessageCodec 类),它支持 JSON 类似值的高效二进制序列化,例如字符串、布尔值、数字、字节缓冲区以及列表和映射等。当您发送和接收值时,这些值的序列化和反序列化在客户端和主机之间自动工作。

下表显示了 Dart 值如何在 Android 和 iOS 平台上接收,反之亦然

DartAndroidiOS
nullnullnil (嵌套时为 NSNull)
booljava.lang.BooleanNSNumber numberWithBool
intjava.lang.IntegerNSNumber numberWithInt
doublejava.lang.DoubleNSNumber numberWithDouble
Stringjava.lang.StringNSString
Uint8Listbyte[]FlutterStandardTypedData typedDataWithBytes
Int32Listint[]FlutterStandardTypedData typedDataWithInt32
Int64Listlong[]FlutterStandardTypedData typedDataWithInt64
Float64Listdouble[]FlutterStandardTypedData typedDataWithFloat64
列表java.util.ArrayListNSArray
Mapjava.util.HashMApNSDictionary

让我们创建一个简单的应用程序来演示如何调用平台特定的 API 来打开浏览器。为此,我们需要在 Android Studio 中创建一个 Flutter 项目,并在 **main.dart** 文件中插入以下代码。

在上面的文件中,我们导入了一个 **service.dart** 文件,该文件包含调用平台特定代码的功能。在 **MyHomePage** widget 中,我们创建了一个消息通道并编写了一个方法 _**openBrowser** 来调用平台特定的代码。

最后,我们创建了一个按钮来打开浏览器。

现在,我们需要提供自定义的平台特定实现。为此,请导航到 Flutter 项目的 **Android 文件夹**,然后选择 Java 或 Kotlin 文件,并将以下代码插入到 **MainActivity** 文件中。此代码可能会根据 Java 或 Kotlin 语言而变化。

在 **MainActivity.kt** 文件中,我们创建了一个方法 **openBrowser()** 来打开浏览器。

输出

现在,在您的 Android Studio 中运行该应用程序,您将获得以下输出。 当您单击按钮 **Click Here** 时,您可以看到浏览器主页屏幕已启动。

Flutter Creating Android Platform-Specific Code
Flutter Creating Android Platform-Specific Code
下一个主题Flutter 包