getObjectId method

Future<String?> getObjectId(
  1. dynamic obj
)

Implementation

Future<String?> getObjectId(dynamic obj) async {
  final library = await searchLibrary(_vmToolsetLibrary);
  if (library == null || library.id == null) return null;
  VmService vmService = await getVMService();

  final mainIsolate = await getMainIsolate();
  if (mainIsolate?.id == null) return null;

  // 通过invoke进行方法调用 返回Response
  // 可以用来执行某个常规函数(getter、setter、构造函数、私有函数属于非常规函数),
  // 其中如果 targetId 是 Library 的 id,那么 invoke 执行的就是 Library 的顶级函数。
  Response keyResponse =
      await vmService.invoke(mainIsolate!.id!, library.id!, 'generateKey', []);
  final keyRef = InstanceRef.parse(keyResponse.json);
  String? key = keyRef?.valueAsString;
  if (key == null) return null;
  _objCache[key] = obj;

  try {
    Response valueResponse = await vmService
        .invoke(mainIsolate.id!, library.id!, 'keyToObj', [keyRef!.id!]);
    final valueRef = InstanceRef.parse(valueResponse.json);
    return valueRef?.id;
  } catch (e) {
    print('getObjectId $e');
  } finally {
    _objCache.remove(key);
  }
  return null;
}