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;