BasePullDownButton class
Internal: CN* classes from cupertino_native package Used only for iOS platform channel communication Public API should use Base* classes instead BasePullDownButton - Cross-platform pull-down button with native iOS support
Uses CNPullDownButton (Cupertino Native) for iOS - provides native iOS pull-down button
with inline actions, menu items, and submenus via UIButton with UIMenu.
Uses PopupMenuButton (Material) for Android with submenu support.
*** use cupertino = { forceUseMaterial: true } force use Material popup on iOS *** use material = { forceUseCupertino: true } force use CNPullDownButton on Android
Features:
- Native iOS pull-down button via CNPullDownButton (cupertino_native package)
- Material Design popup menu with submenu support for Android
- Inline action buttons (horizontal row of buttons at top of menu)
- Regular menu items with icons and labels
- Submenus with nested menu items (BasePullDownMenuSubmenu)
- Dividers for visual organization
- Destructive action styling
- Built-in liquid glass effects on iOS (no manual wrapper needed)
- Automatic platform-specific conversion of menu entries
Example usage with submenu:
BasePullDownButton.icon(
buttonIcon: CNSymbol('ellipsis.circle', size: 24),
size: 44,
items: [
// Inline actions row
BasePullDownMenuInlineActions(
actions: [
BasePullDownInlineAction(
label: 'Crop',
icon: CNSymbol('crop', size: 24),
),
BasePullDownInlineAction(
label: 'Filter',
icon: CNSymbol('camera.filters', size: 24),
),
],
),
BasePullDownMenuDivider(),
// Regular menu items
BasePullDownMenuItem(
label: 'Save',
icon: CNSymbol('square.and.arrow.down'),
),
// Submenu with nested items
BasePullDownMenuSubmenu(
title: 'Attachment View',
icon: CNSymbol('paperclip'),
items: [
BasePullDownMenuItem(
label: 'Gallery View',
icon: CNSymbol('square.grid.2x2'),
),
BasePullDownMenuItem(
label: 'List View',
icon: CNSymbol('list.bullet'),
),
],
),
BasePullDownMenuDivider(),
BasePullDownMenuItem(
label: 'Delete',
icon: CNSymbol('trash'),
isDestructive: true,
),
],
onSelected: (index) {
print('Menu item $index selected');
},
onInlineActionSelected: (index) {
print('Inline action $index selected');
},
)
Updated: 2024.10.25 - Refactored to use Base* menu entry classes in public API
- Inheritance
-
- Object
- DiagnosticableTree
- Widget
- StatelessWidget
- BaseStatelessWidget
- BasePullDownButton
- Implementers
Constructors
-
BasePullDownButton({Key? key, required List<
BasePullDownMenuEntry> items, ValueChanged<int> ? onSelected, ValueChanged<int> ? onInlineActionSelected, String? buttonLabel, double size = 44.0, bool enabled = true, BaseParam? baseParam}) -
const
-
BasePullDownButton.icon({Key? key, required CNSymbol? buttonIcon, double size = 44.0, required List<
BasePullDownMenuEntry> items, ValueChanged<int> ? onSelected, ValueChanged<int> ? onInlineActionSelected, bool enabled = true, BaseParam? baseParam}) -
Creates an icon-style pull-down button
const
Properties
- baseParam → BaseParam?
-
Personalization parameters, gets platform parameters first, then mode parameters
finalinherited
-
Icon for the button (icon style) - CNSymbol from cupertino_native
final
-
Label for the button (text style)
final
- enabled → bool
-
Whether the button is enabled
final
- hashCode → int
-
The hash code for this object.
no setterinherited
-
items
→ List<
BasePullDownMenuEntry> -
List of menu items and inline actions
Can contain BasePullDownMenuItem, BasePullDownMenuDivider,
BasePullDownMenuInlineActions, or BasePullDownMenuSubmenu
final
- key → Key?
-
Controls how one widget replaces another widget in the tree.
finalinherited
-
onInlineActionSelected
→ ValueChanged<
int> ? -
Called when an inline action is selected
final
-
onSelected
→ ValueChanged<
int> ? -
Called when a regular menu item is selected
final
- runtimeType → Type
-
A representation of the runtime type of the object.
no setterinherited
- size → double
-
Size of the button
final
Methods
-
beforeBuild(
BuildContext context) → void -
Called before build
inherited
-
beforeBuildByCupertino(
BuildContext context) → void -
Called before buildByCupertino
inherited
-
beforeBuildByCupertinoNative(
BuildContext context) → void -
Called before buildByCupertinoNative (native iOS implementation)
inherited
-
beforeBuildByMaterial(
BuildContext context) → void -
Called before buildByMaterial
inherited
-
build(
BuildContext context) → Widget -
Describes the part of the user interface represented by this widget.
inherited
-
buildByCupertino(
BuildContext context) → Widget - build on cupertino mode (Flutter implementation)
-
buildByCupertinoNative(
BuildContext context) → dynamic -
build on cupertino mode with native iOS components (cupertino_native package)
This is called when baseParam.nativeIOS = true
Default implementation falls back to buildByCupertino()
inherited
-
buildByMaterial(
BuildContext context) → Widget - build on material mode
-
commonBuild(
BuildContext context, BaseParam? baseParam) → dynamic -
inherited
-
createElement(
) → StatelessElement -
Creates a StatelessElement to manage this widget's location in the tree.
inherited
-
debugDescribeChildren(
) → List< DiagnosticsNode> -
Returns a list of DiagnosticsNode objects describing this node's
children.
inherited
-
debugFillProperties(
DiagnosticPropertiesBuilder properties) → void -
Add additional properties associated with the node.
inherited
-
getBuildMode(
BaseParam? baseParam) → WidgetBuildMode -
inherited
-
noSuchMethod(
Invocation invocation) → dynamic -
Invoked when a nonexistent method or property is accessed.
inherited
-
toDiagnosticsNode(
{String? name, DiagnosticsTreeStyle? style}) → DiagnosticsNode -
Returns a debug representation of the object that is used by debugging
tools and by DiagnosticsNode.toStringDeep.
inherited
-
toString(
{DiagnosticLevel minLevel = DiagnosticLevel.info}) → String -
A string representation of this object.
inherited
-
toStringDeep(
{String prefixLineOne = '', String? prefixOtherLines, DiagnosticLevel minLevel = DiagnosticLevel.debug, int wrapWidth = 65}) → String -
Returns a string representation of this node and its descendants.
inherited
-
toStringShallow(
{String joiner = ', ', DiagnosticLevel minLevel = DiagnosticLevel.debug}) → String -
Returns a one-line detailed description of the object.
inherited
-
toStringShort(
) → String -
A short, textual description of this widget.
inherited
-
valueOf(
String key, dynamic value) → dynamic -
inherited
-
valueOfBaseParam(
BaseParam? baseParam, String key, dynamic value) → dynamic -
No reflection available in Dart
First get value from platform, then from mode, finally from value itself
inherited
Operators
-
operator ==(
Object other) → bool -
The equality operator.
inherited