3

I am working with FlutterDriver, I have an IconButton defined and a key set as shown:

Center(
  child: IconButton(
    key: Key('moredots'),
    icon: Icon(Icons.more_vert),
    onPressed: () {
      showDialog(
        context: context,
        builder: (_) => tableConfig,        
      );
    },
  ),
)

The dialog is successfully shown with the following code:

await driver.tap(find.byValueKey('moredots'));

What I can't figure out is how to dismiss the dialog. I've tried:

  • Tapping the same value as shown above
  • Adding a key in Scaffold, finding the key and tapping
  • Adding keys in other UI elements in the hierarchy, finding and tapping

The error message I receive is:

FlutterDriver: tap message is taking a long time to complete...

John Muchow
  • 4,798
  • 8
  • 40
  • 40

2 Answers2

2

I figured out that showDialog() presents a ModalBarrier to stop user input while the dialog is shown.

The trick to close the showDialog is to find by type passing in the ModalBarrier as shown here:

await driver.tap(find.byType(ModalBarrier));
Burhanuddin Rashid
  • 5,260
  • 6
  • 34
  • 51
John Muchow
  • 4,798
  • 8
  • 40
  • 40
0

Add

Navigator.of(context).pop(false);

after

await driver.tap(find.byValueKey('moredots'));