mirror of
https://github.com/smmarty/friflex_flutter_starter.git
synced 2025-12-22 09:30:45 +00:00
feat(app): Реализовать тему через theme_tailor (#13)
* chore(.gitignore): добавил игнорирование кодогенерации * chore(pubspec): добавил theme_tailor в зависимости * feat(app): добавил theme_tailor кодогенерацию темы * refactor(app, debug): заменил использование расширение контекста * chore(.gitignore): убрал игнорирование кодогена * feat(app): добавил сгенерированный файл
This commit is contained in:
@@ -1,10 +1,13 @@
|
||||
import 'package:flutter/foundation.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:theme_tailor_annotation/theme_tailor_annotation.dart';
|
||||
|
||||
part 'app_colors_scheme.tailor.dart';
|
||||
|
||||
/// {@template app_colors}
|
||||
/// Класс, реализующий расширение для добавления токенов в цветовую схему
|
||||
/// {@endtemplate}
|
||||
class AppColors extends ThemeExtension<AppColors> with DiagnosticableTreeMixin {
|
||||
@TailorMixin(themeGetter: ThemeGetter.onBuildContext)
|
||||
class AppColors extends ThemeExtension<AppColors> with _$AppColorsTailorMixin {
|
||||
/// {@macro app_colors}
|
||||
///
|
||||
/// Принимает:
|
||||
@@ -23,18 +26,23 @@ class AppColors extends ThemeExtension<AppColors> with DiagnosticableTreeMixin {
|
||||
});
|
||||
|
||||
/// Цвет тестовый
|
||||
@override
|
||||
final Color testColor;
|
||||
|
||||
/// Цвет элемента текста
|
||||
@override
|
||||
final Color itemTextColor;
|
||||
|
||||
/// Цвет фона снекбара ошибки
|
||||
@override
|
||||
final Color errorSnackbarBackground;
|
||||
|
||||
/// Цвет фона снекбара успеха
|
||||
@override
|
||||
final Color successSnackbarBackground;
|
||||
|
||||
/// Цвет фона снекбара информации
|
||||
@override
|
||||
final Color infoSnackbarBackground;
|
||||
|
||||
/// Цвета светлой темы
|
||||
@@ -54,50 +62,4 @@ class AppColors extends ThemeExtension<AppColors> with DiagnosticableTreeMixin {
|
||||
infoSnackbarBackground: const Color.fromARGB(255, 35, 147, 178),
|
||||
itemTextColor: Colors.white,
|
||||
);
|
||||
|
||||
@override
|
||||
ThemeExtension<AppColors> copyWith({
|
||||
Color? testColor,
|
||||
Color? errorSnackbarBackground,
|
||||
Color? successSnackbarBackground,
|
||||
Color? infoSnackbarBackground,
|
||||
Color? itemTextColor,
|
||||
}) => AppColors(
|
||||
testColor: testColor ?? this.testColor,
|
||||
errorSnackbarBackground:
|
||||
errorSnackbarBackground ?? this.errorSnackbarBackground,
|
||||
successSnackbarBackground:
|
||||
successSnackbarBackground ?? this.successSnackbarBackground,
|
||||
infoSnackbarBackground:
|
||||
infoSnackbarBackground ?? this.infoSnackbarBackground,
|
||||
itemTextColor: itemTextColor ?? this.itemTextColor,
|
||||
);
|
||||
|
||||
@override
|
||||
ThemeExtension<AppColors> lerp(
|
||||
covariant ThemeExtension<AppColors>? other,
|
||||
double t,
|
||||
) {
|
||||
if (other is! AppColors) return this;
|
||||
|
||||
return AppColors(
|
||||
testColor: Color.lerp(testColor, other.testColor, t)!,
|
||||
errorSnackbarBackground: Color.lerp(
|
||||
errorSnackbarBackground,
|
||||
other.errorSnackbarBackground,
|
||||
t,
|
||||
)!,
|
||||
successSnackbarBackground: Color.lerp(
|
||||
successSnackbarBackground,
|
||||
other.successSnackbarBackground,
|
||||
t,
|
||||
)!,
|
||||
infoSnackbarBackground: Color.lerp(
|
||||
infoSnackbarBackground,
|
||||
other.infoSnackbarBackground,
|
||||
t,
|
||||
)!,
|
||||
itemTextColor: Color.lerp(itemTextColor, other.itemTextColor, t)!,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
102
lib/app/theme/app_colors_scheme.tailor.dart
Normal file
102
lib/app/theme/app_colors_scheme.tailor.dart
Normal file
@@ -0,0 +1,102 @@
|
||||
// coverage:ignore-file
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
// ignore_for_file: type=lint
|
||||
// ignore_for_file: unused_element, deprecated_member_use, deprecated_member_use_from_same_package, use_function_type_syntax_for_parameters, unnecessary_const, avoid_init_to_null, invalid_override_different_default_values_named, prefer_expression_function_bodies, annotate_overrides, invalid_annotation_target, unnecessary_question_mark
|
||||
|
||||
part of 'app_colors_scheme.dart';
|
||||
|
||||
// **************************************************************************
|
||||
// TailorAnnotationsGenerator
|
||||
// **************************************************************************
|
||||
|
||||
mixin _$AppColorsTailorMixin on ThemeExtension<AppColors> {
|
||||
Color get testColor;
|
||||
Color get itemTextColor;
|
||||
Color get errorSnackbarBackground;
|
||||
Color get successSnackbarBackground;
|
||||
Color get infoSnackbarBackground;
|
||||
|
||||
@override
|
||||
AppColors copyWith({
|
||||
Color? testColor,
|
||||
Color? itemTextColor,
|
||||
Color? errorSnackbarBackground,
|
||||
Color? successSnackbarBackground,
|
||||
Color? infoSnackbarBackground,
|
||||
}) {
|
||||
return AppColors(
|
||||
testColor: testColor ?? this.testColor,
|
||||
itemTextColor: itemTextColor ?? this.itemTextColor,
|
||||
errorSnackbarBackground:
|
||||
errorSnackbarBackground ?? this.errorSnackbarBackground,
|
||||
successSnackbarBackground:
|
||||
successSnackbarBackground ?? this.successSnackbarBackground,
|
||||
infoSnackbarBackground:
|
||||
infoSnackbarBackground ?? this.infoSnackbarBackground,
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
AppColors lerp(covariant ThemeExtension<AppColors>? other, double t) {
|
||||
if (other is! AppColors) return this as AppColors;
|
||||
return AppColors(
|
||||
testColor: Color.lerp(testColor, other.testColor, t)!,
|
||||
itemTextColor: Color.lerp(itemTextColor, other.itemTextColor, t)!,
|
||||
errorSnackbarBackground: Color.lerp(
|
||||
errorSnackbarBackground,
|
||||
other.errorSnackbarBackground,
|
||||
t,
|
||||
)!,
|
||||
successSnackbarBackground: Color.lerp(
|
||||
successSnackbarBackground,
|
||||
other.successSnackbarBackground,
|
||||
t,
|
||||
)!,
|
||||
infoSnackbarBackground: Color.lerp(
|
||||
infoSnackbarBackground,
|
||||
other.infoSnackbarBackground,
|
||||
t,
|
||||
)!,
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
return identical(this, other) ||
|
||||
(other.runtimeType == runtimeType &&
|
||||
other is AppColors &&
|
||||
const DeepCollectionEquality().equals(testColor, other.testColor) &&
|
||||
const DeepCollectionEquality().equals(
|
||||
itemTextColor,
|
||||
other.itemTextColor,
|
||||
) &&
|
||||
const DeepCollectionEquality().equals(
|
||||
errorSnackbarBackground,
|
||||
other.errorSnackbarBackground,
|
||||
) &&
|
||||
const DeepCollectionEquality().equals(
|
||||
successSnackbarBackground,
|
||||
other.successSnackbarBackground,
|
||||
) &&
|
||||
const DeepCollectionEquality().equals(
|
||||
infoSnackbarBackground,
|
||||
other.infoSnackbarBackground,
|
||||
));
|
||||
}
|
||||
|
||||
@override
|
||||
int get hashCode {
|
||||
return Object.hash(
|
||||
runtimeType.hashCode,
|
||||
const DeepCollectionEquality().hash(testColor),
|
||||
const DeepCollectionEquality().hash(itemTextColor),
|
||||
const DeepCollectionEquality().hash(errorSnackbarBackground),
|
||||
const DeepCollectionEquality().hash(successSnackbarBackground),
|
||||
const DeepCollectionEquality().hash(infoSnackbarBackground),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
extension AppColorsBuildContext on BuildContext {
|
||||
AppColors get appColors => Theme.of(this).extension<AppColors>()!;
|
||||
}
|
||||
Reference in New Issue
Block a user