{"id":50672238,"url":"https://github.com/flutterbysunny/nova_ui","last_synced_at":"2026-06-08T12:04:56.865Z","repository":{"id":363079583,"uuid":"1261854295","full_name":"flutterbysunny/nova_ui","owner":"flutterbysunny","description":"Modern Flutter UI framework with reusable widgets and clean APIs","archived":false,"fork":false,"pushed_at":"2026-06-07T09:59:23.000Z","size":285,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-07T11:21:18.926Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Dart","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/flutterbysunny.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-06-07T08:36:14.000Z","updated_at":"2026-06-07T09:45:54.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/flutterbysunny/nova_ui","commit_stats":null,"previous_names":["flutterbysunny/nova_ui"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/flutterbysunny/nova_ui","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/flutterbysunny%2Fnova_ui","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/flutterbysunny%2Fnova_ui/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/flutterbysunny%2Fnova_ui/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/flutterbysunny%2Fnova_ui/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/flutterbysunny","download_url":"https://codeload.github.com/flutterbysunny/nova_ui/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/flutterbysunny%2Fnova_ui/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34061145,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-08T02:00:07.615Z","response_time":111,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-06-08T12:04:56.717Z","updated_at":"2026-06-08T12:04:56.850Z","avatar_url":"https://github.com/flutterbysunny.png","language":"Dart","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Nova UI\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://raw.githubusercontent.com/flutterbysunny/nova_ui/main/assets/banner.png\" \n       alt=\"Nova UI Banner\" \n       width=\"100%\" /\u003e\n\u003c/p\u003e\n\n[![pub package](https://img.shields.io/pub/v/nova_ui.svg)](https://pub.dev/packages/nova_ui)\n[![pub points](https://img.shields.io/pub/points/nova_ui)](https://pub.dev/packages/nova_ui/score)\n[![likes](https://img.shields.io/pub/likes/nova_ui)](https://pub.dev/packages/nova_ui)\n[![MIT License](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE)\n\nA modern Flutter UI framework with reusable widgets, design system components, and beautiful developer-friendly APIs.\n\n---\n\n## Preview\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://raw.githubusercontent.com/flutterbysunny/nova_ui/main/assets/preview.png\" \n       alt=\"Nova UI Widget Preview\" \n       width=\"100%\" /\u003e\n\u003c/p\u003e\n\n---\n\n## Features\n\n- **NovaButton** — filled, outlined, text variants · loading state · icon support · disabled state\n- **NovaTextField** — label · validation · password toggle · multiline · theme-aware borders\n- **NovaContainer** — tappable · elevation shorthand · gradient · clip support\n- **NovaCard** — zero-config card with shadow and rounded corners\n- **NovaLoader** — circular, linear, dots loading indicators\n- **NovaDialog** — info/success/warning/danger alert and confirm dialogs\n- **NovaBadge** — status labels · notification counts · dot indicators · overlay badges\n- **NovaShimmer** — animated skeleton loading placeholders\n- **NovaAvatar** — network/asset/initials/icon avatar with online indicator\n- **NovaChip** — filter/tag chips with group support\n- **NovaToast** — animated overlay notifications with auto-dismiss\n- **NovaBottomSheet** — styled modal bottom sheet with actions support\n- **NovaTheme** — one-line light/dark theme setup\n- **NovaColors** — semantic theme-aware colors + raw swatches\n- **NovaSpacing** — spacing scale + gap widgets + EdgeInsets helpers\n- **NovaRadius** — border radius tokens + directional helpers\n- Null safety · Material 3 · Dark mode · All platforms\n\n---\n\n## Installation\n\n```yaml\ndependencies:\n  nova_ui: ^1.0.4\n```\n\n```bash\nflutter pub get\n```\n\n---\n\n## Quick Start\n\n```dart\nimport 'package:nova_ui/nova_ui.dart';\n\n// 1. Setup theme\nMaterialApp(\n  theme: NovaTheme.light(),\n  darkTheme: NovaTheme.dark(),\n  themeMode: ThemeMode.system,\n)\n\n// 2. Use widgets\nNovaButton(\n  text: 'Login',\n  onPressed: () {},\n)\n\nNovaTextField(\n  label: 'Email',\n  hintText: 'you@example.com',\n  validator: (v) =\u003e v!.isEmpty ? 'Required' : null,\n)\n\nNovaCard(\n  onTap: () {},\n  child: Text('Hello Nova UI'),\n)\n```\n\n---\n\n## Widgets\n\n### NovaButton\n\n```dart\n// Filled (default)\nNovaButton(text: 'Submit', onPressed: () {})\n\n// Outlined\nNovaButton(\n  text: 'Cancel',\n  variant: NovaButtonVariant.outlined,\n  onPressed: () {},\n)\n\n// Loading\nNovaButton(text: 'Saving...', loading: true, onPressed: () {})\n\n// Disabled\nNovaButton(text: 'Unavailable', onPressed: null)\n\n// With icon\nNovaButton(\n  text: 'Upload',\n  icon: Icon(Icons.upload),\n  onPressed: () {},\n)\n```\n\n### NovaTextField\n\n```dart\n// Basic\nNovaTextField(label: 'Name', hintText: 'Enter your name')\n\n// Password — auto visibility toggle\nNovaTextField(\n  label: 'Password',\n  obscureText: true,\n)\n\n// With validation (inside Form widget)\nNovaTextField(\n  label: 'Email',\n  validator: (v) =\u003e v!.contains('@') ? null : 'Invalid email',\n)\n\n// Multiline\nNovaTextField(label: 'Bio', maxLines: 4)\n```\n\n### NovaContainer\n\n```dart\n// Tappable\nNovaContainer(\n  onTap: () {},\n  elevation: 4,\n  borderRadius: NovaRadius.lg,\n  child: Text('Tap me'),\n)\n\n// Gradient\nNovaContainer(\n  height: 120,\n  borderRadius: NovaRadius.xl,\n  gradient: LinearGradient(colors: [Colors.purple, Colors.blue]),\n  child: Center(child: Text('Gradient')),\n)\n```\n\n### NovaCard\n\n```dart\n// Zero config\nNovaCard(child: Text('Simple card'))\n\n// Tappable\nNovaCard(\n  onTap: () {},\n  child: ListTile(title: Text('Tap to open')),\n)\n```\n\n### NovaLoader\n\n```dart\n// Circular (default)\nconst NovaLoader()\n\n// Linear progress bar\nNovaLoader(type: NovaLoaderType.linear)\n\n// Dots animation\nNovaLoader(type: NovaLoaderType.dots, size: 32)\n\n// Custom color\nNovaLoader(color: Colors.white)\n```\n\n### NovaDialog\n\n```dart\n// Simple alert\nNovaDialog.show(\n  context: context,\n  title: 'Done!',\n  message: 'Your profile has been saved.',\n  type: NovaDialogType.success,\n)\n\n// Confirm dialog\nNovaDialog.show(\n  context: context,\n  title: 'Delete Account?',\n  message: 'This action cannot be undone.',\n  type: NovaDialogType.danger,\n  confirmText: 'Delete',\n  cancelText: 'Cancel',\n  onConfirm: () =\u003e _deleteAccount(),\n)\n```\n\n### NovaBadge\n\n```dart\n// Status label\nNovaBadge(label: 'Active', color: NovaBadgeColor.success)\n\n// Dot indicator\nNovaBadge(isDot: true, color: NovaBadgeColor.danger)\n\n// Count\nNovaBadge(count: 5)\n\n// Overlay on icon\nNovaBadge(count: 12, child: Icon(Icons.notifications))\n```\n\n### NovaShimmer\n\n```dart\n// Rectangle placeholder\nconst NovaShimmer(width: 200, height: 16)\n\n// Circle — avatar placeholder\nconst NovaShimmer.circle(size: 48)\n\n// Card skeleton\nNovaShimmer.card()\n\n// List skeleton\nNovaShimmer.list(itemCount: 5)\n\n// Real world usage\nisLoading\n  ? NovaShimmer.list(itemCount: 4)\n  : ListView.builder(...)\n```\n\n### NovaAvatar\n\n```dart\n// Initials — auto color from name\nNovaAvatar(name: 'John Doe')   // → 'JD'\n\n// Network image with fallback\nNovaAvatar(\n  imageUrl: 'https://example.com/photo.jpg',\n  name: 'John Doe',\n)\n\n// Online indicator\nNovaAvatar(\n  name: 'John',\n  showOnlineIndicator: true,\n  isOnline: true,\n)\n\n// Sizes\nNovaAvatar(name: 'JD', size: NovaAvatarSize.xs)  // 28px\nNovaAvatar(name: 'JD', size: NovaAvatarSize.lg)  // 64px\n```\n\n### NovaChip\n\n```dart\n// Simple tag\nNovaChip(label: 'Flutter')\n\n// Variants\nNovaChip(label: 'Soft', variant: NovaChipVariant.soft)\nNovaChip(label: 'Outlined', variant: NovaChipVariant.outlined)\n\n// Deletable\nNovaChip(\n  label: 'Remove',\n  onDeleted: () =\u003e _removeTag(),\n)\n\n// Single select group\nNovaChipGroup(\n  chips: ['All', 'Active', 'Completed'],\n  selectedIndex: _tab,\n  onChanged: (i) =\u003e setState(() =\u003e _tab = i),\n)\n\n// Multi select group\nNovaChipGroup.multi(\n  chips: ['Flutter', 'Dart', 'Firebase'],\n  selectedIndexes: _filters,\n  onMultiChanged: (i) =\u003e setState(() =\u003e _filters = i),\n)\n```\n\n### NovaToast\n\n```dart\n// Simple info\nNovaToast.show(\n  context: context,\n  message: 'Changes saved.',\n)\n\n// Success\nNovaToast.show(\n  context: context,\n  message: 'Profile updated!',\n  type: NovaToastType.success,\n)\n\n// Error — top position\nNovaToast.show(\n  context: context,\n  message: 'Something went wrong.',\n  type: NovaToastType.error,\n  position: NovaToastPosition.top,\n)\n```\n\n### NovaBottomSheet\n\n```dart\n// Custom content\nNovaBottomSheet.show(\n  context: context,\n  title: 'Edit Profile',\n  child: Column(\n    children: [\n      NovaTextField(label: 'Name'),\n      NovaSpacing.gapMd,\n      NovaButton(text: 'Save', onPressed: () {}),\n    ],\n  ),\n)\n\n// Actions list\nNovaBottomSheet.showActions(\n  context: context,\n  title: 'Options',\n  actions: [\n    NovaSheetAction(\n      label: 'Share',\n      icon: Icons.share_rounded,\n      onTap: () {},\n    ),\n    NovaSheetAction(\n      label: 'Delete',\n      icon: Icons.delete_outline_rounded,\n      isDestructive: true,\n      onTap: () {},\n    ),\n  ],\n)\n```\n\n---\n\n## Design System\n\n### NovaTheme\n\n```dart\nMaterialApp(\n  theme: NovaTheme.light(),\n  darkTheme: NovaTheme.dark(),\n  themeMode: ThemeMode.system,\n)\n\n// Custom brand color\nMaterialApp(\n  theme: NovaTheme.light(seedColor: Colors.teal),\n  darkTheme: NovaTheme.dark(seedColor: Colors.teal),\n)\n```\n\n### NovaColors\n\n```dart\n// Semantic — theme-aware (dark mode automatic)\ncolor: NovaColors.primary(context)\ncolor: NovaColors.surface(context)\ncolor: NovaColors.textSecondary(context)\ncolor: NovaColors.success(context)\n\n// Raw swatches\ncolor: NovaColors.indigo[500]\ncolor: NovaColors.slate[200]\n```\n\n### NovaSpacing\n\n```dart\n// Raw values\nSizedBox(height: NovaSpacing.md)   // 16px\nSizedBox(width: NovaSpacing.sm)    // 8px\n\n// Gap widgets (vertical)\nNovaSpacing.gapSm    // 8px\nNovaSpacing.gapMd    // 16px\nNovaSpacing.gapLg    // 24px\n\n// EdgeInsets helpers\npadding: NovaSpacing.paddingMd       // all sides 16px\npadding: NovaSpacing.paddingPage     // h:24 v:16\npadding: NovaSpacing.paddingH(20)    // horizontal only\n```\n\n### NovaRadius\n\n```dart\nborderRadius: NovaRadius.sm     // 8px\nborderRadius: NovaRadius.md     // 12px\nborderRadius: NovaRadius.lg     // 16px\nborderRadius: NovaRadius.full   // pill shape\n```\n\n### BuildContext Extensions\n\n```dart\ncontext.isDark              // bool\ncontext.novaPrimary         // Color\ncontext.novaSurface         // Color\ncontext.novaTextPrimary     // Color\ncontext.novaTextSecondary   // Color\ncontext.novaScheme          // ColorScheme\n```\n\n---\n\n## Roadmap\n\n| Version | Widgets | Status |\n|---------|---------|--------|\n| 1.0.0 | `NovaButton`, `NovaTextField`, `NovaContainer` | ✅ Released |\n| 1.0.1 | `NovaCard`, `NovaTheme`, Dark mode | ✅ Released |\n| 1.0.2 | README, LICENSE, Pub score 160/160 | ✅ Released |\n| 1.0.3 | `NovaLoader`, `NovaDialog`, `NovaBadge` | ✅ Released |\n| 1.0.4 | `NovaShimmer`, `NovaAvatar`, `NovaChip` | ✅ Released |\n| 1.0.5 | `NovaToast`, `NovaBottomSheet` | ✅ Released |\n| 1.0.6 | `NovaDropdown`, `NovaCheckbox`, `NovaSwitch` | 🔜 Coming Soon |\n\n---\n\n## Contributing\n\nContributions are welcome! Please open an issue first to discuss changes.\n\n## License\n\n[MIT](LICENSE) © 2026 flutterbysunny","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fflutterbysunny%2Fnova_ui","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fflutterbysunny%2Fnova_ui","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fflutterbysunny%2Fnova_ui/lists"}