Skip to content

Commit

Permalink
feat(generator): ✨ add CustomThemeAddon to generator
Browse files Browse the repository at this point in the history
  • Loading branch information
jenshor committed Dec 18, 2022
1 parent c77fdde commit ed199af
Show file tree
Hide file tree
Showing 10 changed files with 139 additions and 2 deletions.
2 changes: 2 additions & 0 deletions packages/widgetbook_generator/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@
- feat: add `MaterialThemeAddon` to generator
- feat: add `TextScaleAddon` to generator
- feat: add `LocalizationAddon` to generator
- feat: add `FrameAddon` to generator
- feat: add `CustomThemeAddon` to generator

## 2.4.1

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,10 @@ class AddOnInstance extends Instance {
const AddOnInstance({
required String name,
required List<Property> properties,
List<String> genericParameters = const <String>[],
}) : super(
name: name,
properties: properties,
genericParameters: genericParameters,
);
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,3 +3,4 @@ export './frame_addon/frame_addon.dart';
export './localization_addon/localization_addon.dart';
export './material_theme_addon/material_theme_addon.dart';
export './text_scale_addon/text_scale_addon.dart';
export './theme_addon/theme_addon.dart';
Original file line number Diff line number Diff line change
@@ -1,2 +1,4 @@
// TODO this whole implementation is currently not used and is covered by
// CustomThemeAddon
export './material_theme_addon_instance.dart';
export './material_theme_setting_instance.dart';
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
import 'package:widgetbook_generator/code_generators/instances/addons/addon_instance.dart';
import 'package:widgetbook_generator/code_generators/instances/addons/theme_addon/theme_addon.dart';
import 'package:widgetbook_generator/code_generators/properties/property.dart';
import 'package:widgetbook_generator/models/widgetbook_theme_data.dart';

class CustomThemeAddonInstance extends AddOnInstance {
CustomThemeAddonInstance({
required String themeType,
required List<WidgetbookThemeData> themes,
}) : super(
name: 'CustomThemeAddon',
genericParameters: [
themeType,
],
properties: [
Property(
key: 'setting',
instance: ThemeSettingInstance(
themeType: themeType,
themes: themes,
defaultTheme: themes.firstWhere(
(element) => element.isDefault,
orElse: () => themes.first,
),
),
),
],
);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
export 'custom_theme_addon_instance.dart';
export 'theme_setting_instance.dart';
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
import 'package:widgetbook_generator/code_generators/instances/instance.dart';
import 'package:widgetbook_generator/code_generators/instances/list_instance.dart';
import 'package:widgetbook_generator/code_generators/instances/theme_instance.dart';
import 'package:widgetbook_generator/code_generators/properties/property.dart';
import 'package:widgetbook_generator/models/widgetbook_theme_data.dart';

class ThemeSettingInstance extends Instance {
ThemeSettingInstance({
required String themeType,
required List<WidgetbookThemeData> themes,
required WidgetbookThemeData defaultTheme,
}) : super(
name: 'ThemeSetting',
genericParameters: [
themeType,
],
properties: [
Property(
key: 'themes',
instance: ListInstance(
instances: themes.map((e) => ThemeInstance(theme: e)).toList(),
),
),
Property(
key: 'activeTheme',
instance: ThemeInstance(theme: defaultTheme),
),
],
);
}
32 changes: 30 additions & 2 deletions packages/widgetbook_generator/lib/generators/app_generator.dart
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import 'package:widgetbook_annotation/widgetbook_annotation.dart';
import 'package:widgetbook_generator/code_generators/instances/addons/addons.dart';
import 'package:widgetbook_generator/code_generators/instances/addons/theme_addon/theme_addon.dart';
import 'package:widgetbook_generator/code_generators/instances/app_info_instance.dart';
import 'package:widgetbook_generator/code_generators/instances/variable_instance.dart';
import 'package:widgetbook_generator/code_generators/instances/widgetbook_category_instance.dart';
Expand Down Expand Up @@ -33,8 +34,35 @@ String generateWidgetbook({
_generateCategoryInstance(useCases, foldersExpanded, widgetsExpanded);

final addons = <AddOnInstance>[];
if (constructor == WidgetbookConstructor.material) {
addons.add(MaterialThemeAddonInstance(themes: themes));
switch (constructor) {
case WidgetbookConstructor.material:
addons.add(
CustomThemeAddonInstance(
themes: themes,
themeType: 'ThemeData',
),
);
break;
case WidgetbookConstructor.cupertino:
addons.add(
CustomThemeAddonInstance(
themes: themes,
themeType: 'CupertinoThemeData',
),
);
break;
case WidgetbookConstructor.custom:
if (widgetbookThemeData != null) {
addons.add(
CustomThemeAddonInstance(
themes: themes,
themeType: widgetbookThemeData.name,
),
);
} else {
// TODO handle error
}
break;
}

addons.add(TextScaleAddonInstance(textScales: textScaleFactors));
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
import 'package:test/test.dart';
import 'package:widgetbook_generator/code_generators/instances/instances.dart';

import '../../../../mocks/mocks.dart';

void main() {
group(
'$CustomThemeAddonInstance',
() {
test('.name is "CustomThemeAddon"', () {
final sut = CustomThemeAddonInstance(
themes: themes,
themeType: 'ThemeData',
);
expect(sut.name, equals('CustomThemeAddon'));
});
},
);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
import 'package:test/test.dart';
import 'package:widgetbook_generator/code_generators/instances/instances.dart';

import '../../../../mocks/mocks.dart';

void main() {
group('$ThemeSettingInstance', () {
test(
'.name returns "ThemeSetting"',
() {
expect(
ThemeSettingInstance(
themes: themes,
defaultTheme: themeLight,
themeType: 'ThemeData',
).name,
equals('ThemeSetting'),
);
},
);
});
}

0 comments on commit ed199af

Please sign in to comment.