hasRenderObjectProp<T, R extends RenderObject> method

WidgetMatcher<W> hasRenderObjectProp<T, R extends RenderObject>({
  1. required NamedRenderObjectProp<R, T?> prop,
  2. required MatchProp<T> match,
})

Asserts that a render object's property meets a specific condition.

This method is useful for making assertions on properties within the render object of the widget.

Example usage:

final isComplexProp = renderObjectProp<bool?, RenderCustomPaint>(
  'isComplex',
  (r) => r.isComplex,
);
spot<Checkbox>().spot<CustomPaint>().existsOnce().hasRenderObjectProp(
  prop: isComplexProp,
  match: (it) => it.isFalse(),
);

Implementation

WidgetMatcher<W> hasRenderObjectProp<T, R extends RenderObject>({
  required NamedRenderObjectProp<R, T?> prop,
  required MatchProp<T> match,
}) {
  void condition(Subject<Element> subject) {
    final Subject<T> value = subject.context.nest<T?>(
      () => ['RenderObject of $W', "with prop '${prop.name}'"],
      (element) {
        final value = getRenderObjectProp(prop);
        return Extracted.value(value);
      },
    ).hideNullability();

    match(value);
  }

  final failure = softCheckHideNull(element, condition);
  failure.throwPropertyCheckFailure(condition, element);
  return this;
}