[flutter_driver] Flutter統合テストでdriverアクションがフリーズしてしまう問題を解決する


CircularProgressIndicatorなどのループアニメーションを含むWidgetがUIにあると、driver.tap()driver.screenshot()などのdriverへのアクションはフリーズします。
これは、flutter_driverにはUIの更新が終わるまでUIへの操作を待機させるframe syncという機構が備わっているからです。

test('test', () async => {
  // UIにプログレスバーなどのループアニメーションがあると実行されない
  // =>テストがタイムアウト
  await driver.tap(find.byValueKey('key'));
});

解決方法

runUnsynchronizedframe syncを無効にすればUIの更新終了を待たずに実行することができます

test('test', () async {
  await driver.runUnsynchronized(() async {
    // UIが更新途中でも実行される
    await driver.tap(find.byValueKey('key'));
  });
});