@@ -3,9 +3,10 @@ import 'dart:ui' as ui;
33import 'package:collection/collection.dart' ;
44import 'package:device_info_plus/device_info_plus.dart' ;
55import 'package:flutter/foundation.dart' ;
6- import 'package:flutter/material.dart'
7- show Colors, Icons, CircularProgressIndicator, Scrollbar;
6+ import 'package:flutter/material.dart' show Colors, Icons, CircularProgressIndicator, Scrollbar;
87import 'package:pixel_snap/widgets.dart' ;
8+ import 'package:super_context_menu/super_context_menu.dart' ;
9+ import 'package:super_native_extensions/raw_menu.dart' ;
910
1011import '../menu_model.dart' ;
1112import '../scaffold/mobile/menu_widget_builder.dart' ;
@@ -63,7 +64,7 @@ class DefaultMobileMenuTheme {
6364 case Brightness .light:
6465 return DefaultMobileMenuTheme (
6566 menuDecorationOutside: (bool collapsed) => BoxDecoration (
66- borderRadius: BorderRadius .circular (8 ),
67+ borderRadius: BorderRadius .circular (20 ),
6768 boxShadow: [
6869 BoxShadow (
6970 color: Colors .black.withOpacity (collapsed ? 0 : 0.2 ),
@@ -77,7 +78,7 @@ class DefaultMobileMenuTheme {
7778 color: Colors .grey.shade100,
7879 ),
7980 menuPreviewDecorationOutside: BoxDecoration (
80- borderRadius: BorderRadius .circular (8 ),
81+ borderRadius: BorderRadius .circular (20 ),
8182 boxShadow: [
8283 BoxShadow (
8384 color: Colors .black.withOpacity (0.3 ),
@@ -157,8 +158,7 @@ class DefaultMobileMenuTheme {
157158 : const Color (0xFF333333 ).withOpacity (0.5 ),
158159 separatorColor: const Color (0xFF4C4F63 ),
159160 inactiveMenuVeilColor: (depth) =>
160- const ui.Color .fromARGB (255 , 35 , 36 , 45 )
161- .withOpacity (((depth * 0.6 ).clamp (0.0 , 0.8 ))),
161+ const ui.Color .fromARGB (255 , 35 , 36 , 45 ).withOpacity (((depth * 0.6 ).clamp (0.0 , 0.8 ))),
162162 textStyleForItem: (info) => TextStyle (
163163 color: info.isDestructive
164164 ? const ui.Color .fromARGB (255 , 251 , 116 , 116 )
@@ -169,8 +169,7 @@ class DefaultMobileMenuTheme {
169169 decoration: TextDecoration .none,
170170 ),
171171 decorationForItem: (info) => BoxDecoration (
172- color:
173- info.isPressed ? const Color (0xFF4C4F63 ) : Colors .transparent,
172+ color: info.isPressed ? const Color (0xFF4C4F63 ) : Colors .transparent,
174173 border: info.isHeader && ! info.isLast
175174 ? const Border (
176175 bottom: BorderSide (
@@ -197,8 +196,7 @@ class DefaultMobileMenuWidgetBuilder extends MobileMenuWidgetBuilder {
197196 }
198197 }
199198
200- static final DefaultMobileMenuWidgetBuilder instance =
201- DefaultMobileMenuWidgetBuilder ();
199+ static final DefaultMobileMenuWidgetBuilder instance = DefaultMobileMenuWidgetBuilder ();
202200
203201 /// Allows overriding brightness for the menu UI.
204202 final Brightness ? _brightness;
@@ -275,8 +273,7 @@ class DefaultMobileMenuWidgetBuilder extends MobileMenuWidgetBuilder {
275273 }
276274
277275 @override
278- Widget buildMenu (
279- BuildContext context, MobileMenuInfo menuInfo, Widget child) {
276+ Widget buildMenu (BuildContext context, MobileMenuInfo menuInfo, Widget child) {
280277 return child;
281278 }
282279
@@ -368,8 +365,7 @@ class DefaultMobileMenuWidgetBuilder extends MobileMenuWidgetBuilder {
368365extension on Menu {
369366 bool hasImage () {
370367 return children.any (
371- (element) =>
372- element.image? .asWidget (const IconThemeData .fallback ()) != null ,
368+ (element) => element.image? .asWidget (const IconThemeData .fallback ()) != null ,
373369 );
374370 }
375371}
@@ -437,6 +433,7 @@ class _MenuItem extends StatelessWidget {
437433 } else {
438434 final menuElementAttributes =
439435 element is MenuAction ? (element as MenuAction ).attributes : null ;
436+ final suffixIcon = element is MenuActionX ? (element as MenuActionX ).suffixIcon : null ;
440437
441438 return _MenuItemScaffold (
442439 theme: theme,
@@ -447,7 +444,7 @@ class _MenuItem extends StatelessWidget {
447444 isDestructive: menuElementAttributes? .destructive ?? false ,
448445 isDisabled: menuElementAttributes? .disabled ?? false ,
449446 ),
450- suffix: suffix,
447+ suffix: suffix ?? suffixIcon ,
451448 element: element,
452449 menuInfo: menuInfo,
453450 child: Text (
@@ -475,8 +472,7 @@ class _MenuHeader extends StatelessWidget {
475472 Widget build (BuildContext context) {
476473 Widget ? prefix;
477474 if (menuInfo.menu.image? .asWidget (const IconThemeData .fallback ()) == null ) {
478- final parentPrefixWidth =
479- (menuInfo.parentMenu? .hasImage () ?? false ) ? 28.0 : 0.0 ;
475+ final parentPrefixWidth = (menuInfo.parentMenu? .hasImage () ?? false ) ? 28.0 : 0.0 ;
480476 final thisPrefixWidth = menuInfo.menu.hasImage () ? 28.0 : 0.0 ;
481477
482478 prefix = AnimatedContainer (
@@ -511,8 +507,7 @@ class _MenuHeader extends StatelessWidget {
511507 return AnimatedDefaultTextStyle (
512508 duration: menuInfo.transitionDuration,
513509 style: DefaultTextStyle .of (context).style.copyWith (
514- fontWeight:
515- menuInfo.isCollapsed ? FontWeight .normal : FontWeight .bold,
510+ fontWeight: menuInfo.isCollapsed ? FontWeight .normal : FontWeight .bold,
516511 ),
517512 child: Text (menuInfo.menu.title ?? '' ),
518513 );
@@ -615,8 +610,7 @@ class _MenuItemScaffold extends StatelessWidget {
615610 prefix,
616611 Expanded (
617612 child: Padding (
618- padding:
619- const EdgeInsets .symmetric (vertical: 6 , horizontal: 6 ),
613+ padding: const EdgeInsets .symmetric (vertical: 6 , horizontal: 6 ),
620614 child: child,
621615 ),
622616 ),
0 commit comments