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 —
AppTheme.light(),AppTheme.dark(),AppTheme.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, signature pad, watermark, countdown timers, sticky headers, accordion, syntax highlighting, markdown, and misc widgets.
- Navigation — bottom navigation, navigation rail, 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.
- Services & Utilities — network client (
AppNetwork), biometric auth (AppBiometrics), permissions (AppPermissions), notifications (AppNotifications),Debouncer,Throttler, validators, formatters, and color/date 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: ^2.11.9
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: AppTheme.light(),
darkTheme: AppTheme.dark(),
home: const MyHomePage(),
);
}
}
class MyHomePage extends StatelessWidget {
const MyHomePage({super.key});
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: CustomAppBar(title: 'Dashboard'),
body: Padding(
padding: const EdgeInsets.all(16),
child: Column(
children: const <Widget>[
PrimaryButton(
label: 'Get started',
icon: Icons.rocket_launch_outlined,
),
Gap(16),
AppTextField(label: 'Email', hint: 'you@example.com'),
],
),
),
);
}
}
Themes
Every theme factory is built from a seed color using the Material 3 color system.
| Theme | Description |
|---|---|
AppTheme.light() |
Default light theme from the brand palette. |
AppTheme.dark() |
Dark theme from the brand palette. |
AppTheme.amoled() |
True-black (AMOLED) theme. |
AppTheme.custom(colorScheme: ...) |
Fully custom theme from any ColorScheme. |
MaterialApp(
theme: AppTheme.light(seedColor: const Color(0xFF10B981)),
darkTheme: AppTheme.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 NavDrawer(...);
}
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, AppTextButton, AppIconButton, FloatingButton, LoadingButton, NeonButton, GlassButton, GradientBorderButton, SlideButton, SplitButton, HoldButton, SocialButton, ButtonGroup, SpeedDial |
| Inputs | AppTextField, PasswordField, EmailField, NumberField, PhoneField, SearchField, OtpField, OtpPinField, MentionField, AppDropdown, DateField, MultiSelect, GradientPicker, TimelinePicker, RichTextEditor |
| Forms | Form, FormTextField, FormWizard, ReactiveField, ReactiveFormController |
| Cards | AppCard, CreditCardWidget, BoardingPassCard, GlassmorphicContainer, ParallaxCard, ReceiptCard, PriceTag, InboxCard, LocationPinCard, CornerRibbon, DashboardCard, ProductCard, UserCard, MedicalCard, LearningCard, SwipeActionCard |
| Media | VoiceNotePlayer, EqualizerWidget, AudioWaveform, BeforeAfterImage, CameraCapture, ProductImageZoom, MagnifierLens, AppAvatar, AppImage, AppNetworkImage |
| Feedback | AppSnackbar, AppBanner, AppTooltip, PushNotificationCard, ConfettiWidget, NotificationCenter |
| Navigation | AppNavigationRail, BottomNavBar, NavDrawer, Breadcrumb, CustomAppBar, AppTabBar |
| Dialogs | AppDialog, NumberPadDialog, AppRatingDialog, AppBottomSheet, ActionSheet, AppPopupMenu, AdaptiveDialog, AdaptiveActionSheet |
| Charts | LineChart, BarChart, PieChart, CandlestickChart, BubbleChart, TreeMapChart, SparklineWidget, RadarChart, FunnelChart, HeatMap, GanttChart |
| Loading | AppLoader, LiquidProgressBar, CircularProgress, LinearProgress, Skeleton, SkeletonList, SkeletonGrid, Shimmer, LoadingScreen |
| Indicators | AppBadge, Gap, DistanceBar, NetworkStatusBar, TypingIndicator, progress indicators |
| Data | EnhancedDataTable, TablePagination, DraggableDashboard, DraggableList, DropZone, DraggableWidget |
| Pickers | showStyledTimePicker, showDateRangeDialog, showDurationPicker, showTimeRangePicker, ReactionPicker |
| Stepper | AppStepper (horizontal/vertical), DeliveryTracker, AppStepState |
| Adaptive | AdaptiveScaffold, AdaptiveSwitch, AdaptiveProgress, AppPlatform |
| Accessibility | AppFocusRing, AppTouchTarget, AppAccessibilityProvider, AppSemanticsAnnouncer, AppAccessibleButton |
| Misc | WheelOfFortune, FloatingParticles, GradientText, AnimatedTextKit, AnimatedCounter, ScratchReveal, ScratchCard, MiniMap, OnboardingOverlay, PatternLock, SecurityPinKeyboard, BiometricButton, ThemeSwitcherFab, JsonViewer, DebugOverlay, GestureHintOverlay, PermissionRequestCard, SignaturePad, Watermark, CountDownTimer, StopWatch, StickyHeaderList, Accordion, SyntaxHighlighter, MarkdownText, PollWidget, QrCodeWidget, BarcodeWidget, AppCalendar, AppRating, AppTimeline, AppTag, AppMasonry |
| UX screens | UpdateRequiredScreen, 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 (AppFormatter), 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 BSD 3-Clause License.
Copyright © 2026 Nashwan Taha Nheli. All rights reserved.
See the LICENSE file for the complete terms and conditions.
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/list_extensions
- extensions/num_extensions
- 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/biometrics
- services/clipboard
- services/logger
- services/network
- services/network_io
- services/network_stub
- services/network_web
- services/notifications
- services/permissions
- 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_config
- typography/font_weight
- typography/responsive_typography
- typography/typography
- utils/animation_utils
- utils/color_utils
- utils/date_utils
- utils/debouncer
- 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/buttons/speed_dial
- widgets/cards/boarding_pass_card
- widgets/cards/card
- widgets/cards/cards
- Exports for the
cardslayer. - widgets/cards/content_cards
- widgets/cards/corner_ribbon
- widgets/cards/credit_card_widget
- widgets/cards/dashboard_card
- widgets/cards/domain_cards
- widgets/cards/flip_card
- widgets/cards/glassmorphic_container
- widgets/cards/inbox_card
- widgets/cards/location_pin_card
- widgets/cards/parallax_card
- widgets/cards/price_tag
- widgets/cards/receipt_card
- widgets/cards/swipe_action_card
- widgets/cards/swipeable_cards
- widgets/charts/bubble_chart
- widgets/charts/candlestick_chart
- widgets/charts/chart_widgets
- widgets/charts/charts
- Exports for the
chartslayer. - widgets/charts/funnel_chart
- widgets/charts/gantt_chart
- widgets/charts/heat_map
- widgets/charts/nash_charts
- widgets/charts/radar_chart
- widgets/charts/sparkline_widget
- widgets/charts/tree_map_chart
- 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/number_pad_dialog
- widgets/dialogs/popover
- widgets/drag_drop/_draggable_helper
- widgets/drag_drop/drag_drop
- Exports for the
drag_droplayer. - widgets/drag_drop/drag_drop_widgets
- widgets/feedback/confetti_widget
- widgets/feedback/connectivity_check_io
- widgets/feedback/connectivity_check_stub
- widgets/feedback/connectivity_check_web
- widgets/feedback/error_boundary
- widgets/feedback/feedback
- Exports for the
feedbacklayer. - widgets/feedback/inline_alert
- widgets/feedback/push_notification_card
- widgets/feedback/snackbar
- widgets/feedback/toast
- widgets/feedback/tooltip
- widgets/forms/_form_helper
- widgets/forms/form_helpers
- widgets/forms/form_wizard
- widgets/forms/forms
- Exports for the
formslayer. - widgets/forms/nash_form
- widgets/forms/reactive_form
- widgets/indicators/circular_progress
- widgets/indicators/indicators
- Exports for the
indicatorslayer. - widgets/indicators/linear_progress
- widgets/indicators/liquid_progress_bar
- widgets/indicators/loader
- widgets/indicators/progress_ring
- widgets/indicators/segmented_progress_bar
- widgets/inputs/app_range_slider
- 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/gradient_picker
- widgets/inputs/inputs
- Exports for the
inputslayer. - widgets/inputs/live_search
- widgets/inputs/mention_field
- widgets/inputs/multi_select
- widgets/inputs/number_field
- widgets/inputs/otp_field
- widgets/inputs/otp_pin_field
- widgets/inputs/password_field
- widgets/inputs/phone_field
- widgets/inputs/search_field
- widgets/inputs/security_pin_keyboard
- widgets/inputs/sliders
- widgets/inputs/stepper_input
- widgets/inputs/tag_input
- widgets/inputs/text_field
- widgets/inputs/timeline_picker
- 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/sticky_header_list
- widgets/lists/tree_view
- widgets/loading/loading
- Exports for the
loadinglayer. - widgets/loading/loading_widgets
- widgets/loading/shimmer
- widgets/media/audio_waveform
- widgets/media/avatar
- widgets/media/before_after_image
- widgets/media/camera_capture
- widgets/media/carousel
- widgets/media/equalizer_widget
- widgets/media/image
- widgets/media/image_tokens
- widgets/media/image_viewer
- widgets/media/magnifier_lens
- widgets/media/media
- Exports for the
medialayer. - widgets/media/network_image
- widgets/media/pinchable_image
- widgets/media/product_image_zoom
- widgets/media/voice_note_player
- widgets/misc/accordion
- widgets/misc/animated_counter
- widgets/misc/app_masonry
- widgets/misc/app_rating_dialog
- widgets/misc/badge
- widgets/misc/bottom_sheet_draggable
- widgets/misc/calendar
- widgets/misc/chat_bubble
- widgets/misc/code_block
- widgets/misc/color_swatch_viewer
- widgets/misc/count_down_timer
- widgets/misc/debug_overlay
- widgets/misc/delivery_tracker
- widgets/misc/distance_bar
- widgets/misc/draggable_dashboard
- widgets/misc/expandable_text
- widgets/misc/floating_particles
- widgets/misc/gesture_hint_overlay
- widgets/misc/glow_border_widget
- widgets/misc/gradient_text
- widgets/misc/json_viewer
- widgets/misc/mini_map
- widgets/misc/misc
- Exports for the
misclayer. - widgets/misc/network_status_bar
- widgets/misc/onboarding_overlay
- widgets/misc/parallax_list_item
- widgets/misc/pattern_lock
- widgets/misc/permission_request_card
- widgets/misc/poll_widget
- widgets/misc/pull_to_reveal
- widgets/misc/qr_barcode_widget
- widgets/misc/rating
- widgets/misc/reaction_picker
- widgets/misc/scratch_card
- widgets/misc/scratch_reveal
- widgets/misc/signature_pad
- widgets/misc/spotlight_highlight
- widgets/misc/stepper
- widgets/misc/tag
- widgets/misc/theme_switcher_fab
- widgets/misc/timeline
- widgets/misc/typing_indicator
- widgets/misc/watermark
- widgets/misc/wheel_of_fortune
- widgets/navigation/animated_tab_bar
- widgets/navigation/app_bar
- Exports for the
navigationlayer. - widgets/navigation/tab_bar
- widgets/notifications/app_toast
- widgets/notifications/notification_center
- widgets/notifications/notifications
- Exports for the
notificationslayer. - widgets/pickers/pickers
- widgets/rich_text/animated_text_kit
- widgets/rich_text/markdown_text
- widgets/rich_text/rich_text
- Exports for the
rich_textlayer. - widgets/rich_text/rich_text_editor
- widgets/rich_text/syntax_highlighter
- 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/update_required_screen
- widgets/ux/ux
- Exports for the
uxlayer. - widgets/ux/ux_states
- widgets/widgets
- Top-level export for the
widgetslayer.