flutter ThemeData扩展
多主题需要扩展自定义配色,借助extensions提供的能力
final ThemeData themeLightBlue = ThemeData(
primarySwatch: Colors.lightBlue,
brightness: Brightness.light,
// 其他配置
).copyWith(
// todo 扩展属性
extensions: <ThemeExtension<dynamic>>[
const CustomColorScheme(
testColor: Color(0xFFE53935),
),
],
);
import 'package:flutter/material.dart';
class CustomColorScheme extends ThemeExtension<CustomColorScheme> {
const CustomColorScheme({
required this.testColor,
});
final Color? testColor;
CustomColorScheme copyWith({Color? testColor, Color? danger}) {
return CustomColorScheme(
testColor: testColor ?? this.testColor,
);
}
CustomColorScheme lerp(ThemeExtension<CustomColorScheme>? other, double t) {
if (other is! CustomColorScheme) {
return this;
}
return CustomColorScheme(
testColor: Color.lerp(testColor, other.testColor, t),
);
}
// Optional
String toString() => 'CustomColorScheme(testColor: $testColor)';
}
此时就可以在代码中使用
Text('主题扩展颜色扩展',
style: TextStyle(
fontSize: 16,
// 使用testColor
color: Theme.of(context)
.extension<CustomColorScheme>()!
.testColor)),