flutter_deck 0.22.0
flutter_deck: ^0.22.0 copied to clipboard
A lightweight, customizable, and easy-to-use framework to create presentations in Flutter.
0.22.0 #
- feat: allow adding custom
NavigatorObserverstoFlutterDeckApp - fix: rebuild router when the
slideslist changes - chore: update project dependencies
0.21.0 #
- feat: bump
flutter_deck_clientversion to v0.3.0- BREAKING:
flutter_deckdoes not open the presenter view for Web anymore. Since theopenPresenterView()method is added to theflutter_deck_client, the client is responsible for opening the presenter view now.- Migration: if you were using the
flutter_deck_web_clientbefore, update the package dependency to v0.4.0. - Migration: if you were using any other implementation of the
flutter_deck_client, make sure it uses the v0.3.0 of the package and implements theopenPresenterView()method.
- Migration: if you were using the
- BREAKING:
0.20.0 #
- fix: scale slide content beyond the specified slide size
- feat: migrate to package:web
- chore: bump to SDK v3.8.0 / Flutter v3.32.0
0.19.0 #
- feat: allow setting the initial slide in the
FlutterDeckSlideConfiguration - fix: scroll controller initialization in the
FlutterDeckDrawer
0.18.0 #
- fix: show controls on tap on mobile devices (iOS and Android)
- fix: controls are auto-hidden when the cursor is over them
- feat: add swipe left/right gestures to navigate between slides
- feat: add control gestures configuration
- docs: update documentation website
0.17.0 #
- feat: allow using any widget as a slide
- docs: add 'Creating Slides' guide to the documentation website
0.16.1 #
- docs: update README.md
0.16.0 #
- feat: allow passing
AutoSizeGroupas a property toFlutterDeckBulletList - feat: add full screen management for desktop platforms
- fix: header max width change on window resize
- fix:
FlutterDeckSlide.splitslide template alignment issues - docs: launch a documentation website
- ci: update GitHub Actions workflows for PRs and the main branch
- chore: update go_router to v14.2.0
- chore: update melos to v6.1.0
- chore: use a common analysis_options.yaml file
0.15.0 #
- feat: support Flutter 3.22
- feat: add
textStyleproperty to theFlutterDeckCodeHighlightwidget - feat: add slide step number to the presenter view
- fix: keep the slide state when marker is toggled
0.14.0 #
- feat: add presenter view
- feat: add speaker notes to the slide configuration
- chore: update project structure
- refactor: handle internal slide indexing in the router
0.13.0 #
- feat: support header and footer builder overrides in slide templates
- feat: add
stepOffsetproperty toFlutterDeckBulletList - fix:
backgroundBuildernot working withFlutterDeckSlide.split
0.12.2 #
- fix: ignore unnecessary_import lint rule
0.12.1 #
- fix: support Flutter versions <3.19.0
0.12.0 #
- feat: add support for slide deck localization
- feat: add controls for localization
- docs: add table of contents to README.md
0.11.1 #
- fix: hot reload doesn't work on macOS
0.11.0 #
- feat: set scroll position to currently active slide on navigation drawer open
- fix: FlutterDeckBulletList scaling issues
0.10.1 #
-
refactor: rework flutter deck controls
-
BREAKING: the
enabledandshortcutsEnabledproperties have been removed-
Migration: to disable all controls, instead of:
FlutterDeckConfiguration( controls: FlutterDeckControlsConfiguration( enabled: false, shortcutsEnabled: false, <...> ), <...> )use:
FlutterDeckConfiguration( controls: FlutterDeckControlsConfiguration.disabled(), <...> ) -
Migration: to disable shortcuts, instead of:
FlutterDeckControlsConfiguration( shortcutsEnabled: false, <...> )use:
FlutterDeckControlsConfiguration( shortcuts: FlutterDeckShortcutsConfiguration(enabled: false), <...>, )
-
-
feat: support key combinations for shortcuts
-
BREAKING:
nextKey,previousKey,openDrawerKeyandtoggleMarkerKeywere renamed and moved to theFlutterDeckShortcutsConfigurationclass-
nextKey->nextSlide -
previousKey->previousSlide -
openDrawerKey->toggleNavigationDrawer -
toggleMarkerKey->toggleMarker -
Migration: instead of:
FlutterDeckControlsConfiguration( nextKey: LogicalKeyboardKey.arrowRight, previousKey: LogicalKeyboardKey.arrowLeft, openDrawerKey: LogicalKeyboardKey.period, toggleMarkerKey: LogicalKeyboardKey.keyM, <...>, )use:
FlutterDeckControlsConfiguration( shortcuts: FlutterDeckShortcutsConfiguration( nextSlide: SingleActivator(LogicalKeyboardKey.arrowRight), previousSlide: SingleActivator(LogicalKeyboardKey.arrowLeft), toggleMarker: SingleActivator(LogicalKeyboardKey.keyM), toggleNavigationDrawer: SingleActivator(LogicalKeyboardKey.period), ), <...>, )
-
-
-
feat: add support for key combinations for shortcuts
-
Instead of passing a
LogicalKeyboardKey, pass aSingleActivator. It enables you not only to specify a single key, but also its modifiers:FlutterDeckControlsConfiguration( shortcuts: FlutterDeckShortcutsConfiguration( nextSlide: SingleActivator( LogicalKeyboardKey.arrowRight, control: true, ), <...>, ), <...>, )
-
-
feat: add
titleproperty to theFlutterDeckSlideConfiguration -
feat: navigation drawer item title is generated from the slide configuration
-
feat: add full screen mode toggle (web only)
-
feat: add slide deck auto-play controls
0.9.1 #
- fix: adjust control widget styling and the default slide background color
0.9.0 #
- feat: add
FlutterDeckSlideSizeto set the slide size for the whole presentation - feat: add flutter deck controls widget
- ci: update the example's base url for GitHub Pages deployment
0.8.0 #
- feat: add marker tool
- feat: add quote template
FlutterDeckSlide.quote - chore: upgrade go_router to v12.0.0
0.7.0 #
- feat: add an optional custom widget to the footer
- feat: support for gradient progress indicator
0.6.1 #
- fix: export
SplitSlideRatioclass from the framework
0.6.0 #
- feat: add big fact template
FlutterDeckSlide.bigFact - docs: add slides generation using mason section to README.md
0.5.0 #
- feat: add
FlutterDeckImageSlideTheme - chore(deps): upgrade to go_router ^11.0.0
0.4.3 #
- fix:
FlutterDeckSlideStepsBuildertriggers builder on slide change - fix:
FlutterDeckSlideStepsListenertriggers listener on slide change
0.4.2 #
- docs: update split slide documentation in README.md
0.4.1 #
- fix: override text colors for Material text styles
0.4.0 #
-
BREAKING: refactor: rework the way how a new slide is created
-
Migration: every slide must extend the
FlutterDeckSlideWidgetand override thebuildmethod:class ExampleSlide extends FlutterDeckSlideWidget { const ExampleSlide() : super( configuration: const FlutterDeckSlideConfiguration( route: '/example', ), ); @override FlutterDeckSlide build(BuildContext context) { <...> } } -
Instead of extending
FlutterDeckTitleSlide:class TitleSlide extends FlutterDeckTitleSlide { const TitleSlide({super.key}) : super( configuration: const FlutterDeckSlideConfiguration( route: '/title-slide', footer: FlutterDeckFooterConfiguration(showFooter: false), ), ); @override String get title => 'Here goes the title of the slide'; @override String? get subtitle => 'Here goes the subtitle of the slide (optional)'; }use
FlutterDeckSlide.title:class TitleSlide extends FlutterDeckSlideWidget { const TitleSlide() : super( configuration: const FlutterDeckSlideConfiguration( route: '/title-slide', footer: FlutterDeckFooterConfiguration(showFooter: false), ), ); @override FlutterDeckSlide build(BuildContext context) { return FlutterDeckSlide.title( title: 'Here goes the title of the slide', subtitle: 'Here goes the subtitle of the slide (optional)', ); } } -
Instead of extending
FlutterDeckBlankSlide:class BlankSlide extends FlutterDeckBlankSlide { const BlankSlide({super.key}) : super( configuration: const FlutterDeckSlideConfiguration( route: '/blank-slide', header: FlutterDeckHeaderConfiguration( title: 'Blank slide template', ), ), ); @override Widget body(BuildContext context) { return Text('Here goes the content of the slide'); } }use
FlutterDeckSlide.blank:class BlankSlide extends FlutterDeckSlideWidget { const BlankSlide() : super( configuration: const FlutterDeckSlideConfiguration( route: '/blank-slide', header: FlutterDeckHeaderConfiguration( title: 'Blank slide template', ), ), ); @override FlutterDeckSlide build(BuildContext context) { return FlutterDeckSlide.blank( builder: (context) => const Text('Here goes the content of the slide'), ); } } -
Instead of extending
FlutterDeckImageSlide:class ImageSlide extends FlutterDeckImageSlide { const ImageSlide({super.key}) : super( configuration: const FlutterDeckSlideConfiguration( route: '/image-slide', header: FlutterDeckHeaderConfiguration( title: 'Image slide template', ), ), ); @override Image get image => Image.asset('assets/image.png'); @override String? get label => 'Here goes the label of the image (optional)'; }use
FlutterDeckSlide.image:class ImageSlide extends FlutterDeckSlideWidget { const ImageSlide() : super( configuration: const FlutterDeckSlideConfiguration( route: '/image-slide', header: FlutterDeckHeaderConfiguration( title: 'Image slide template', ), ), ); @override FlutterDeckSlide build(BuildContext context) { return FlutterDeckSlide.image( imageBuilder: (context) => Image.asset('assets/image.png'), label: 'Here goes the label of the image (optional)', ); } } -
Instead of extending
FlutterDeckSplitSlide:class SplitSlide extends FlutterDeckSplitSlide { const SplitSlide({super.key}) : super( configuration: const FlutterDeckSlideConfiguration( route: '/split-slide', header: FlutterDeckHeaderConfiguration( title: 'Split slide template', ), ), ); @override Widget left(BuildContext context) { return Text('Here goes the LEFT section content of the slide'); } @override Widget right(BuildContext context) { return Text('Here goes the RIGHT section content of the slide'); } }use
FlutterDeckSlide.split:class SplitSlide extends FlutterDeckSlideWidget { const SplitSlide() : super( configuration: const FlutterDeckSlideConfiguration( route: '/split-slide', header: FlutterDeckHeaderConfiguration( title: 'Split slide template', ), ), ); @override FlutterDeckSlide build(BuildContext context) { return FlutterDeckSlide.split( leftBuilder: (context) { return const Text('Here goes the LEFT section content of the slide'); }, rightBuilder: (context) { return const Text('Here goes the RIGHT section content of the slide'); }, ); } } -
Instead of extending
FlutterDeckSlideBase:class TemplateSlide extends FlutterDeckSlideBase { const TemplateSlide({super.key}) : super( configuration: const FlutterDeckSlideConfiguration( route: '/template-slide', ), ); @override FlutterDeckBackground background(BuildContext context) { return FlutterDeckBackground.solid( Theme.of(context).colorScheme.background, ); } @override Widget? content(BuildContext context) { return const ColoredBox( color: Colors.red, child: Text('Content goes here...'), ); } @override Widget? footer(BuildContext context) { return ColoredBox( color: Theme.of(context).colorScheme.secondary, child: const Text('Footer goes here...'), ); } @override Widget? header(BuildContext context) { return ColoredBox( color: Theme.of(context).colorScheme.primary, child: const Text('Header goes here...'), ); } }use
FlutterDeckSlide.template:class TemplateSlide extends FlutterDeckSlideWidget { const TemplateSlide() : super( configuration: const FlutterDeckSlideConfiguration( route: '/template-slide', ), ); @override FlutterDeckSlide build(BuildContext context) { return FlutterDeckSlide.template( backgroundBuilder: (context) => FlutterDeckBackground.solid( Theme.of(context).colorScheme.background, ), contentBuilder: (context) => const ColoredBox( color: Colors.red, child: Text('Content goes here...'), ), footerBuilder: (context) => ColoredBox( color: Theme.of(context).colorScheme.secondary, child: const Text('Footer goes here...'), ), headerBuilder: (context) => ColoredBox( color: Theme.of(context).colorScheme.primary, child: const Text('Header goes here...'), ), ); } } -
Instead of extending
FlutterDeckSlide:class CustomSlide extends FlutterDeckSlide { const CustomSlide({super.key}) : super( configuration: const FlutterDeckSlideConfiguration( route: '/custom-slide', ), ); @override Widget slide(BuildContext context) { return const Text('Here goes your custom slide content...'); } }use
FlutterDeckSlide.custom:class CustomSlide extends FlutterDeckSlideWidget { const CustomSlide() : super( configuration: const FlutterDeckSlideConfiguration( route: '/custom-slide', ), ); @override FlutterDeckSlide build(BuildContext context) { return FlutterDeckSlide.custom( builder: (context) { return const Text('Here goes your custom slide content...'); }, ); } }
-
-
BREAKING:
lightThemeanddarkThemeare now of typeFlutterDeckThemeDatainstead ofThemeData-
Migration: if you have used custom
lightThemeordarkTheme, wrap them withFlutterDeckThemeData.fromThemeconstructor:return FlutterDeckApp( <...> lightTheme: FlutterDeckThemeData.fromTheme( ThemeData(<...>), ), darkTheme: FlutterDeckThemeData.fromTheme( ThemeData(<...>), ), );
-
-
BREAKING: removed
leftBackgroundColorandrightBackgroundColorproperties from theFlutterDeckSplitSlidetemplate. UseFlutterDeckSplitSlideThemeinstead -
BREAKING: removed
colorproperty from theFlutterDeckHeadercomponent. UseFlutterDeckHeaderThemeinstead -
BREAKING: removed
slideNumberColorandsocialHandleColorproperties from theFlutterDeckFootercomponent. UseFlutterDeckFooterThemeinstead -
BREAKING: removed
textStyleproperty from theFlutterDeckCodeHighlightcomponent. UseFlutterDeckCodeHighlightThemeinstead -
feat: implement global slide deck theming
-
feat: add
FlutterDeckSpeakerInfoWidgetcomponent to display speaker information -
refactor: remove the redundant
InheritedFlutterDeckwidget -
docs: update README.md and widgets' documentation
0.3.0 #
- feat: handle cursor visibility
- refactor: create
FlutterDeckControlsandFlutterDeckControlsNotifierto centralize the flutter deck control logic - docs: update README.md
0.2.0 #
-
BREAKING: feat: updated
backgroundmethod signature for theFlutterDeckSlideBase-
Migration: update the
backgroundmethod signature in your code from:Widget? background(BuildContext context)to:
FlutterDeckBackground background(BuildContext context) -
Instead of:
Widget? background(BuildContext context) { return null; }do:
FlutterDeckBackground background(BuildContext context) { return FlutterDeckBackground.transparent(); } -
Instead of:
Widget? background(BuildContext context) { return YourCustomBackgroundWidget(); }do:
FlutterDeckBackground background(BuildContext context) { return FlutterDeckBackground.custom( child: YourCustomBackgroundWidget(), ); }
-
-
feat: add FlutterDeckCodeHighlight widget
-
feat: make the background configurable for the whole slide deck
-
feat: allow to hide slides in the slide deck
-
feat: add presentation progress indicator
-
fix: drawer toggle
-
docs: update the example app and README.md
0.1.0+3 #
- docs: extend README.md with more information, code snippets and presentation examples
0.1.0+2 #
- docs: minor README.md update
0.1.0+1 #
- feat: initial commit 🎉
