Skip to content

Commit

Permalink
feat(generator): ✨ add LocalizationAddon to generator
Browse files Browse the repository at this point in the history
  • Loading branch information
jenshor committed Dec 17, 2022
1 parent 563d669 commit 0df318e
Show file tree
Hide file tree
Showing 8 changed files with 126 additions and 1 deletion.
1 change: 1 addition & 0 deletions packages/widgetbook_generator/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
- **BREAKING**: refactor: remove `DeviceFrameBuilderResolver`, `LocalizationBuilderResolver`, `ScaffoldBuilderResolver`, `ThemeBuilderResolver`, `UseCaseBuilderResolver`.
- feat: add `MaterialThemeAddon` to generator
- feat: add `TextScaleAddon` to generator
- feat: add `LocalizationAddon` to generator

## 2.4.1

Expand Down
Original file line number Diff line number Diff line change
@@ -1,2 +1,4 @@
export './addon_instance.dart';
export './localization_addon/localization_addon.dart';
export './material_theme_addon/material_theme_addon.dart';
export './text_scale_addon/text_scale_addon.dart';
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
export 'localization_addon_instance.dart';
export 'localization_setting_instance.dart';
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
import 'package:widgetbook_generator/code_generators/instances/instances.dart';
import 'package:widgetbook_generator/code_generators/properties/property.dart';
import 'package:widgetbook_generator/models/widgetbook_locales_data.dart';
import 'package:widgetbook_generator/models/widgetbook_localizations_delegates_data.dart';

class LocalizationAddonInstance extends AddOnInstance {
LocalizationAddonInstance({
required WidgetbookLocalesData localesData,
required WidgetbookLocalizationsDelegatesData localizationDelegatesData,
}) : super(
name: 'LocalizationAddon',
properties: [
Property(
key: 'settings',
instance: LocalizationSettingInstance(
localesData: localesData,
localizationDelegatesData: localizationDelegatesData,
),
),
],
);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
import 'package:widgetbook_generator/code_generators/instances/instance.dart';
import 'package:widgetbook_generator/code_generators/instances/variable_instance.dart';
import 'package:widgetbook_generator/code_generators/properties/property.dart';
import 'package:widgetbook_generator/models/widgetbook_locales_data.dart';
import 'package:widgetbook_generator/models/widgetbook_localizations_delegates_data.dart';

class LocalizationSettingInstance extends Instance {
LocalizationSettingInstance({
required WidgetbookLocalesData localesData,
required WidgetbookLocalizationsDelegatesData localizationDelegatesData,
}) : super(
name: 'LocalizationSetting',
properties: [
Property(
key: 'locales',
instance: VariableInstance(variableIdentifier: localesData.name),
),
// TODO this is a big hacky
Property(
key: 'activeLocale',
instance: VariableInstance(
variableIdentifier: '${localesData.name}.first',
),
),
Property(
key: 'localizationsDelegates',
instance: VariableInstance(
variableIdentifier: localizationDelegatesData.name,
),
),
],
);
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
import 'package:widgetbook_annotation/widgetbook_annotation.dart';
import 'package:widgetbook_generator/code_generators/instances/addons/addon_instance.dart';
import 'package:widgetbook_generator/code_generators/instances/addons/addons.dart';
import 'package:widgetbook_generator/code_generators/instances/app_info_instance.dart';
import 'package:widgetbook_generator/code_generators/instances/variable_instance.dart';
Expand Down Expand Up @@ -39,6 +38,14 @@ String generateWidgetbook({
}

addons.add(TextScaleAddonInstance(textScales: textScaleFactors));
if (localesData != null && localizationDelegatesData != null) {
addons.add(
LocalizationAddonInstance(
localesData: localesData,
localizationDelegatesData: localizationDelegatesData,
),
);
}

final widgetbookInstanceCode = WidgetbookInstance(
constructor: constructor,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
import 'package:test/test.dart';
import 'package:widgetbook_generator/code_generators/instances/instances.dart';
import 'package:widgetbook_generator/models/widgetbook_locales_data.dart';
import 'package:widgetbook_generator/models/widgetbook_localizations_delegates_data.dart';

void main() {
group(
'$LocalizationAddonInstance',
() {
test('.name is "LocalizationAddon"', () {
final sut = LocalizationAddonInstance(
localesData: WidgetbookLocalesData(
name: 'locales',
importStatement: '',
dependencies: [],
locales: [],
),
localizationDelegatesData: WidgetbookLocalizationsDelegatesData(
name: 'delegates',
importStatement: '',
dependencies: [],
),
);
expect(sut.name, equals('LocalizationAddon'));
});
},
);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
import 'package:test/test.dart';
import 'package:widgetbook_generator/code_generators/instances/instances.dart';
import 'package:widgetbook_generator/models/widgetbook_locales_data.dart';
import 'package:widgetbook_generator/models/widgetbook_localizations_delegates_data.dart';

void main() {
group('$LocalizationSettingInstance', () {
test(
'.name returns "LocalizationSetting"',
() {
expect(
LocalizationSettingInstance(
localesData: WidgetbookLocalesData(
name: 'locales',
importStatement: '',
dependencies: [],
locales: [],
),
localizationDelegatesData: WidgetbookLocalizationsDelegatesData(
name: 'delegates',
importStatement: '',
dependencies: [],
),
).name,
equals('LocalizationSetting'),
);
},
);
});
}

0 comments on commit 0df318e

Please sign in to comment.