Skip to content

Commit

Permalink
refactor: update abstract text style cubit properties and constructor
Browse files Browse the repository at this point in the history
  • Loading branch information
zeshuaro committed Dec 17, 2022
1 parent 9579a17 commit 2e5edd3
Show file tree
Hide file tree
Showing 14 changed files with 189 additions and 195 deletions.
1 change: 1 addition & 0 deletions lib/abstract_text_style/abstract_text_style.dart
@@ -1,2 +1,3 @@
export 'consts.dart';
export 'cubit/abstract_text_style_cubit.dart';
export 'view/abstract_text_style_editor.dart';
57 changes: 57 additions & 0 deletions lib/abstract_text_style/consts.dart
@@ -0,0 +1,57 @@
import 'package:flutter/material.dart';

enum TypeScale {
headline1,
headline2,
headline3,
headline4,
headline5,
headline6,
subtitle1,
subtitle2,
bodyText1,
bodyText2,
button,
caption,
overline,
}

const _englishTextTheme = Typography.englishLike2018;
final _blackTextTheme = _englishTextTheme.merge(
Typography.blackMountainView,
);
final _whiteTextTheme = _englishTextTheme.merge(
Typography.whiteMountainView,
);

final kBlackTextStyles = {
TypeScale.headline1: _blackTextTheme.headline1,
TypeScale.headline2: _blackTextTheme.headline2,
TypeScale.headline3: _blackTextTheme.headline3,
TypeScale.headline4: _blackTextTheme.headline4,
TypeScale.headline5: _blackTextTheme.headline5,
TypeScale.headline6: _blackTextTheme.headline6,
TypeScale.subtitle1: _blackTextTheme.subtitle1,
TypeScale.subtitle2: _blackTextTheme.subtitle2,
TypeScale.bodyText1: _blackTextTheme.bodyText1,
TypeScale.bodyText2: _blackTextTheme.bodyText2,
TypeScale.button: _blackTextTheme.button,
TypeScale.caption: _blackTextTheme.caption,
TypeScale.overline: _blackTextTheme.overline,
};

final kWhiteTextStyles = {
TypeScale.headline1: _whiteTextTheme.headline1,
TypeScale.headline2: _whiteTextTheme.headline2,
TypeScale.headline3: _whiteTextTheme.headline3,
TypeScale.headline4: _whiteTextTheme.headline4,
TypeScale.headline5: _whiteTextTheme.headline5,
TypeScale.headline6: _whiteTextTheme.headline6,
TypeScale.subtitle1: _whiteTextTheme.subtitle1,
TypeScale.subtitle2: _whiteTextTheme.subtitle2,
TypeScale.bodyText1: _whiteTextTheme.bodyText1,
TypeScale.bodyText2: _whiteTextTheme.bodyText2,
TypeScale.button: _whiteTextTheme.button,
TypeScale.caption: _whiteTextTheme.caption,
TypeScale.overline: _whiteTextTheme.overline,
};
28 changes: 12 additions & 16 deletions lib/abstract_text_style/cubit/abstract_text_style_cubit.dart
@@ -1,3 +1,4 @@
import 'package:appainter/abstract_text_style/abstract_text_style.dart';
import 'package:appainter/common/common.dart';
import 'package:appainter/models/models.dart';
import 'package:appainter/services/services.dart';
Expand All @@ -11,26 +12,21 @@ part 'abstract_text_style_cubit.g.dart';
part 'text_style_state.dart';

abstract class AbstractTextStyleCubit extends Cubit<TextStyleState> {
final TextStyle? baseStyle;
final TextStyle? blackStyle;
final TextStyle? whiteStyle;
final TextStyle? defaultStyle;

AbstractTextStyleCubit({
this.baseStyle,
this.blackStyle,
this.whiteStyle,
this.defaultStyle,
}) : assert(
(baseStyle != null && blackStyle != null && whiteStyle != null) ||
defaultStyle != null),
super(
TextStyleState(style: defaultStyle ?? baseStyle!.merge(blackStyle!)),
);
required this.typeScale,
this.isBaseStyleBlack = true,
}) : super(TextStyleState(
style: isBaseStyleBlack
? kBlackTextStyles[typeScale]!
: kWhiteTextStyles[typeScale]!,
));

