I use official Flutter standards for styling: ThemeExtensions.
ThemeExtension exampleimport 'dart:ui';
import 'package:flutter/material.dart';
import 'package:myoro_flutter_annotations/myoro_flutter_annotations.dart';
import 'package:widget_architecture/widget_architecture.dart';
part 'home_screen_theme_extension.g.dart';
/// [ThemeExtension] of [HomeScreen].
@immutable
@myoroThemeExtension
final class HomeScreenThemeExtension
extends ThemeExtension<HomeScreenThemeExtension>
with _$HomeScreenThemeExtensionMixin {
/// Default constructor.
const HomeScreenThemeExtension({
required this.bodySpacing,
required this.labelTextStyle,
});
/// Builder constructor.
HomeScreenThemeExtension.builder(TextTheme textTheme)
: bodySpacing = kMultiplier * 2,
labelTextStyle = textTheme.titleLarge!;
/// Body spacing.
final double bodySpacing;
/// [TextStyle] of the label.
final TextStyle labelTextStyle;
/// Lerp function.
@override
HomeScreenThemeExtension lerp(HomeScreenThemeExtension? other, double t) {
return other is! HomeScreenThemeExtension
? this
: copyWith(
bodySpacing: lerpDouble(bodySpacing, other.bodySpacing, t)!,
labelTextStyle: TextStyle.lerp(
labelTextStyle,
other.labelTextStyle,
t,
)!,
);
}
}
ThemeExtensions?Initialize all ThemeExtensions of your application with the ThemeData object of your application's MaterialApp.