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,
});

Properties

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.

debug

Type: bool | Default: false

Enables visual debugging aids.

DeckOptions(
  debug: true,
)

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,
      ),
    );
  }
}

Best practices

Styling

  1. Start with baseStyle for defaults
  2. Use named styles sparingly
  3. Maintain consistent palette and typography
  4. Test across different screen sizes

Custom widgets

  1. Validate widget arguments early
  2. Provide explicit defaults
  3. Throw helpful errors (rendered on-slide)
  4. Keep widgets focused

Performance

  1. Prefer stateless widgets
  2. Cache expensive operations
  3. Optimize image sizes and formats
  4. Test with real content

Development

  1. Enable debug: true during development
  2. Use dart run superdeck_cli:main build --watch in one terminal and flutter run in another
  3. Version control your SlideStyle definitions alongside app code
  4. Document custom components