Skip to content

Releases: passsy/spot

v0.7.0

25 Dec 19:59
Compare
Choose a tag to compare
  • New prop API with hasWidgetProp() makes it easy to filter and assert properties of Widgets.
    This replaces the old hasProp() method which was based on way to complicated package:checks context.

    // Old ⛈️
    spotSingle<Checkbox>().existsOnce().hasProp(
        selector: (e) => e.context.nest(
          () => ['Checkbox', 'value'],
          (e) => Extracted.value((e.widget as Checkbox).value),
        ),
        match: (it) => it.equals(true),
      );
    // New ✨
    spotSingle<Checkbox>().existsOnce().hasWidgetProp(
        prop: widgetProp('value', (widget) => widget.value),
        match: (value) => value.isTrue(),
      );

    The prop API is also available for Element and RenderObject.

    New API methods for the prop API
    ├── Interface "NamedWidgetProp" added 
    ├── Interface "NamedElementProp" added 
    ├── Interface "NamedRenderObjectProp" added 
    ├── Function "widgetProp" added 
    ├── Function "elementProp" added 
    ├── Function "renderObjectProp" added 
    ├─┬ Class SelectorQueries
    │ ├── Method "whereWidgetProp" added 
    │ ├── Method "whereElementProp" added 
    │ └── Method "whereRenderObjectProp" added 
    └─┬ Class WidgetMatcherExtensions
    ├── Method "getWidgetProp" added 
    ├── Method "hasWidgetProp" added 
    ├── Method "getElementProp" added 
    ├── Method "hasElementProp" added 
    ├── Method "getRenderObjectProp" added 
    └── Method "hasRenderObjectProp" added 
    
  • Never miss asserting your WidgetSelector.
    All methods returning a WidgetSelector are now annotated with @useResult.
    This will cause a lint warning when you only define a WidgetSelector without asserting it.

    spot<FloatingActionButton>().withChild(spotIcons(Icons.add)); // warning, no assertion
    
    final plusFab = spot<FloatingActionButton>().withChild(spotIcons(Icons.add)); // ok, assigned
    spot<FloatingActionButton>().withChild(spotIcons(Icons.add)).existsOnce(); // ok, asserted
  • It is now easy to directly access the Widget of a SingleWidgetSelector with snapshotWidget().
    It also works for the associated Element and RenderObject. Use snapshotElement() and snapshotRenderObject().

    -final checkbox = spotSingle<Checkbox>().snapshot().widget;
    +final checkbox = spotSingle<Checkbox>().snapshotWidget();
    print(checkbox.checkColor);

v0.6.0

25 Dec 18:13
Compare
Choose a tag to compare
  • Add matchers .existsAtMostOnce() and .existsAtMostNTimes(x) #19
  • Add selector .withParent(parent)/.withParents([...]) #21
  • Add selector .withChild(child)/.withChildren([...]) #21
  • Child selectors now only match children #22
  • You can call act.tap() now with any WidgetSelector that returns a single widget #23

v0.5.0

30 Aug 23:38
Compare
Choose a tag to compare
  • Breaking act.tap is now async, use await act.tap() #17
  • New: spotText('foo') finds any text on screen using "contains". The new AnyText widget combines Text, SelectableText, RichText and EditableText #18
  • New: spotTextWhere((text) => ) allows to match text with custom logic #18
  • Deprecated: spotSingleText and spotTexts are deprecated in favor of spotText and the basic spot<Text>(), spot<SelectableText>(), ... #18
  • Fix: hasProp matcher can now check for null values with (it) => it.isNull() #18
  • Improvement: withDiagnosticProp now falls back to the default value of a DiagnosticNode #18
// deprecated
spotSingleText("Hello");
spotSingleText<Text>("Hello");
spotTexts<EditableText>("Hello");

// New
spotText("Hello");
spotText("Hello", exact: true);
spotTextWhere((it) => it.startsWith("He"));

// With exact widget type
spot<Text>().whereText((it) => it.equals("Hello")).first();

v0.4.1

18 Aug 00:53
Compare
Choose a tag to compare
  • Added screenshot methods #14
    /// Takes a screenshot of the entire window
    await takeScreenshot();
    
    /// Takes a screenshot of a single Screen/Widget
    final homePage = spotSingle<HomePage>();
    await takeScreenshot(selector: homePage);
    
    /// Use it as extension
    await spotSingle<HomePage>().takeScreenshot();
  • Export all types from checks.dart which are required to use hasProp
  • Update for Flutter 3.13

v0.3.2

17 Aug 14:50
Compare
Choose a tag to compare
  • Export all types from checks.dart which are required to use hasProp

v0.4.0

26 Jun 02:15
Compare
Choose a tag to compare
  • Added act.tap(button) to tap widgets #9
  • Raise min Flutter version to 3.10.0
  • Switch to the official checks package #12
  • Rename SingleWidgetSnapshot.discoveredElements -> SingleWidgetSnapshot.discoveredElement #11

v0.3.1

26 Jun 02:15
Compare
Choose a tag to compare
  • Fix compilation error with Flutter 3.0.0

v0.3.0

26 Jun 02:15
Compare
Choose a tag to compare
  • spotTexts now matches EditableText and SelectableText #5
  • spotTexts now has generic type <W> instead of static Text. This changes the return type from MultiWidgetSelector<Text> -> MultiWidgetSelector<W> #5
  • Changed signature of SingleWidgetSelector.withProp and MultiWidgetSelector.withProp.
  • New matchers for EditableText, ListTile, SelectableText

v0.2.0

28 Apr 12:58
Compare
Choose a tag to compare
  • Reworked spot API #3
  • Allow defining WidgetSelector with children
  • Allow defining WidgetSelector with parents
  • Interop with Finder API
  • Match properties of widgets (via DiagnosticsNode)
  • Allow matching of nested properties (with checks API)
  • Generate code for custom properties for Flutter widgets
  • Allow generating code for properties of 3rd party widgets