CircularProgressIndicatorなどのループアニメーションを含むWidgetがUIにあると、driver.tap()
やdriver.screenshot()
などのdriverへのアクションはフリーズします。
これは、flutter_driverにはUIの更新が終わるまでUIへの操作を待機させるframe sync
という機構が備わっているからです。
例
test('test', () async => {
// UIにプログレスバーなどのループアニメーションがあると実行されない
// =>テストがタイムアウト
await driver.tap(find.byValueKey('key'));
});
解決方法
runUnsynchronized
でframe sync
を無効にすればUIの更新終了を待たずに実行することができます
test('test', () async {
await driver.runUnsynchronized(() async {
// UIが更新途中でも実行される
await driver.tap(find.byValueKey('key'));
});
});