mirror of
https://github.com/flutter/flutter
synced 2024-10-13 03:32:55 +00:00
Allow waitUntilFirstFrameRasterized without a root widget (#56430)
This commit is contained in:
parent
e88ef6d554
commit
073126fdb3
|
@ -31,6 +31,9 @@ class WaitForCondition extends Command {
|
|||
|
||||
@override
|
||||
String get kind => 'waitForCondition';
|
||||
|
||||
@override
|
||||
bool get requiresRootWidgetAttached => condition.requiresRootWidgetAttached;
|
||||
}
|
||||
|
||||
/// A Flutter Driver command that waits until there are no more transient callbacks in the queue.
|
||||
|
@ -148,6 +151,20 @@ abstract class SerializableWaitCondition {
|
|||
'conditionName': conditionName
|
||||
};
|
||||
}
|
||||
|
||||
/// Whether this command requires the widget tree to be initialized before
|
||||
/// the command may be run.
|
||||
///
|
||||
/// This defaults to true to force the application under test to call [runApp]
|
||||
/// before attempting to remotely drive the application. Subclasses may
|
||||
/// override this to return false if they allow invocation before the
|
||||
/// application has started.
|
||||
///
|
||||
/// See also:
|
||||
///
|
||||
/// * [WidgetsBinding.isRootWidgetAttached], which indicates whether the
|
||||
/// widget tree has been initialized.
|
||||
bool get requiresRootWidgetAttached => true;
|
||||
}
|
||||
|
||||
/// A condition that waits until no transient callbacks are scheduled.
|
||||
|
@ -208,6 +225,9 @@ class FirstFrameRasterized extends SerializableWaitCondition {
|
|||
|
||||
@override
|
||||
String get conditionName => 'FirstFrameRasterizedCondition';
|
||||
|
||||
@override
|
||||
bool get requiresRootWidgetAttached => false;
|
||||
}
|
||||
|
||||
/// A condition that waits until there are no pending platform messages.
|
||||
|
|
|
@ -41,6 +41,17 @@ void main() {
|
|||
expect(waitForCondition.condition, equals(const NoTransientCallbacks()));
|
||||
expect(waitForCondition.timeout, equals(const Duration(milliseconds: 10)));
|
||||
});
|
||||
|
||||
test('WaitForCondition requiresRootWidget', () {
|
||||
expect(
|
||||
const WaitForCondition(NoTransientCallbacks())
|
||||
.requiresRootWidgetAttached,
|
||||
isTrue);
|
||||
expect(
|
||||
const WaitForCondition(FirstFrameRasterized())
|
||||
.requiresRootWidgetAttached,
|
||||
isFalse);
|
||||
});
|
||||
});
|
||||
|
||||
group('NoTransientCallbacksCondition', () {
|
||||
|
@ -113,6 +124,10 @@ void main() {
|
|||
throwsA(predicate<SerializationException>((SerializationException e) =>
|
||||
e.message == 'Error occurred during deserializing the FirstFrameRasterizedCondition JSON string: {conditionName: Unknown}')));
|
||||
});
|
||||
|
||||
test('FirstFrameRasterizedCondition requiresRootWidget', () {
|
||||
expect(const FirstFrameRasterized().requiresRootWidgetAttached, isFalse);
|
||||
});
|
||||
});
|
||||
|
||||
group('CombinedCondition', () {
|
||||
|
|
Loading…
Reference in a new issue