debugCheckHasOverlay function
- BuildContext context
Asserts that the given context has an Overlay ancestor.
To call this function, use the following pattern, typically in the relevant Widget's build method:
assert(debugCheckHasOverlay(context));
Always place this before any early returns, so that the invariant is checked in all cases. This prevents bugs from hiding until a particular codepath is hit.
This method can be expensive (it walks the element tree).
Does nothing if asserts are disabled. Always returns true.
Implementation
bool debugCheckHasOverlay(BuildContext context) {
assert(() {
if (LookupBoundary.findAncestorWidgetOfExactType<Overlay>(context) == null) {
final bool hiddenByBoundary = LookupBoundary.debugIsHidingAncestorWidgetOfExactType<Overlay>(context);
throw FlutterError.fromParts(<DiagnosticsNode>[
ErrorSummary('No Overlay widget found${hiddenByBoundary ? ' within the closest LookupBoundary' : ''}.'),
if (hiddenByBoundary)
ErrorDescription(
'There is an ancestor Overlay widget, but it is hidden by a LookupBoundary.'
),
ErrorDescription(
'${context.widget.runtimeType} widgets require an Overlay '
'widget ancestor within the closest LookupBoundary.\n'
'An overlay lets widgets float on top of other widget children.',
),
ErrorHint(
'To introduce an Overlay widget, you can either directly '
'include one, or use a widget that contains an Overlay itself, '
'such as a Navigator, WidgetApp, MaterialApp, or CupertinoApp.',
),
...context.describeMissingAncestor(expectedAncestorType: Overlay),
]);
}
return true;
}());
return true;
}