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