
Shadcn UI for Flutter
FreeBuild customizable Flutter UIs with accessible components.
Free · Opens the source repo
What Shadcn UI for Flutter does
Shadcn UI for Flutter is a comprehensive library designed to streamline the development of Flutter applications by providing a set of high-quality, customizable components. This library is inspired by the shadcn/ui design principles and offers a wide range of UI elements including buttons, cards, forms, and more. Each component is built with accessibility in mind, ensuring that applications are usable by a wider audience. The library also includes detailed documentation to help developers understand how to implement each component effectively.
The skill features a powerful theming system that allows developers to apply built-in color schemes or create custom themes using ShadThemeData. This flexibility is crucial for maintaining a consistent look and feel across applications, especially when implementing design systems. The documentation includes guides on theming, typography, and responsive design, making it easier for developers to adapt the components to fit their specific needs.
In addition to the theming capabilities, Shadcn UI for Flutter includes a variety of components that cater to common UI patterns. Whether you need an accordion for displaying expandable content, a date picker for selecting dates, or a modal dialog for user interactions, this library has it covered. Each component comes with usage examples and detailed references, which are invaluable for both novice and experienced developers.
Overall, Shadcn UI for Flutter is an excellent resource for anyone looking to build modern, responsive, and accessible Flutter applications. Its comprehensive documentation and customizable components make it a go-to choice for developers and designers alike.
When to use it
Use this skill when developing Flutter applications that require a consistent UI with customizable components.
When not to use it
This skill may not be suitable for projects that require highly specialized or unique UI components not covered by the library.
What you can build with it
Building a Responsive App
Use Shadcn UI to create a responsive Flutter application that adapts to different screen sizes with ease.
Implementing a Design System
Leverage the customizable components to implement a cohesive design system across your Flutter applications.
Creating Accessible UIs
Utilize the accessibility features of Shadcn UI to ensure your Flutter applications are usable by everyone.
How to install Shadcn UI for Flutter
View source1. Install with the skills CLI
npx skills add nank1ro/flutter-shadcn-ui/shadcn-ui-flutter --agent claude-code2. Or install it manually
Download the skill folder and drop it into ~/.claude/skills/ for all projects, or .claude/skills/ to scope it to one repo. Restart Claude Code so it picks up the new skill.
Anthropic's agentic coding CLI, and the reference implementation of Agent Skills. Drop a skill folder into ~/.claude/skills and Claude Code loads it automatically whenever a task matches the skill's description. Claude Code docs
Inside SKILL.md
Written by nank1roShadcn UI for Flutter
This skill provides documentation and examples for using the shadcn_ui package in Flutter.
Theming and Customization
Shadcn UI for Flutter provides a powerful theming system. You can use built-in color schemes (blue, gray, green, neutral, orange, red, rose, slate, stone, violet, yellow, zinc) or create your own.
Applying a Theme
Use ShadThemeData within ShadApp to define your light and dark themes.
Detailed Guides
Components
| Name | Description | Reference |
|---|---|---|
| Accordion | A vertically stacked set of interactive headings that each reveal a section of content. | accordion.md |
| Alert | Displays a callout for user attention. | alert.md |
| Avatar | An image element with a placeholder for representing the user. | avatar.md |
| Badge | Displays a badge or a component that looks like a badge. | badge.md |
| Breadcrumb | Displays the path to the current resource using a hierarchy of links. | breadcrumb.md |
| Button | Displays a button or a component that looks like a button. | button.md |
| Calendar | A date field component that allows users to enter and edit date. | calendar.md |
| Card | Displays a card with header, content, and footer. | card.md |
| Checkbox | A control that allows the user to toggle between checked and not checked. | checkbox.md |
| Context Menu | Displays a menu to the user — such as a set of actions or functions — triggered by a mouse right-click. | context-menu.md |
| Date Picker | A date picker component with range and presets. | date-picker.md |
| Dialog | A modal dialog that interrupts the user. | dialog.md |
| Form | Builds a form with validation and easy access to form fields values. | form.md |
| IconButton | Displays an icon button or a component that looks like a button with an icon. | icon-button.md |
| Input | Displays a form input field or a component that looks like an input field. | input.md |
| InputOTP | Accessible one-time password component with copy paste functionality. | input-otp.md |
| Menubar | A visually persistent menu common in desktop applications that provides quick access to a consistent set of commands. | menubar.md |
| Popover | Displays rich content in a portal, triggered by a button. | popover.md |
| Progress | Displays an indicator showing the completion progress of a task, typically displayed as a progress bar. | progress.md |
| RadioGroup | A set of checkable buttons—known as radio buttons—where no more than one of the buttons can be checked at a time. | radio-group.md |
| Resizable | Resizable panel groups and layouts. | resizable.md |
| Select | Displays a list of options for the user to pick from—triggered by a button. | select.md |
| Separator | Visually or semantically separates content. | separator.md |
| Sheet | Extends the Dialog component to display content that complements the main content of the screen. | sheet.md |
| Slider | An input where the user selects a value from within a given range. | slider.md |
| Sonner | An opinionated toast component. | sonner.md |
| Switch | A control that allows the user to toggle between checked and not checked. | switch.md |
| Table | A responsive table component. | table.md |
| Tabs | A set of layered sections of content—known as tab panels—that are displayed one at a time. | tabs.md |
| Textarea | Displays a form textarea or a component that looks like a textarea. | textarea.md |
| Time Picker | A time picker component. | time-picker.md |
| Toast | A succinct message that is displayed temporarily. | toast.md |
| Tooltip | A popup that displays information related to an element when the element receives keyboard focus or the mouse hovers over it. | tooltip.md |
Usage Examples
Examples are available at the bottom of each component page.
Basic Setup
Here is a complete example of a Counter App using shadcn_ui, including light and dark theme support.
import 'package:shadcn_ui/shadcn_ui.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return ShadApp(
debugShowCheckedModeBanner: false,
theme: ShadThemeData(
brightness: Brightness.light,
colorScheme: const ShadZincColorScheme.light(),
),
darkTheme: ShadThemeData(
brightness: Brightness.dark,
colorScheme: const ShadZincColorScheme.dark(),
),
themeMode: ThemeMode.system,
home: const CounterPage(),
);
}
}
class CounterPage extends StatefulWidget {
const CounterPage({super.key});
@override
State<CounterPage> createState() => _CounterPageState();
}
class _CounterPageState extends State<CounterPage> {
int _counter = 0;
void _incrementCounter() {
setState(() {
_counter++;
});
}
@override
Widget build(BuildContext context) {
final theme = ShadTheme.of(context);
return Scaffold(
appBar: AppBar(title: const Text('Shadcn Counter')),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(
'You have pushed the button this many times:',
style: theme.textTheme.muted,
),
Text(
'$_counter',
style: theme.textTheme.h1,
),
],
),
),
floatingActionButton: ShadButton(
onPressed: _incrementCounter,
child: const Icon(LucideIcons.plus),
),
);
}
}
Packages included in the library
Flutter Shadcn UI consists of fantastic open-source libraries that are exported and you can use them without importing them into your project.
flutter_animate
The flutter animate library is a very cool animations library extensively used in Shadcn UI Components.
With flutter_animate animations can be easily customized from the user, because components will take a List<Effect>.
lucide_icons_flutter
A nice icon library that is used in Shadcn UI Components.
You can use Lucide icons with the LucideIcons class, for example LucideIcons.activity.
You can browse all the icons here.
two_dimensional_scrollables
A nice raw table (very performant) implementation used by the ShadTable component.
intl
The intl package provides internationalization and localization facilities, including message translation.
universal_image
Support multiple image formats. Used by the ShadAvatar component.
Frequently asked questions about Shadcn UI for Flutter
Similar skills
Playwright Component Testing
Test React and Vue components in isolation with Playwright.
Fluent UI Blazor
Integrate Fluent UI components in Blazor applications effortlessly.
Build MCP App
Create interactive UI widgets for MCP servers.
Web Design Reviewer
Identify and fix design issues in websites efficiently.
Markstream Install
Seamlessly integrate Markstream for Markdown rendering.
GSAP & Framer Scroll Animation
Create advanced scroll animations effortlessly.
