resolveSettings static method
LiquidGlassSettings
resolveSettings(
- BuildContext context, {
- LiquidGlassSettings? explicit,
- LiquidGlassSettings fallback = const LiquidGlassSettings(),
Resolves LiquidGlassSettings for a widget using the full priority chain.
This is the theme-aware counterpart to InheritedLiquidGlass.ofOrDefault.
Unlike that method, it adds a final GlassThemeData fallback so that
standalone widgets (not wrapped in AdaptiveLiquidGlassLayer) still
receive a visible glassColor on light and dark backgrounds.
Priority chain (highest → lowest):
explicit— the widget's ownsettings:parameter (non-null wins).- InheritedLiquidGlass — settings from nearest parent layer.
- LiquidGlassWidgets.globalSettings — app-level global override.
- GlassThemeData — brightness-aware theme settings (light/dark).
- LiquidGlassSettings default — absolute last resort.
Call sites in GlassButton, GlassContainer, and GlassTextField use
this instead of InheritedLiquidGlass.ofOrDefault() so that a standalone
GlassButton(useOwnLayer: true) is never invisible on a white background.
Implementation
static LiquidGlassSettings resolveSettings(
BuildContext context, {
LiquidGlassSettings? explicit,
LiquidGlassSettings fallback = const LiquidGlassSettings(),
}) {
// 1. Widget-level explicit setting wins unconditionally.
if (explicit != null) return explicit;
// 2. Inherited settings from the nearest AdaptiveLiquidGlassLayer.
final inherited = InheritedLiquidGlass.of(context);
if (inherited != null) return inherited;
// 3. App-level global override (set via LiquidGlassWidgets.globalSettings).
if (LiquidGlassWidgets.globalSettings != null) {
return LiquidGlassWidgets.globalSettings!;
}
// 4. Theme fallback — ensures glass is visible even when no settings are
// provided anywhere. Mirrors the logic in AdaptiveLiquidGlassLayer:
// start from the zero-alpha default, then overlay any non-null fields
// from the theme's brightness-appropriate variant.
final themeOverride = GlassThemeData.of(context).settingsFor(context);
return themeOverride?.applyTo(fallback) ?? fallback;
}