getObjectId method
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;
}