invoke method

  1. @override
Future invoke(
  1. 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;
}