62 lines
1.9 KiB
Cheetah
62 lines
1.9 KiB
Cheetah
# Scaffold Screen — {{PROJECT_NAME}}
|
|
|
|
Creates a complete screen widget with all states handled, following **{{STATE_MANAGEMENT}}** patterns.
|
|
|
|
## Usage
|
|
```
|
|
Create a screen for [screen_name] that shows [content description]
|
|
```
|
|
|
|
## Generated screen template
|
|
|
|
### {{STATE_MANAGEMENT}} screen pattern:
|
|
|
|
**BLoC:**
|
|
```dart
|
|
class [ScreenName]Screen extends StatelessWidget {
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return BlocBuilder<[Feature]Bloc, [Feature]State>(
|
|
builder: (context, state) => switch (state) {
|
|
[Feature]Initial() || [Feature]Loading() => const [ScreenName]Shimmer(),
|
|
[Feature]Loaded(:final data) => [ScreenName]Content(data: data),
|
|
[Feature]Empty() => const [ScreenName]EmptyState(),
|
|
[Feature]Error(:final message) => [ScreenName]ErrorState(
|
|
message: message,
|
|
onRetry: () => context.read<[Feature]Bloc>().add(const [Feature]LoadRequested()),
|
|
),
|
|
},
|
|
);
|
|
}
|
|
}
|
|
```
|
|
|
|
**Riverpod:**
|
|
```dart
|
|
class [ScreenName]Screen extends ConsumerWidget {
|
|
@override
|
|
Widget build(BuildContext context, WidgetRef ref) {
|
|
final state = ref.watch([feature]Provider);
|
|
return state.when(
|
|
loading: () => const [ScreenName]Shimmer(),
|
|
data: (data) => [ScreenName]Content(data: data),
|
|
error: (e, _) => [ScreenName]ErrorState(error: e),
|
|
);
|
|
}
|
|
}
|
|
```
|
|
|
|
## Required sub-widgets to generate
|
|
1. `[ScreenName]Shimmer` — skeleton loading layout matching final content
|
|
2. `[ScreenName]EmptyState` — illustration + headline + CTA button
|
|
3. `[ScreenName]ErrorState` — error message + retry button
|
|
4. `[ScreenName]Content` — the actual data display
|
|
|
|
## Platform considerations ({{PLATFORMS_LIST}})
|
|
{{#if platform_web}}
|
|
- Web: ensure no dart:io usage; test at 375px and 1280px widths
|
|
{{/if}}
|
|
{{#if platform_desktop}}
|
|
- Desktop: add keyboard shortcut support for primary actions
|
|
{{/if}}
|