extension<T extends Object> method

T extension<T extends Object>()

Obtains a particular ThemeExtension.

Creating and passing a ThemeExtension to FThemeData

class BrandStyle extends ThemeExtension<BrandStyle> {
  final Color color;
  final BorderRadius borderRadius;

  const BrandStyle({required this.color, required this.borderRadius});

  @override
  BrandStyle copyWith({Color? color, BorderRadius? borderRadius}) =>
      BrandStyle(color: color ?? this.color, borderRadius: borderRadius ?? this.borderRadius);

  @override
  BrandStyle lerp(BrandStyle? other, double t) {
    if (other is! BrandStyle) return this;
    return BrandStyle(
      color: Color.lerp(color, other.color, t)!,
      borderRadius: BorderRadius.lerp(borderRadius, other.borderRadius, t)!,
    );
  }
}

Passing it via constructor:

final theme = FThemeData(
  extensions: [BrandStyle(color: Colors.blue, borderRadius: BorderRadius.circular(8))],
  ... // other fields omitted for brevity
);

Passing it via copyWith:

theme.copyWith(extensions: [
  BrandStyle(color: Colors.blue, borderRadius: BorderRadius.circular(8)),
]);

Accessing the extension

final brand = context.theme.extension<BrandStyle>();

It is recommended to define a getter for your ThemeExtension:

extension FThemeDataBrandStyle on FThemeData {
  BrandStyle get brand => extension<BrandStyle>();
}

Implementation

T extension<T extends Object>() => _extensions[T]! as T;