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)),