transformToPlatformConstructorArgs method

List transformToPlatformConstructorArgs(
  1. List args,
  2. List<int> indices,
  3. Map<String, dynamic> typeMap,
  4. Map<String, dynamic> enumMap,
  5. Map<String, dynamic> classMap,
  6. String platformVar,
)
inherited

实例化参数处理 将 pack 过后的 enum / class 转成 android / ios 平台侧的 enum / class

Implementation

List<dynamic> transformToPlatformConstructorArgs(
  List<dynamic> args,
  List<int> indices,
  Map<String, dynamic> typeMap,
  Map<String, dynamic> enumMap,
  Map<String, dynamic> classMap,
  String platformVar,
) {
  if (indices.length == 0) {
    return [];
  }
  List<dynamic> params = [];
  for (int i = 0; i < indices.length; i++) {
    int argsIdx = indices[i];
    String type = typeMap['paramType-$argsIdx'];
    // collectionType genericKind typeName
    String collectionType = type.split(' ')[0];
    String genericKind = type.split(' ')[1];
    String typeName = type.split(' ')[2];
    dynamic arg = args[argsIdx];
    if (arg == null) {
      params.add(null);
      continue;
    }
    // 如果类别是 enum / class 且不是以平台侧 enum / class  传入的话
    // 需要转成 平台侧的 的 enum / class  传递给构造函数
    if (collectionType == '' &&
        genericKind == 'enum' &&
        !typeName.startsWith(platformVar)) {
      params.add(enumMap[typeName](arg));
    } else if (collectionType == '' &&
        genericKind == 'class' &&
        !typeName.startsWith(platformVar)) {
      params.add(classMap[typeName](arg));
    } else if (collectionType == 'List' &&
        genericKind == 'class' &&
        !typeName.startsWith(platformVar)) {
      List<dynamic> l = [];
      for (int j = 0; j < arg.length; j++) {
        l.add(classMap[typeName](arg[j]));
      }
      params.add(l);
    } else if (collectionType == 'List' &&
        genericKind == 'enum' &&
        !typeName.startsWith(platformVar)) {
      List<dynamic> l = [];
      for (int j = 0; j < arg.length; j++) {
        l.add(enumMap[typeName](arg[j]));
      }
      params.add(l);
    } else {
      params.add(arg);
    }
  }
  return params;
}