Nash UI
A modern, scalable, production-ready Flutter Design System built on Material 3.
nash_ui provides an opinionated design-token engine, theme factories,
a responsive framework, an animation library, a complete catalog of reusable
widgets, and full-screen UI templates — everything you need to ship beautiful,
consistent apps faster.
Features
- Design tokens — colors, typography, spacing, radius, shadows, gradients, borders, opacity, dimensions, icons, durations, curves, elevation, and image tokens.
- Theme engine —
NashTheme.light(),NashTheme.dark(),NashTheme.amoled()and fully custom themes via aThemeExtension. - Responsive framework —
AppResponsive, screen types, breakpoints and responsive number extensions (10.w,20.h,16.r,5.v). - Animation library — fade, slide, scale, rotate, bounce, shake, ripple, hover, hero, page and shared-axis transitions, with reduced motion support.
- Accessibility — WCAG AA/AAA compliance tokens, focus ring, touch targets, semantic announcements, and platform-adaptive widgets.
- Widget catalog — buttons, inputs, cards, selection, media, feedback, lists, indicators, dialogs, charts, loading states, drag & drop, rich text editor, pickers, stepper, data table, notifications, and misc widgets.
- Navigation — bottom navigation, navigation rail, sidebar, drawer, top navigation and breadcrumb.
- Localization — number, currency, date, time, and compact formatting.
- Full-screen templates — login, register, forgot password, dashboard, settings, profile, chat, learning, finance, medical, e-commerce, social, admin and analytics.
- Utilities — validators, formatters, token exporter, and date/color/number/ animation/file/image/permission/device helpers.
- Quality — fully documented public API, unit/widget/golden tests and a GitHub Actions CI/CD workflow.
Getting started
Add the dependency
From pub.dev:
flutter pub add nash_ui
Or add it directly to your pubspec.yaml:
dependencies:
nash_ui: ^1.4.0
Then run:
flutter pub get
Quick start
import 'package:flutter/material.dart';
import 'package:nash_ui/nash_ui.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'My App',
theme: NashTheme.light(),
darkTheme: NashTheme.dark(),
home: const MyHomePage(),
);
}
}
class MyHomePage extends StatelessWidget {
const MyHomePage({super.key});
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: NashAppBar(title: 'Dashboard'),
body: Padding(
padding: const EdgeInsets.all(16),
child: Column(
children: const <Widget>[
PrimaryButton(
label: 'Get started',
icon: Icons.rocket_launch_outlined,
),
SizedBox(height: 16),
NashTextField(label: 'Email', hint: 'you@example.com'),
],
),
),
);
}
}
Themes
Every theme factory is built from a seed color using the Material 3 color system.
| Theme | Description |
|---|---|
NashTheme.light() |
Default light theme from the brand palette. |
NashTheme.dark() |
Dark theme from the brand palette. |
NashTheme.amoled() |
True-black (AMOLED) theme. |
NashTheme.custom(colorScheme: ...) |
Fully custom theme from any ColorScheme. |
MaterialApp(
theme: NashTheme.light(seedColor: const Color(0xFF10B981)),
darkTheme: NashTheme.dark(seedColor: const Color(0xFF10B981)),
themeMode: ThemeMode.system,
)
See Themes for details on tokens and customization.
Responsive
final AppScreenType type = AppResponsive.screenTypeOf(context);
if (type.isDesktop) {
return const NashSidebar(...);
}
return const BottomNavBar(...);
For pixel-perfect scaling against a design reference:
AppResponsive(
designWidth: 390,
designHeight: 844,
child: const MyApp(),
)
See Responsive for the full breakpoint reference.
Widget catalog
| Category | Widgets |
|---|---|
| Buttons | PrimaryButton, SecondaryButton, OutlineButton, NashTextButton, NashIconButton, FloatingButton, LoadingButton, NashGlassButton, NashGradientBorderButton, NashSlideButton, NashSplitButton, NashHoldButton, NashSocialButton, NashButtonGroup |
| Inputs | NashTextField, PasswordField, EmailField, NumberField, PhoneField, SearchField, OtpField, NashDropdown, DateField, MultiSelect, NashRichTextEditor |
| Selection | NashCheckbox, NashRadio, NashSwitch, NashChip, NashSegmentedButton |
| Cards | NashCard, GlassCard, GlowCard, GradientCard, StatisticCard, DashboardCard, ProductCard, UserCard, MedicalCard, LearningCard |
| Media | NashAvatar, NashImage, NashNetworkImage |
| Feedback | NashSnackbar, NashBanner, NashTooltip, NashNotificationCenter |
| Navigation | NashNavigationRail, BottomNavBar, NavDrawer, Breadcrumb, NashAppBar, NashTabBar |
| Dialogs | NashDialog, NashBottomSheet, ActionSheet, NashPopupMenu, NashAdaptiveDialog, NashAdaptiveActionSheet |
| Charts | LineChart, BarChart, PieChart |
| Loading | NashLoader, CircularProgress, LinearProgress, Skeleton, SkeletonList, SkeletonGrid, Shimmer, LoadingScreen |
| Indicators | NashBadge, progress indicators |
| Data | NashEnhancedDataTable, NashTablePagination, NashDraggableList, NashDropZone, NashDraggable |
| Pickers | showNashStyledTimePicker, showNashDateRangeDialog, showNashDurationPicker, showNashTimeRangePicker |
| Stepper | NashStepper (horizontal/vertical), NashStepState |
| Adaptive | NashAdaptiveScaffold, NashAdaptiveSwitch, NashAdaptiveProgress, NashPlatform |
| Accessibility | NashFocusRing, NashTouchTarget, NashAccessibilityProvider, NashSemanticsAnnouncer, NashAccessibleButton |
| Misc | NashCalendar, NashRating, NashTimeline, NashTag, NashReducedMotion, NashZIndexed |
| UX screens | Loading, empty state, no internet, 404, error, success, maintenance, permission, update required |
See Widgets for the full API reference.
Templates
Full-screen, production-ready layouts:
AuthTemplates.login, AuthTemplates.signup, AuthTemplates.forgotPassword,
DashboardHeader, SettingsTemplate, ProfileTemplate, ChatTemplate,
LearningTemplate, FinanceTemplate, MedicalTemplate,
EcommerceTemplate, SocialTemplate, AdminTemplate, AnalyticsTemplate.
See Templates.
Utilities
Validators (Validators), formatters (NashFormatter), and helpers for dates,
colors, numbers, animations, files, images, permissions and devices.
See Utilities.
Documentation
| Guide | Description |
|---|---|
| Getting started | Setup, dependency and first app |
| Design tokens | Colors, typography, spacing, radius, shadows |
| Themes | Light/dark/AMOLED/custom themes |
| Responsive | Breakpoints and screen helpers |
| Animations | Motion library reference |
| Widgets | Widget catalog with examples |
| Templates | Full-screen template layouts |
| Utilities | Validators, formatters and helpers |
| Testing | Unit, widget, golden and integration tests |
Example application
A complete demo app is included under example/ showcasing theme
switching, responsive preview, the animation gallery, the widget catalog,
forms, charts, a dashboard and the template gallery.
cd example
flutter run
Testing
flutter analyze
flutter test # unit + widget + golden tests
flutter test --update-goldens test/golden_test.dart # refresh golden images
cd example
flutter test integration_test/app_test.dart -d windows # integration tests
See Testing.
License
Nash UI is licensed under the Nash UI Free Use License (NU-FUL) v1.0.
- Free for Application Development: You may install and use Nash UI as a dependency in personal, educational, open-source, client, commercial, and enterprise Flutter applications completely free of charge and royalty-free.
- Application Ownership: You retain full, exclusive ownership and licensing rights over your own application source code, assets, and business logic that integrate Nash UI.
- Source Code Protection: You may not modify, fork, copy, redistribute, sublicense, resell, or create derivative packages/libraries from the Nash UI source code without prior written permission from the copyright holder.
Copyright © 2026 Nashwan Taha Nheli. All rights reserved.
See the LICENSE file for the complete terms and conditions.
Disclaimer: This license is a custom proprietary free-use license (source-available for dependency use, not an OSI-approved open-source license). Commercial users should review the full terms with their legal counsel.
Libraries
- accessibility/accessibility
- Exports for the
accessibilitylayer. - accessibility/accessibility_tokens
- animation/animated_container
- animation/animation
- Exports for the
animationlayer. - animation/bounce
- animation/duration
- animation/fade
- animation/hero
- animation/hover
- animation/page_transition
- animation/reduced_motion
- animation/ripple
- animation/scale
- animation/slide
- borders/border
- colors/brand_colors
- colors/colors
- Exports for the
colorslayer. - colors/palette
- dimensions/dimensions
- elevation/elevation
- Exports for the
elevationlayer. - elevation/elevation_tokens
- extensions/color_extensions
- extensions/context_extensions
- extensions/date_extensions
- extensions/extensions
- Exports for the
extensionslayer. - extensions/padding_extensions
- extensions/string_extensions
- extensions/theme_extensions
- extensions/widget_extensions
- gradients/brand_gradients
- gradients/gradients
- icons/app_icons
- icons/icons
- layouts/container
- layouts/flex
- layouts/gap
- layouts/grid
- layouts/layouts
- Exports for the
layoutslayer. - layouts/padding
- layouts/position
- layouts/responsive
- layouts/rtl_aware_row
- localization/localization
- media/image_tokens
- nash_ui
- Nash UI — a modern, scalable, production-ready Flutter design system.
- opacity/opacity
- radius/app_radius
- radius/radius
- responsive/breakpoint
- responsive/responsive
- Exports for the
responsivelayer. - responsive/responsive_extensions
- responsive/responsive_grid
- responsive/responsive_layout
- responsive/screen_type
- services/async_builder
- services/clipboard
- services/logger
- services/services
- Exports for the
serviceslayer. - services/storage
- shadows/shadow
- shadows/shadows
- spacing/app_spacing
- spacing/spacing
- theme/app_theme
- theme/theme
- theme/theme_builder
- theme/theme_extension
- typography/app_typography
- typography/font_weight
- typography/responsive_typography
- typography/typography
- utils/animation_utils
- utils/color_utils
- utils/date_utils
- utils/device_utils
- utils/file_utils
- utils/formatter
- utils/helpers
- utils/image_utils
- utils/number_utils
- utils/permission_utils
- utils/rtl_utils
- utils/token_exporter
- utils/utils
- Exports for the
utilslayer. - utils/validators
- Validation helpers and extension methods for common field checks.
- widgets/adaptive/adaptive
- Exports for the
buttonslayer. - widgets/cards/card
- widgets/cards/cards
- Exports for the
cardslayer. - widgets/cards/content_cards
- widgets/cards/dashboard_card
- widgets/cards/domain_cards
- widgets/charts/chart_widgets
- widgets/charts/charts
- Exports for the
chartslayer. - widgets/charts/nash_charts
- widgets/data_table/data_table
- Exports for the
data_tablelayer. - widgets/data_table/enhanced_data_table
- widgets/dialogs/action_sheet
- widgets/dialogs/bottom_sheet
- widgets/dialogs/command_palette
- widgets/dialogs/dialog
- widgets/dialogs/dialogs
- Exports for the
dialogslayer. - widgets/dialogs/draggable_sheet
- widgets/dialogs/popover
- widgets/drag_drop/drag_drop
- Exports for the
drag_droplayer. - widgets/drag_drop/drag_drop_widgets
- widgets/feedback/error_boundary
- widgets/feedback/feedback
- Exports for the
feedbacklayer. - widgets/feedback/snackbar
- widgets/feedback/toast
- widgets/feedback/tooltip
- widgets/forms/form_helpers
- widgets/forms/form_wizard
- widgets/forms/forms
- Exports for the
formslayer. - widgets/forms/nash_form
- widgets/indicators/circular_progress
- widgets/indicators/indicators
- Exports for the
indicatorslayer. - widgets/indicators/linear_progress
- widgets/indicators/loader
- widgets/inputs/color_picker
- widgets/inputs/date_field
- widgets/inputs/date_picker
- widgets/inputs/dropdown
- widgets/inputs/email_field
- widgets/inputs/file_upload
- widgets/inputs/inputs
- Exports for the
inputslayer. - widgets/inputs/live_search
- widgets/inputs/multi_select
- widgets/inputs/number_field
- widgets/inputs/otp_field
- widgets/inputs/password_field
- widgets/inputs/phone_field
- widgets/inputs/search_field
- widgets/inputs/sliders
- widgets/inputs/text_field
- widgets/layouts/split_view
- widgets/lists/data_table
- widgets/lists/expansion_tile
- widgets/lists/infinite_list
- widgets/lists/list_tile
- widgets/lists/lists
- Exports for the
listslayer. - widgets/lists/pagination
- widgets/lists/settings_tile
- widgets/lists/stat_tile
- widgets/lists/tree_view
- widgets/loading/loading
- Exports for the
loadinglayer. - widgets/loading/loading_widgets
- widgets/loading/shimmer
- widgets/media/avatar
- widgets/media/carousel
- widgets/media/image
- widgets/media/image_tokens
- widgets/media/media
- Exports for the
medialayer. - widgets/media/network_image
- widgets/misc/badge
- widgets/misc/calendar
- widgets/misc/code_block
- widgets/misc/misc
- Exports for the
misclayer. - widgets/misc/rating
- widgets/misc/stepper
- widgets/misc/tag
- widgets/misc/timeline
- widgets/navigation/app_bar
- Exports for the
navigationlayer. - widgets/navigation/tab_bar
- widgets/notifications/notification_center
- widgets/notifications/notifications
- Exports for the
notificationslayer. - widgets/pickers/pickers
- widgets/rich_text/rich_text
- Exports for the
rich_textlayer. - widgets/rich_text/rich_text_editor
- widgets/selection/controls
- widgets/selection/selection
- Exports for the
selectionlayer. - widgets/templates/admin_template
- widgets/templates/analytics_template
- widgets/templates/auth_templates
- widgets/templates/chat_template
- widgets/templates/ecommerce_template
- widgets/templates/finance_template
- widgets/templates/learning_template
- widgets/templates/medical_template
- widgets/templates/onboarding_templates
- widgets/templates/profile_template
- widgets/templates/settings_template
- widgets/templates/templates
- Exports for the
templateslayer. - widgets/ux/ux
- Exports for the
uxlayer. - widgets/ux/ux_states
- widgets/widgets
- Top-level export for the
widgetslayer.