handleCollectClassNames method

void handleCollectClassNames(
  1. int? id,
  2. Map<String, dynamic> params
)

Implementation

void handleCollectClassNames(int? id, Map<String, dynamic> params) {
  final ctx = dbgContext;
  if (ctx == null) {
    sendToFrontend(id, null);
    return;
  }

  final dynamic rawStyleSheetId = params['styleSheetId'];
  int? nodeId;
  if (rawStyleSheetId is int) {
    nodeId = ctx.getTargetIdByNodeId(rawStyleSheetId);
  } else if (rawStyleSheetId is String) {
    String sid = rawStyleSheetId;
    if (sid.startsWith('inline:')) {
      final String rest = sid.substring('inline:'.length);
      final int? nid = int.tryParse(rest);
      if (nid != null) nodeId = ctx.getTargetIdByNodeId(nid);
    } else {
      final int? nid = int.tryParse(sid);
      if (nid != null) nodeId = ctx.getTargetIdByNodeId(nid);
    }
  }

  final Set<String> classNames = <String>{};
  if (nodeId != null) {
    final BindingObject? obj = ctx.getBindingObject(Pointer.fromAddress(nodeId));
    if (obj is Element && obj is StyleElementMixin) {
      CSSStyleSheet? sheet = (obj as StyleElementMixin).styleSheet;
      // If sheet not parsed yet, parse from text content
      if (sheet == null) {
        final String? text = obj.collectElementChildText();
        if (text != null) {
          sheet = CSSParser(text).parse(
              windowWidth: obj.windowWidth,
              windowHeight: obj.windowHeight,
              isDarkMode: obj.ownerView.rootController.isDarkMode);
        }
      }
      if (sheet != null) {
        _collectClassesFromRules(sheet.cssRules, classNames);
      }
    }
  }

  sendToFrontend(id, JSONEncodableMap({'classNames': classNames.toList()}));
}