Craft stunning Flutter UIs with modular, highly-customisable components inspired by ShadCN UI, NextUI, and Chakra UI.

v2.0.0 introduces breaking changes. See the Migration Guide below.


Installation

flutter pub add auraa_ui
import 'package:auraa_ui/aura_ui.dart';

Theming

Wire AuraUI into Flutter's standard theming system once at the app level:

MaterialApp(
  theme: ThemeData(
    extensions: [
      AuraUITheme(
        buttonRadius: 12,
        cardRadius: 8,
        containerRadius: 4,
      ),
    ],
  ),
)

All AuraUI components read from AuraUITheme automatically. No global singletons needed.


Widget Catalog

A single unified carousel with auto-play, dot/line indicators, prev/next buttons, and optional per-item tap callbacks.

AuraUICarousel(
  pageController: PageController(),
  items: [
    CarouselItem(imageUrl: 'https://example.com/img1.jpg'),
    CarouselItem(
      imageUrl: 'https://example.com/img2.jpg',
      onTap: () => print('tapped slide 2'),
    ),
  ],
  indicatorType: CarouselIndicatorType.dot,   // or .line
  showButtons: true,
  duration: const Duration(seconds: 4),
)

🔲 Buttons

AuiButton is the single button widget with named constructors for every common variant.

// Elevated (default)
AuiButton(
  onPressed: () {},
  child: const Text('Click me'),
)

// Size variants
AuiButton.small(onPressed: () {}, child: const Text('Small'))
AuiButton.medium(onPressed: () {}, child: const Text('Medium'))
AuiButton.large(onPressed: () {}, child: const Text('Large'))

// Shape variants
AuiButton.rounded(onPressed: () {}, child: const Text('Pill'))
AuiButton.outlined(onPressed: () {}, borderColor: Colors.blue, child: const Text('Outlined'))
AuiButton.text(onPressed: () {}, child: const Text('Text'))

// Full-width
AuiButton.block(onPressed: () {}, child: const Text('Full width'))

// Disabled
AuiButton(onPressed: () {}, disabled: true, child: const Text('Disabled'))

// Soft / ghost variant
AuiButton(
  onPressed: () {},
  soft: true,
  borderColor: Colors.purple,
  child: const Text('Soft'),
)

// Icon + label (compose freely)
AuiButton(
  onPressed: () {},
  child: Row(children: [
    const Icon(Icons.send),
    const SizedBox(width: 8),
    const Text('Send'),
  ]),
)

🔔 Toasts

// Solid background
AuiToast.simple(
  context: context,
  text: 'Saved successfully!',
  color: Colors.green,
  textColor: Colors.white,
);

// Light / ghost background
AuiToast.light(
  context: context,
  text: 'Changes saved',
  color: Colors.blue,
  textColor: Colors.blue,
);

// With icon
AuiToast.withIcon(
  context: context,
  text: 'Upload complete',
  icon: Icons.cloud_done,
  iconColor: Colors.white,
  color: Colors.teal,
  textColor: Colors.white,
);

// All methods accept optional width and duration:
AuiToast.simple(
  context: context,
  text: 'Custom size',
  color: Colors.red,
  textColor: Colors.white,
  width: 400,
  duration: const Duration(seconds: 3),
);

💬 Dialogs

AuiDialog.show(
  context: context,
  title: 'Confirm deletion',
  content: const Text('This action cannot be undone.'),
  actions: [
    TextButton(onPressed: () => Navigator.pop(context), child: const Text('Cancel')),
    ElevatedButton(onPressed: () {}, child: const Text('Delete')),
  ],
);

✨ Sparkle Text

SparklesText(
  sparklesCount: 12,
  firstColor: Color(0xFF9E7AFF),
  secondColor: Color(0xFFFE8BBB),
  child: Text(
    'Magic ✨',
    style: TextStyle(fontSize: 32, fontWeight: FontWeight.bold),
  ),
)

Migration from 1.x to 2.0

// 1.x — two separate widgets
AuraUICarousel(images: ['https://...'], pageController: ...)
AuraUICarouselTappable(items: [CarouselItem(imageUrl: '...', onTap: () {})], ...)

// 2.0 — one widget, onTap is optional
AuraUICarousel(
  items: [
    CarouselItem(imageUrl: 'https://...'),                    // no tap
    CarouselItem(imageUrl: 'https://...', onTap: () {}),     // with tap
  ],
  pageController: ...,
)

Dialog

// 1.x
AuiDialog.static(context: context, title: 'Hi')

// 2.0
AuiDialog.show(context: context, title: 'Hi')

Toasts

// 1.x
simpleToastMessage(text: 'Hi', color: Colors.green, textColour: Colors.white, context: context)
lightBackgroundToastMessage(...)
iconMessage(...)

// 2.0
AuiToast.simple(text: 'Hi', color: Colors.green, textColor: Colors.white, context: context)
AuiToast.light(...)
AuiToast.withIcon(...)

All old names are removed in v2.0.0. Update your call sites using the migration examples above.


Features

  • Modular, composable components with sensible defaults
  • Full theming via AuraUITheme (ThemeExtension)
  • Every component is highly customisable with WidgetStateProperty support
  • Zero extra dependencies — built entirely on Flutter's own primitives
  • Tested with widget tests

Contributing

Calling on all the trendsetting Flutter enthusiasts! ❤️‍🔥 Join forces as we pioneer the creation of the ultimate Flutter UI library. Let's make waves together! 🚀

Please refer to our contribution guidelines and say hi on Instagram