resolveSettings static method

LiquidGlassSettings resolveSettings(
  1. BuildContext context, {
  2. LiquidGlassSettings? explicit,
  3. 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):

  1. explicit — the widget's own settings: parameter (non-null wins).
  2. InheritedLiquidGlass — settings from nearest parent layer.
  3. LiquidGlassWidgets.globalSettings — app-level global override.
  4. GlassThemeData — brightness-aware theme settings (light/dark).
  5. 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;
}