extensions property
All ThemeExtensions defined in this style.
Creating and passing a ThemeExtension to FStyle
class BrandStyle extends ThemeExtension<BrandStyle> {
final double cardRadius;
const BrandStyle({required this.cardRadius});
@override
BrandStyle copyWith({double? cardRadius}) => BrandStyle(cardRadius: cardRadius ?? this.cardRadius);
@override
BrandStyle lerp(BrandStyle? other, double t) {
if (other is! BrandStyle) return this;
return BrandStyle(cardRadius: lerpDouble(cardRadius, other.cardRadius, t)!);
}
}
Passing it via constructor:
final style = FStyle(
extensions: [BrandStyle(cardRadius: 12)],
... // other fields omitted for brevity
);
Passing it via copyWith:
style.copyWith(extensions: [BrandStyle(cardRadius: 12)]);
Accessing the extension
final brand = context.theme.style.extension<BrandStyle>();
It is recommended to define a getter for your ThemeExtension:
extension FStyleBrandStyle on FStyle {
BrandStyle get brand => extension<BrandStyle>();
// Alternatively
double get cardRadius => extension<BrandStyle>().cardRadius;
}
final brand = context.theme.style.brand;
final cardRadius = context.theme.style.cardRadius;
Implementation
@override
Set<ThemeExtension<dynamic>> get extensions => _extensions.values.toSet();