generateBase method
Implementation
void generateBase(MapEntry? mapEntry) {
if (mapEntry != null) {
final pathBaseColor = join(pathColors, 'src', 'morpheme_color.dart');
final colors = mapEntry.value['colors'] is Map
? mapEntry.value['colors'] as Map
: {};
pathBaseColor
.write('''import 'package:core/src/shared/global/global_cubit.dart';
import 'package:flutter/material.dart';
import 'package:morpheme_library/morpheme_library.dart';
extension MorphemeColorExtension on BuildContext {
MorphemeColor get color => read<GlobalCubit>().state.theme.color;
}
abstract base class MorphemeColor {
${colors.entries.map((e) {
final key = e.key.toString().camelCase;
if (e.value is Map) {
return ''' MaterialColor get ${key.camelCase};''';
} else {
return ''' Color get ${key.camelCase};''';
}
}).join('\n')}
}
''');
final pathBaseTheme = join(pathThemes, 'src', 'morpheme_theme.dart');
if (!exists(pathBaseTheme)) {
pathBaseTheme
.write('''import 'package:core/src/component/component.dart';
import 'package:core/src/constants/constants.dart';
import 'package:core/src/themes/morpheme_colors/morpheme_colors.dart';
import 'package:dependency_manager/dependency_manager.dart';
import 'package:flutter/material.dart';
abstract base class MorphemeTheme {
MorphemeTheme(this.id);
final String id;
MorphemeColor get color;
ThemeData get rawThemeData;
ColorScheme get colorScheme;
TextTheme get _getTextTheme => GoogleFonts.robotoTextTheme()
.apply(bodyColor: color.black, displayColor: color.black)
.merge(MorphemeTextTheme.textTheme);
ThemeData get themeData => rawThemeData.copyWith(
scaffoldBackgroundColor: color.white,
appBarTheme: AppBarTheme(
elevation: 0,
color: color.white,
foregroundColor: color.black,
titleTextStyle: _getTextTheme.titleLarge,
),
colorScheme: colorScheme,
textTheme: _getTextTheme,
inputDecorationTheme: InputDecorationTheme(
hintStyle: _getTextTheme.bodyMedium?.apply(color: color.grey1),
fillColor: color.white,
filled: true,
contentPadding: const EdgeInsets.symmetric(
horizontal: MorphemeSizes.s16,
vertical: MorphemeSizes.s8,
),
enabledBorder: OutlineInputBorder(
borderSide: BorderSide(color: color.grey1, width: 1),
borderRadius: BorderRadius.circular(MorphemeSizes.s8),
),
focusedBorder: OutlineInputBorder(
borderSide: BorderSide(color: color.grey1, width: 1),
borderRadius: BorderRadius.circular(MorphemeSizes.s8),
),
focusedErrorBorder: OutlineInputBorder(
borderSide: BorderSide(color: color.grey1, width: 1),
borderRadius: BorderRadius.circular(MorphemeSizes.s8),
),
errorBorder: OutlineInputBorder(
borderSide: BorderSide(color: color.error, width: 1),
borderRadius: BorderRadius.circular(MorphemeSizes.s8),
),
disabledBorder: OutlineInputBorder(
borderSide: BorderSide(color: color.grey1, width: 1),
borderRadius: BorderRadius.circular(MorphemeSizes.s8),
),
),
elevatedButtonTheme: ElevatedButtonThemeData(
style: ElevatedButton.styleFrom(
textStyle: _getTextTheme.labelLarge,
shape: const RoundedRectangleBorder(
borderRadius: BorderRadius.all(Radius.circular(MorphemeSizes.s8)),
),
padding: const EdgeInsets.symmetric(horizontal: MorphemeSizes.s16),
),
),
outlinedButtonTheme: OutlinedButtonThemeData(
style: OutlinedButton.styleFrom(
textStyle: _getTextTheme.labelLarge,
shape: const RoundedRectangleBorder(
borderRadius: BorderRadius.all(Radius.circular(MorphemeSizes.s8)),
),
padding: const EdgeInsets.symmetric(horizontal: MorphemeSizes.s16),
),
),
textButtonTheme: TextButtonThemeData(
style: TextButton.styleFrom(
textStyle: _getTextTheme.labelLarge,
shape: const RoundedRectangleBorder(
borderRadius: BorderRadius.all(Radius.circular(MorphemeSizes.s8)),
),
padding: const EdgeInsets.symmetric(horizontal: MorphemeSizes.s16),
),
),
);
@override
bool operator ==(Object other) {
if (identical(this, other)) return true;
return other is MorphemeTheme && other.id == id;
}
@override
int get hashCode => id.hashCode;
}
''');
}
}
}