温馨提示  2024年 6月我们已经停止开发者板块文章内容更新,谢谢来访。存档数据
知识 2024-01-14 23 次阅读

Flutter安卓混合开发疑问解答

Flutter 是一种跨平台开发框架,可用于开发 安卓 和 iOS 应用。它使用 Dart 语言编写,支持混合开发,可以将移动应用程序构建在原生平台之上,同时也支持 Web 和 Flutter 平台。
使用 Flutter,您可以使用一套代码库开发应用程序,同时利用各种平台的优势,例如在 安卓 上使用本地性能和功能,可是在 iOS 上使用平台原生外观和体验。除此之外,Flutter 还提供了丰富的 UI 组件和动画效果,使开发人员能够快速构建高质量的用户界面。
总的来说,Flutter 是一种强大的跨平台开发框架,适用于 安卓 混合开发,能够提供一致的用户体验并充分利用各种平台的优势。

Flutter 是一款跨平台开发框架,可以同时开发出 iOS 和 安卓 应用,Flutter 集成了 Dart 语言、框架和工具,并提供了很多高级功能。

Flutter的UI框架使用了一种全新的方法来构建UI——基于组件的构建模式,即Flutter UI组件是一个直接继承自StatefulWidget或StatelessWidget,并且可以直接嵌套在其它组件里面的完全封装的UI组件。而这些组件在运行时可以直接通过硬件加速来执行,这使得Flutter的UI性能比传统的安卓和iOS原生开发效果更好。

Flutter通过Dart和C++来与原生交互,即如果我们想使用安卓或iOS SDK提供的API或实现一些底层功能,比如说推送、地图等,就需要通过Flutter和原生之间的交互来实现。

Flutter 与原生交互的方案主要有以下几种

1. MethodChannel

MethodChannel 是Flutter与原生通信的最基础的渠道之一。它可以实现Flutter和原生方法的互相调用。原理是通过二进制消息来实现同步和异步调用的。

在 Flutter 代码中,需要使用 MethodChannel ,并指定 channel name,用于指定 MethodChannel 的名称。

在原生代码中,也需要使用 MethodChannel,需要指定与 Flutter 对应的 channel name。

MethodChannel 的同步调用方法

```dart

Future invokeMethod(String method, [dynamic arguments]);

```

MethodChannel 的异步调用方法

```dart

Future invokeMethod(String method, [dynamic arguments]);

```

MethodChannel 的 handler 回调

```dart

handler.setMessageHandler((message) => Future(() async {

if (message.content = yourMethod) {

// do something

}

return some return message;

}));

```

2. BasicMessageChannel

BasicMessageChannel 可以发送和接收任何 Dart 类型的数据。它也是使用二进制消息进行传输的。

在 Flutter 代码中,需要使用 BasicMessageChannel,并指定消息类型,用于指定 BasicMessageChannel 消息的类型。

在原生端,也需要使用 BasicMessageChannel,并且需要指定 BasicMessageChannel 的名称和消息类型。

BasicMessageChannel 的发送方法

```dart

Future send(T1 message);

```

BasicMessageChannel 的接收方法

```dart

handler.setMessageHandler((dynamic message) async {

if (message.content = yourMessage) {

// do something

return some return message;

}

});

```

3. EventChannel

EventChannel 是用于传输序列化 Java 或 ObjC 对象的平台通道。它可以在 Dart 和平台的另一侧进行双向传输。

在 Flutter 代码中,需要使用 EventChannel,并指定 channel name,用于指定 EventChannel 的名称。

在原生代码中,也需要使用 EventChannel,需要指定与 Flutter 对应的 channel name。

EventChannel 的监听方法

```dart

Stream receiveBroadcastStream();

```

EventChannel 的发送方法

```dart

- (FlutterError* ,Nullable) send:(nullable id)message

eventSink:(nonnull FlutterEventSink)events;

```

最后,需要在原生代码中注册通道,FlutterEngine 会自动注册 MethodChannels 和 BasicMessageChannels。在目标原生界面中,我们可使用 MethodChannel 和 BasicMessageChannel 来与 Flutter 进行通信。

总结下来,Flutter 与原生交互的方案非常丰富,能够依据实际需求进行选择。这些方案对于提高开发效率、减少工作量以及实现复杂的业务逻辑都非常有帮助。