DeckOptions reference
Complete API reference for configuring SuperDeck presentations
DeckOptions reference
DeckOptions configures SuperDeckApp styling, custom widgets, slide parts, templates, and debug visuals.
Constructor
const DeckOptions({
SlideStyle? baseStyle,
Map<String, SlideStyle> styles = const {},
Map<String, WidgetFactory> widgets = const {},
SlideParts parts = const SlideParts(),
bool debug = false,
Map<String, SlideTemplate> templates = const {},
SlideTemplate? defaultTemplate,
});
baseStyle
Type: SlideStyle? | Default: null
Base style for all slides.
DeckOptions(
baseStyle: SlideStyle(),
)
styles
Type: Map<String, SlideStyle> | Default: {}
Named style variants for specific slides.
SuperDeck styles are configured in app code through DeckOptions.baseStyle
and DeckOptions.styles. There is no separate styles.yaml file to load.
DeckOptions(
styles: {
'title': SlideStyle(),
},
)
Use in slides:
---
style: title
---
# This slide uses the 'title' style
widgets
Type: Map<String, WidgetFactory> | Default: {}
Custom widget factories. A WidgetFactory is a function that takes Map<String, Object?> args and returns a Widget.
DeckOptions(
widgets: {
'twitter': twitterWidget,
},
)
Use in Markdown:
@widget {
name: "twitter"
username: "flutterdev"
tweetId: "123"
}
Or shorthand:
@twitter {
username: "flutterdev"
tweetId: "123"
}
WidgetFactory example (simple function)
import 'package:flutter/widgets.dart';
Widget twitterWidget(Map<String, Object?> args) {
final username = args['username'] as String? ?? '';
final tweetId = args['tweetId'] as String? ?? '';
return Text('Twitter: @$username ($tweetId)');
}
parts
Type: SlideParts | Default: const SlideParts()
Slide components (header, footer, background).
DeckOptions(
parts: SlideParts(
header: CustomHeaderPart(), // PreferredSizeWidget
footer: CustomFooterPart(), // PreferredSizeWidget
background: CustomBackgroundPart(), // Widget
),
)
See Custom Slide Parts Guide for examples.
templates
Type: Map<String, SlideTemplate> | Default: {}
Named slide templates that bundle chrome (header, footer, background) with an isolated style system. Templates act like Keynote master slides, providing consistent visual framing across slides.
DeckOptions(
templates: {
'keynote': SlideTemplate(
parts: SlideParts(
header: BrandHeader(),
footer: BrandFooter(),
),
baseStyle: SlideStyle(),
),
},
)
Use in slides:
---
template: keynote
---
# This slide uses the 'keynote' template
defaultTemplate
Type: SlideTemplate? | Default: null
Default template applied to all slides that do not specify an explicit template. Individual slides can opt out by setting template: 'none' in their front matter.
DeckOptions(
defaultTemplate: SlideTemplate(
parts: SlideParts(
header: BrandHeader(),
),
),
)
Complete configuration example
import 'package:flutter/material.dart';
import 'package:superdeck/superdeck.dart';
Widget twitterWidget(Map<String, Object?> args) {
final username = args['username'] as String? ?? '';
return Text('Twitter: @$username');
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return SuperDeckApp(
options: DeckOptions(
widgets: {
'twitter': twitterWidget,
},
// Optional: provide slide chrome (header/footer/background)
parts: SlideParts(
header: CustomHeaderPart(),
footer: CustomFooterPart(),
background: CustomBackgroundPart(),
),
// Templates for consistent slide framing
templates: {
'brand': SlideTemplate(
parts: SlideParts(header: BrandHeader()),
),
},
// Default template for all slides
defaultTemplate: SlideTemplate(
parts: SlideParts(header: BrandHeader()),
),
// Debug mode for development
debug: kDebugMode,
),
);
}
}
Styling
- Start with
baseStylefor defaults - Use named styles sparingly
- Maintain consistent palette and typography
- Test across different screen sizes
Custom widgets
- Validate widget arguments early
- Provide explicit defaults
- Throw helpful errors (rendered on-slide)
- Keep widgets focused