diff --git a/example/lib/app/app.dart b/example/lib/app/app.dart index 38b047906..59a2467f0 100644 --- a/example/lib/app/app.dart +++ b/example/lib/app/app.dart @@ -119,7 +119,7 @@ class _ChewieDemoState extends State { additionalOptions: (context) { return [ OptionItem( - onTap: toggleVideo, + onTap: (context) => toggleVideo(), iconData: Icons.live_tv_sharp, title: 'Toggle Video Src', ), diff --git a/lib/src/cupertino/widgets/cupertino_options_dialog.dart b/lib/src/cupertino/widgets/cupertino_options_dialog.dart index 1fa07aa52..4b923dc6e 100644 --- a/lib/src/cupertino/widgets/cupertino_options_dialog.dart +++ b/lib/src/cupertino/widgets/cupertino_options_dialog.dart @@ -24,7 +24,7 @@ class _CupertinoOptionsDialogState extends State { actions: widget.options .map( (option) => CupertinoActionSheetAction( - onPressed: () => option.onTap!(), + onPressed: () => option.onTap(context), child: Text(option.title), ), ) diff --git a/lib/src/material/material_controls.dart b/lib/src/material/material_controls.dart index 0fbd6f1b7..f77fbcb58 100644 --- a/lib/src/material/material_controls.dart +++ b/lib/src/material/material_controls.dart @@ -162,10 +162,10 @@ class _MaterialControlsState extends State ); } - Widget _buildOptionsButton() { + List _buildOptions(BuildContext context) { final options = [ OptionItem( - onTap: () async { + onTap: (context) async { Navigator.pop(context); _onSpeedButtonTap(); }, @@ -179,7 +179,10 @@ class _MaterialControlsState extends State chewieController.additionalOptions!(context).isNotEmpty) { options.addAll(chewieController.additionalOptions!(context)); } + return options; + } + Widget _buildOptionsButton() { return AnimatedOpacity( opacity: notifier.hideStuff ? 0.0 : 1.0, duration: const Duration(milliseconds: 250), @@ -188,14 +191,15 @@ class _MaterialControlsState extends State _hideTimer?.cancel(); if (chewieController.optionsBuilder != null) { - await chewieController.optionsBuilder!(context, options); + await chewieController.optionsBuilder!( + context, _buildOptions(context)); } else { await showModalBottomSheet( context: context, isScrollControlled: true, useRootNavigator: chewieController.useRootNavigator, builder: (context) => OptionsDialog( - options: options, + options: _buildOptions(context), cancelButtonText: chewieController.optionsTranslation?.cancelButtonText, ), diff --git a/lib/src/material/material_desktop_controls.dart b/lib/src/material/material_desktop_controls.dart index c29767b1a..8141593c8 100644 --- a/lib/src/material/material_desktop_controls.dart +++ b/lib/src/material/material_desktop_controls.dart @@ -183,7 +183,7 @@ class _MaterialDesktopControlsState extends State }) { final options = [ OptionItem( - onTap: () async { + onTap: (context) async { Navigator.pop(context); _onSpeedButtonTap(); }, diff --git a/lib/src/material/widgets/options_dialog.dart b/lib/src/material/widgets/options_dialog.dart index 41a206319..047f12097 100644 --- a/lib/src/material/widgets/options_dialog.dart +++ b/lib/src/material/widgets/options_dialog.dart @@ -28,7 +28,7 @@ class _OptionsDialogState extends State { itemCount: widget.options.length, itemBuilder: (context, i) { return ListTile( - onTap: widget.options[i].onTap, + onTap: () => widget.options[i].onTap(context), leading: Icon(widget.options[i].iconData), title: Text(widget.options[i].title), subtitle: widget.options[i].subtitle != null diff --git a/lib/src/models/option_item.dart b/lib/src/models/option_item.dart index 403e5f720..089d34294 100644 --- a/lib/src/models/option_item.dart +++ b/lib/src/models/option_item.dart @@ -8,13 +8,13 @@ class OptionItem { this.subtitle, }); - Function()? onTap; - IconData iconData; - String title; - String? subtitle; + final void Function(BuildContext context) onTap; + final IconData iconData; + final String title; + final String? subtitle; OptionItem copyWith({ - Function()? onTap, + Function(BuildContext context)? onTap, IconData? iconData, String? title, String? subtitle,