Flutter - returns 自定义对象的 PlatformChannel 绑定方法
Flutter - PlatformChannel binding methods that returns custom Objects
我正在玩 Flutter 中的 PlatformChannel 和 MethodChannel。做一些基本操作......正在为 flutter 进行 opencv 移植......但我不知道如何解决这个问题!
调用简单方法没有问题,returns 基本类型的对象,如下所示:
Android:
@Override
public void onMethodCall(final MethodCall call, final Result result) {
switch (call.method) {
case "getVersionString":
result.success(org.opencv.core.Core.getVersionString());
break;
default:
result.notImplemented();
}
}
飞镖:
Future<String> get versionString async {
return await _channel.invokeMethod('getVersionString') as String;
}
但是如果我有一些自定义对象怎么办?类似于:
Android:
@Override
public void onMethodCall(final MethodCall call, final Result result) {
switch (call.method) {
case "getVersionString":
result.success(org.opencv.core.Core.getVersionString());
break;
case "Scalar":
result.success(org.opencv.core.Core.Scalar());
break;
default:
result.notImplemented();
}
}
}
飞镖:
class Scalar {
static const MethodChannel _channel = MethodChannel('flutter_opencv');
// WHAT TO DO HERE??????
}
如何实现 Scalar dart class?我需要从原始来源开始重写 class 还是什么?
感谢关注
StandardMessageCodec
只能发送certain types越界。此外,您不能跨边界发送 Java class - 它会在 Dart 端变成什么?
您可以做一些事情:
将Java对象序列化为JSON,传输字符串,然后反序列化为Dart对象
将Java对象的字段放入HashMap(key为字符串,value为支持的类型),传递(会显示为Map<String, dynamic>
)并访问字段。
编写您自己的编解码器(或 subclass 标准编解码器),您最终基本上完成了 (2),但字符串字段名称的开销较少。 (这很棘手...)
我正在玩 Flutter 中的 PlatformChannel 和 MethodChannel。做一些基本操作......正在为 flutter 进行 opencv 移植......但我不知道如何解决这个问题!
调用简单方法没有问题,returns 基本类型的对象,如下所示:
Android:
@Override
public void onMethodCall(final MethodCall call, final Result result) {
switch (call.method) {
case "getVersionString":
result.success(org.opencv.core.Core.getVersionString());
break;
default:
result.notImplemented();
}
}
飞镖:
Future<String> get versionString async {
return await _channel.invokeMethod('getVersionString') as String;
}
但是如果我有一些自定义对象怎么办?类似于:
Android:
@Override
public void onMethodCall(final MethodCall call, final Result result) {
switch (call.method) {
case "getVersionString":
result.success(org.opencv.core.Core.getVersionString());
break;
case "Scalar":
result.success(org.opencv.core.Core.Scalar());
break;
default:
result.notImplemented();
}
}
}
飞镖:
class Scalar {
static const MethodChannel _channel = MethodChannel('flutter_opencv');
// WHAT TO DO HERE??????
}
如何实现 Scalar dart class?我需要从原始来源开始重写 class 还是什么?
感谢关注
StandardMessageCodec
只能发送certain types越界。此外,您不能跨边界发送 Java class - 它会在 Dart 端变成什么?
您可以做一些事情:
将Java对象序列化为JSON,传输字符串,然后反序列化为Dart对象
将Java对象的字段放入HashMap(key为字符串,value为支持的类型),传递(会显示为
Map<String, dynamic>
)并访问字段。编写您自己的编解码器(或 subclass 标准编解码器),您最终基本上完成了 (2),但字符串字段名称的开销较少。 (这很棘手...)