TWidgetTheme.from constructor

TWidgetTheme.from(
  1. BuildContext context,
  2. Color color,
  3. TVariant type
)

Implementation

factory TWidgetTheme.from(BuildContext context, Color color, TVariant type) {
  final isDarkMode = context.isDarkMode;

  Color shade(int value) => color.shade(value);
  Color alpha(Color color, int a) => color.withAlpha(a);

  return switch (type) {
    TVariant.solid => TWidgetTheme(
        container: shade(400),
        containerVariant: alpha(shade(400), 200),
        onContainer: shade(50),
        onContainerVariant: shade(50),
        shadow: alpha(shade(900), 35),
      ),
    TVariant.tonal => TWidgetTheme(
        container: isDarkMode ? shade(700) : shade(50),
        containerVariant: isDarkMode ? shade(800) : shade(100),
        onContainer: isDarkMode ? shade(100) : shade(400),
        onContainerVariant: isDarkMode ? shade(300) : shade(500),
        shadow: alpha(shade(600), 35),
      ),
    TVariant.outline => TWidgetTheme(
        container: Colors.transparent,
        containerVariant: Colors.transparent,
        onContainer: shade(400),
        onContainerVariant: isDarkMode ? shade(300) : shade(500),
        outline: shade(300),
        outlineVariant: shade(400),
        shadow: alpha(shade(400), 35),
      ),
    TVariant.softOutline => TWidgetTheme(
        container: Colors.transparent,
        containerVariant: isDarkMode ? shade(700) : shade(50),
        onContainer: shade(400),
        onContainerVariant: isDarkMode ? shade(200) : shade(500),
        outline: shade(300),
        outlineVariant: isDarkMode ? shade(400) : shade(200),
        shadow: alpha(shade(400), 35),
      ),
    TVariant.filledOutline => TWidgetTheme(
        container: Colors.transparent,
        containerVariant: shade(400),
        onContainer: shade(400),
        onContainerVariant: shade(50),
        outline: shade(300),
        shadow: alpha(shade(400), 35),
      ),
    TVariant.text => TWidgetTheme(
        container: Colors.transparent,
        containerVariant: Colors.transparent,
        onContainer: shade(400),
        onContainerVariant: isDarkMode ? shade(300) : shade(500),
      ),
    TVariant.softText => TWidgetTheme(
        container: Colors.transparent,
        containerVariant: isDarkMode ? shade(700) : shade(50),
        onContainer: shade(400),
        onContainerVariant: isDarkMode ? shade(300) : shade(500),
      ),
    TVariant.filledText => TWidgetTheme(
        container: Colors.transparent,
        containerVariant: shade(400),
        onContainer: shade(400),
        onContainerVariant: shade(50),
      )
  };
}