final TypeScale typeScale;
final bool isBaseStyleBlack;

void styleBrightnessChanged(bool isDark) {
final style =
defaultStyle ?? baseStyle!.merge(isDark ? whiteStyle! : blackStyle!);
isDark ? kWhiteTextStyles[typeScale]! : kBlackTextStyles[typeScale]!;
emit(state.copyWith(style: style));
}

Expand Down
1 change: 0 additions & 1 deletion lib/app_bar_theme/app_bar_theme.dart
@@ -1,3 +1,2 @@
export 'cubit/app_bar_theme_cubit.dart';
export 'view/app_bar_theme_editor.dart';
export 'constants.dart';
8 changes: 0 additions & 8 deletions lib/app_bar_theme/constants.dart

This file was deleted.

50 changes: 32 additions & 18 deletions lib/app_bar_theme/cubit/app_bar_theme_cubit.dart
Expand Up @@ -2,29 +2,21 @@ import 'dart:async';

import 'package:appainter/abstract_icon_theme/abstract_icon_theme.dart';
import 'package:appainter/abstract_text_style/abstract_text_style.dart';
import 'package:appainter/app_bar_theme/app_bar_theme.dart';
import 'package:appainter/models/models.dart';
import 'package:appainter_annotations/annotations.dart';
import 'package:bloc/bloc.dart';
import 'package:copy_with_extension/copy_with_extension.dart';
import 'package:equatable/equatable.dart';
import 'package:flutter/material.dart';
import 'package:appainter/models/models.dart';

part 'app_bar_theme_cubit.g.dart';
part 'app_bar_theme_state.dart';

const _titleTypeScale = TypeScale.headline6;
const _toolbarTypeScale = TypeScale.bodyText2;

