invoke method
Future
invoke(
- dynamic args
)
override
Implementation
@override
Future<dynamic> invoke(dynamic args) async {
if (!hadSetHandler) {
// 如果没有注册过回调监听的话,注册回调监听
methodChannel.setMethodCallHandler(methodCallHandler);
hadSetHandler = true;
}
args['argTypes'] = [];
// 参数处理
args['args'] = args['args'].map((dynamic arg) {
if (arg is RegisterCallback) {
// 如果 arg 是回调函数则特殊处理
dynamic result = arg.toJson();
args['eventId'] = result['eventId'];
args['argTypes'].add(result['argType']);
return result['arg'];
}
if (arg is int || arg is String || arg is bool || arg is double) {
} else if (arg is Object) {
try {
var toJsonMethod = (arg as dynamic)?.toJson;
if (toJsonMethod != null && toJsonMethod is Function) {
String argType = (arg as dynamic)?.nativeType ?? 'object';
args['argTypes'].add(argType);
return (arg as dynamic)?.toJson();
}
} catch (e) {
print(e);
}
}
// 不需要类型转换的普通类型
args['argTypes'].add(null);
return arg;
}).toList();
print(args);
final version = await methodChannel.invokeMethod<dynamic>('callSDK', args);
return version;
}