getSelected function

Future<SelectedResult> getSelected(
  1. SelectedInput _
)

Retrieves the currently selected widget from the Flutter inspector.

Never throws; all error conditions are represented as sealed result cases.

Implementation

Future<SelectedResult> getSelected(SelectedInput _) async {
  try {
    final isolateId = await findFlutterIsolateId();
    if (isolateId == null) return const SelectedNoIsolate();

    final response = await vmServiceCall(
      'ext.flutter.inspector.getSelectedSummaryWidget',
      params: {'isolateId': isolateId, 'objectGroup': 'fdb_selected'},
    );

    final widget = unwrapExtensionResult(response);
    if (widget == null || widget is! Map<String, dynamic>) {
      return const SelectedNone();
    }

    final description = widget['description'] as String? ?? 'Unknown';
    final creationLocation = widget['creationLocation'] as Map<String, dynamic>?;

    if (creationLocation != null) {
      final file = (creationLocation['file'] as String? ?? '').split('/').last;
      final line = creationLocation['line'] as int?;
      final location = line != null ? '$file:$line' : file;
      return SelectedWidget(description: description, location: location);
    }

    return SelectedWidget(description: description);
  } on AppDiedException catch (e) {
    return SelectedAppDied(logLines: e.logLines, reason: e.reason);
  } catch (e) {
    return SelectedError(e.toString());
  }
}