@ThemeDocs(extraPropertyTypes: {'SystemUiOverlayStyle'})
class AppBarThemeCubit extends Cubit<AppBarThemeState> {
final AppBarActionsIconThemeCubit actionsIconThemeCubit;
final AppBarIconThemeCubit iconThemeCubit;
final AppBarTitleTextStyleCubit titleTextStyleCubit;
final AppBarToolbarTextStyleCubit toolbarTextStyleCubit;

late final StreamSubscription actionsIconThemeCubitSubscription;
late final StreamSubscription iconThemeCubitSubscription;
late final StreamSubscription titleTextStyleCubitSubscription;
late final StreamSubscription toolbarTextStyleCubitSubscription;

AppBarThemeCubit({
required this.actionsIconThemeCubit,
required this.iconThemeCubit,
Expand Down Expand Up @@ -57,6 +49,20 @@ class AppBarThemeCubit extends Cubit<AppBarThemeState> {
);
}

final AppBarActionsIconThemeCubit actionsIconThemeCubit;
final AppBarIconThemeCubit iconThemeCubit;
final AppBarTitleTextStyleCubit titleTextStyleCubit;
final AppBarToolbarTextStyleCubit toolbarTextStyleCubit;

late final StreamSubscription actionsIconThemeCubitSubscription;
late final StreamSubscription iconThemeCubitSubscription;
late final StreamSubscription titleTextStyleCubitSubscription;
late final StreamSubscription toolbarTextStyleCubitSubscription;

static const defaultIconTheme = IconThemeData();
static final defaultTitleTextStyle = kWhiteTextStyles[_titleTypeScale]!;
static final defaultToolbarTextStyle = kWhiteTextStyles[_toolbarTypeScale]!;

@override
Future<void> close() {
actionsIconThemeCubitSubscription.cancel();
Expand All @@ -68,16 +74,16 @@ class AppBarThemeCubit extends Cubit<AppBarThemeState> {

void themeChanged(AppBarTheme theme) {
actionsIconThemeCubit.themeChanged(
theme.actionsIconTheme ?? kAppBarIconTheme,
theme.actionsIconTheme ?? defaultIconTheme,
);
iconThemeCubit.themeChanged(
theme.actionsIconTheme ?? kAppBarIconTheme,
theme.actionsIconTheme ?? defaultIconTheme,
);
titleTextStyleCubit.styleChanged(
theme.titleTextStyle ?? kAppBarTitleTextStyle,
theme.titleTextStyle ?? defaultTitleTextStyle,
);
toolbarTextStyleCubit.styleChanged(
theme.toolbarTextStyle ?? kAppBarToolbarTextStyle,
theme.toolbarTextStyle ?? defaultToolbarTextStyle,
);
emit(state.copyWith(theme: theme));
}
Expand Down Expand Up @@ -140,9 +146,17 @@ class AppBarActionsIconThemeCubit extends AbstractIconThemeCubit {}
class AppBarIconThemeCubit extends AbstractIconThemeCubit {}

class AppBarTitleTextStyleCubit extends AbstractTextStyleCubit {
AppBarTitleTextStyleCubit() : super(defaultStyle: kAppBarTitleTextStyle);
AppBarTitleTextStyleCubit()
: super(
typeScale: _titleTypeScale,
isBaseStyleBlack: false,
);
}

class AppBarToolbarTextStyleCubit extends AbstractTextStyleCubit {
AppBarToolbarTextStyleCubit() : super(defaultStyle: kAppBarToolbarTextStyle);
AppBarToolbarTextStyleCubit()
: super(
typeScale: _toolbarTypeScale,
isBaseStyleBlack: false,
);
}
96 changes: 13 additions & 83 deletions lib/text_theme/cubits/text_style_cubits.dart
@@ -1,123 +1,53 @@
import 'package:appainter/abstract_text_style/abstract_text_style.dart';
import 'package:flutter/material.dart';

const _englishTextTheme = Typography.englishLike2018;
const _blackTextTheme = Typography.blackMountainView;
const _whiteTextTheme = Typography.whiteMountainView;

class Headline1TextStyleCubit extends AbstractTextStyleCubit {
Headline1TextStyleCubit()
: super(
baseStyle: _englishTextTheme.headline1!,
blackStyle: _blackTextTheme.headline1!,
whiteStyle: _whiteTextTheme.headline1!,
);
Headline1TextStyleCubit() : super(typeScale: TypeScale.headline1);
}

class Headline2TextStyleCubit extends AbstractTextStyleCubit {
Headline2TextStyleCubit()
: super(
baseStyle: _englishTextTheme.headline2!,
blackStyle: _blackTextTheme.headline2!,
whiteStyle: _whiteTextTheme.headline2!,
);
Headline2TextStyleCubit() : super(typeScale: TypeScale.headline2);
}

class Headline3TextStyleCubit extends AbstractTextStyleCubit {
Headline3TextStyleCubit()
: super(
baseStyle: _englishTextTheme.headline3!,
blackStyle: _blackTextTheme.headline3!,
whiteStyle: _whiteTextTheme.headline3!,
);
Headline3TextStyleCubit() : super(typeScale: TypeScale.headline3);
}

class Headline4TextStyleCubit extends AbstractTextStyleCubit {
Headline4TextStyleCubit()
: super(
baseStyle: _englishTextTheme.headline4!,
blackStyle: _blackTextTheme.headline4!,
whiteStyle: _whiteTextTheme.headline4!,
);
Headline4TextStyleCubit() : super(typeScale: TypeScale.headline4);
}

class Headline5TextStyleCubit extends AbstractTextStyleCubit {
Headline5TextStyleCubit()
: super(
baseStyle: _englishTextTheme.headline5!,
blackStyle: _blackTextTheme.headline5!,
whiteStyle: _whiteTextTheme.headline5!,
);
Headline5TextStyleCubit() : super(typeScale: TypeScale.headline5);
}

class Headline6TextStyleCubit extends AbstractTextStyleCubit {
Headline6TextStyleCubit()
: super(
baseStyle: _englishTextTheme.headline6!,
blackStyle: _blackTextTheme.headline6!,
whiteStyle: _whiteTextTheme.headline6!,
);
Headline6TextStyleCubit() : super(typeScale: TypeScale.headline6);
}

class Subtitle1TextStyleCubit extends AbstractTextStyleCubit {
Subtitle1TextStyleCubit()
: super(
baseStyle: _englishTextTheme.subtitle1!,
blackStyle: _blackTextTheme.subtitle1!,
whiteStyle: _whiteTextTheme.subtitle1!,
);
Subtitle1TextStyleCubit() : super(typeScale: TypeScale.subtitle1);
}

class Subtitle2TextStyleCubit extends AbstractTextStyleCubit {
Subtitle2TextStyleCubit()
: super(
baseStyle: _englishTextTheme.subtitle2!,
blackStyle: _blackTextTheme.subtitle2!,
whiteStyle: _whiteTextTheme.subtitle2!,
);
Subtitle2TextStyleCubit() : super(typeScale: TypeScale.subtitle2);
}

class BodyText1TextStyleCubit extends AbstractTextStyleCubit {
BodyText1TextStyleCubit()
: super(
baseStyle: _englishTextTheme.bodyText1!,
blackStyle: _blackTextTheme.bodyText1!,
whiteStyle: _whiteTextTheme.bodyText1!,
);
BodyText1TextStyleCubit() : super(typeScale: TypeScale.bodyText1);
}

class BodyText2TextStyleCubit extends AbstractTextStyleCubit {
BodyText2TextStyleCubit()
: super(
baseStyle: _englishTextTheme.bodyText2!,
blackStyle: _blackTextTheme.bodyText2!,
whiteStyle: _whiteTextTheme.bodyText2!,
);
BodyText2TextStyleCubit() : super(typeScale: TypeScale.bodyText2);
}

class ButtonTextStyleCubit extends AbstractTextStyleCubit {
ButtonTextStyleCubit()
: super(
baseStyle: _englishTextTheme.button!,
blackStyle: _blackTextTheme.button!,
whiteStyle: _whiteTextTheme.button!,
);
ButtonTextStyleCubit() : super(typeScale: TypeScale.button);
}

class CaptionTextStyleCubit extends AbstractTextStyleCubit {
CaptionTextStyleCubit()
: super(
baseStyle: _englishTextTheme.caption!,
blackStyle: _blackTextTheme.caption!,
whiteStyle: _whiteTextTheme.caption!,
);
CaptionTextStyleCubit() : super(typeScale: TypeScale.caption);
}

class OverlineTextStyleCubit extends AbstractTextStyleCubit {
OverlineTextStyleCubit()
: super(
baseStyle: _englishTextTheme.overline!,
blackStyle: _blackTextTheme.overline!,
whiteStyle: _whiteTextTheme.overline!,
);
OverlineTextStyleCubit() : super(typeScale: TypeScale.overline);
}
6 changes: 2 additions & 4 deletions test/abstract_text_style/abstract_text_style_cubit_test.dart
Expand Up @@ -25,7 +25,7 @@ void main() {

setUp(() {
cubit = TestTextStyleCubit();
style = cubit.baseStyle!.merge(cubit.blackStyle);
style = cubit.blackTextStyle;

color = getRandomColor();
doubleNum = Random().nextDouble();
Expand All @@ -40,9 +40,7 @@ void main() {
act: (cubit) => cubit.styleBrightnessChanged(isDark),
expect: () => [
TextStyleState(
style: isDark
? style.merge(cubit.whiteStyle)
: style.merge(cubit.blackStyle),
style: isDark ? cubit.whiteTextStyle : cubit.blackTextStyle,
)
],
);
Expand Down
11 changes: 5 additions & 6 deletions test/abstract_text_style/mocks.dart
Expand Up @@ -3,12 +3,11 @@ import 'package:bloc_test/bloc_test.dart';
import 'package:flutter/material.dart';

class TestTextStyleCubit extends AbstractTextStyleCubit {
TestTextStyleCubit()
: super(
baseStyle: Typography.englishLike2018.bodyText1!,
blackStyle: Typography.blackMountainView.bodyText1!,
whiteStyle: Typography.whiteMountainView.bodyText1!,
);
TestTextStyleCubit() : super(typeScale: TypeScale.headline1);

TextStyle get blackTextStyle => kBlackTextStyles[typeScale]!;

TextStyle get whiteTextStyle => kWhiteTextStyles[typeScale]!;
}

class MockTextStyleCubit extends MockCubit<TextStyleState>
Expand Down

0 comments on commit 2e5edd3

Please sign in to comment.