generateForAnnotatedElement method
Future<String>
generateForAnnotatedElement(
- Element element,
- ConstantReader annotation,
- BuildStep buildStep
Implement to return source code to generate for element
.
This method is invoked based on finding elements annotated with an
instance of T
. The annotation
is provided as a ConstantReader
.
Supported return values include a single String or multiple String instances within an Iterable or Stream. It is also valid to return a Future of String, Iterable, or Stream.
Implementations should return null
when no content is generated. Empty
or whitespace-only String instances are also ignored.
Implementation
@override
Future<String> generateForAnnotatedElement(
Element element,
ConstantReader annotation,
BuildStep buildStep,
) async {
final useCases = await _loadDataFromJson<WidgetbookUseCaseData>(
buildStep,
'**.usecase.widgetbook.json',
WidgetbookUseCaseData.fromJson,
);
final deviceFrameBuilder =
await _loadDataFromJson<WidgetbookDeviceFrameData>(
buildStep,
'**.deviceframebuilder.widgetbook.json',
WidgetbookDeviceFrameData.fromJson,
);
final localizationBuilder =
await _loadDataFromJson<WidgetbookLocalizationBuilderData>(
buildStep,
'**.localizationbuilder.widgetbook.json',
WidgetbookLocalizationBuilderData.fromJson,
);
final appBuilder = await _loadDataFromJson<WidgetbookAppBuilderData>(
buildStep,
'**.appbuilder.widgetbook.json',
(json) => WidgetbookAppBuilderData.fromJson(json),
);
final scaffoldBuilder =
await _loadDataFromJson<WidgetbookScaffoldBuilderData>(
buildStep,
'**.scaffoldbuilder.widgetbook.json',
WidgetbookScaffoldBuilderData.fromJson,
);
final themeBuilder = await _loadDataFromJson<WidgetbookThemeBuilderData>(
buildStep,
'**.themebuilder.widgetbook.json',
WidgetbookThemeBuilderData.fromJson,
);
final useCaseBuilder =
await _loadDataFromJson<WidgetbookUseCaseBuilderData>(
buildStep,
'**.usecasebuilder.widgetbook.json',
WidgetbookUseCaseBuilderData.fromJson,
);
final locales = await _getLocales(buildStep);
final localizationDelegates = await _getLocalizationDelegates(buildStep);
final name = _getName(annotation);
final themeType = _getThemeType(annotation);
final devices = _getDevices(annotation);
final frames = _getFrames(annotation);
final textScaleFactors = _getTextScaleFactors(annotation);
final themes = await _getThemes(buildStep);
final foldersExpanded = _getFoldersExpanded(annotation);
final widgetsExpanded = _getWidgetsExpanded(annotation);
final constructor = _getConstructor(annotation);
final buffer = StringBuffer()
..writeln(
generateImports(
[
...themes,
...useCases,
if (locales != null) locales,
],
),
)
..writeln(
generateMain(),
)
..writeln(
generateWidgetbook(
name: name,
constructor: constructor,
themeTypeData: themeType,
themes: themes,
useCases: useCases,
devices: devices,
frames: frames,
textScaleFactors: textScaleFactors,
foldersExpanded: foldersExpanded,
widgetsExpanded: widgetsExpanded,
localesData: locales,
localizationDelegatesData: localizationDelegates,
deviceFrameBuilder:
deviceFrameBuilder.isNotEmpty ? deviceFrameBuilder.first : null,
localizationBuilder:
localizationBuilder.isNotEmpty ? localizationBuilder.first : null,
appBuilder: appBuilder.isNotEmpty ? appBuilder.first : null,
scaffoldBuilder:
scaffoldBuilder.isNotEmpty ? scaffoldBuilder.first : null,
themeBuilder: themeBuilder.isNotEmpty ? themeBuilder.first : null,
useCaseBuilder:
useCaseBuilder.isNotEmpty ? useCaseBuilder.first : null,
),
);
return buffer.toString();
}