Skip to main content

AsIconButton

An icon-based button component that provides various styles including filled, outlined, ghost, and more with platform-adaptive styling.

Import

import 'package:alphasow_ui/alphasow_ui.dart';

Basic Usage

AsIconButton(
icon: Icons.favorite,
onPressed: () {
print('Icon button pressed!');
},
)

Button Styles

Standard Icon Button (Default)

AsIconButton(
icon: Icons.home,
onPressed: () {},
)

Filled Icon Button

AsIconButton.filled(
icon: Icons.favorite,
onPressed: () {},
)

Outlined Icon Button

AsIconButton.outlined(
icon: Icons.share,
onPressed: () {},
)

Ghost Icon Button

AsIconButton.ghost(
icon: Icons.settings,
onPressed: () {},
)

Custom Colors

AsIconButton(
icon: Icons.star,
backgroundColor: Colors.amber,
iconColor: Colors.white,
onPressed: () {},
)

Sizes

// Small icon button
AsIconButton(
icon: Icons.add,
size: AsIconButtonSize.small,
onPressed: () {},
)

// Medium icon button (default)
AsIconButton(
icon: Icons.add,
size: AsIconButtonSize.medium,
onPressed: () {},
)

// Large icon button
AsIconButton(
icon: Icons.add,
size: AsIconButtonSize.large,
onPressed: () {},
)

Disabled State

AsIconButton(
icon: Icons.delete,
onPressed: null, // null makes the button disabled
)

API Reference

Properties

PropertyTypeDefaultDescription
iconIconDatarequiredThe icon to display
onPressedVoidCallback?requiredCalled when button is pressed. null disables the button
sizeAsIconButtonSize?AsIconButtonSize.mediumSize of the button
backgroundColorColor?nullCustom background color
iconColorColor?nullCustom icon color
borderRadiusBorderRadius?nullCustom border radius
tooltipString?nullTooltip message
semanticsLabelString?nullAccessibility label

AsIconButtonSize

  • AsIconButtonSize.small - 32x32 points
  • AsIconButtonSize.medium - 40x40 points (default)
  • AsIconButtonSize.large - 48x48 points

Examples

With Tooltip

AsIconButton(
icon: Icons.info,
tooltip: 'Information',
onPressed: () {},
)

Custom Border Radius

AsIconButton.filled(
icon: Icons.play_arrow,
borderRadius: BorderRadius.circular(8),
onPressed: () {},
)

Loading State

class MyWidget extends StatefulWidget {
@override
_MyWidgetState createState() => _MyWidgetState();
}

class _MyWidgetState extends State<MyWidget> {
bool _isLoading = false;

@override
Widget build(BuildContext context) {
return AsIconButton(
icon: _isLoading ? Icons.hourglass_empty : Icons.refresh,
onPressed: _isLoading ? null : () async {
setState(() => _isLoading = true);
await Future.delayed(const Duration(seconds: 2));
setState(() => _isLoading = false);
},
);
}
}

Platform Differences

Material (Android/Web)

  • Uses IconButton with Material styling
  • Supports Material ripple effects
  • Material elevation for filled variants

Cupertino (iOS/macOS)

  • Uses CupertinoButton with icon
  • iOS-style pressed state animation
  • Follows iOS Human Interface Guidelines

See Also