{"id":32267925,"url":"https://github.com/mohamedmaher-dev/easy_in_app_notify","last_synced_at":"2026-02-23T10:17:34.624Z","repository":{"id":313037341,"uuid":"1049757764","full_name":"mohamedmaher-dev/easy_in_app_notify","owner":"mohamedmaher-dev","description":"A beautiful Flutter package for displaying Firebase Cloud Messaging (FCM) notifications as in-app overlays with smooth animations, progress indicators, and customizable styling.","archived":false,"fork":false,"pushed_at":"2025-09-23T13:48:05.000Z","size":567,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2025-10-03T10:18:39.272Z","etag":null,"topics":["animation","cli-notification","custom-ui","dart","flutter","flutter-notifications","flutter-package","flutter-ui","flutter-widget","in-app-notification","mobile","notification-banner","overlay","progress-indicator","ui"],"latest_commit_sha":null,"homepage":"","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/mohamedmaher-dev.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":"2025-09-03T13:02:20.000Z","updated_at":"2025-09-28T19:36:50.000Z","dependencies_parsed_at":"2025-09-03T15:30:11.842Z","dependency_job_id":"45f893fe-a4ec-4f75-aead-e107df18b718","html_url":"https://github.com/mohamedmaher-dev/easy_in_app_notify","commit_stats":null,"previous_names":["mohamedmaher-dev/easy_in_app_notify"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/mohamedmaher-dev/easy_in_app_notify","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mohamedmaher-dev%2Feasy_in_app_notify","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mohamedmaher-dev%2Feasy_in_app_notify/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mohamedmaher-dev%2Feasy_in_app_notify/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mohamedmaher-dev%2Feasy_in_app_notify/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mohamedmaher-dev","download_url":"https://codeload.github.com/mohamedmaher-dev/easy_in_app_notify/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mohamedmaher-dev%2Feasy_in_app_notify/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29741146,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-23T07:44:07.782Z","status":"ssl_error","status_checked_at":"2026-02-23T07:44:07.432Z","response_time":90,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["animation","cli-notification","custom-ui","dart","flutter","flutter-notifications","flutter-package","flutter-ui","flutter-widget","in-app-notification","mobile","notification-banner","overlay","progress-indicator","ui"],"created_at":"2025-10-22T22:05:15.763Z","updated_at":"2026-02-23T10:17:34.617Z","avatar_url":"https://github.com/mohamedmaher-dev.png","language":"Dart","readme":"# 🔔 Easy In-App Notify\n\n[![pub package](https://img.shields.io/pub/v/easy_in_app_notify.svg)](https://pub.dev/packages/easy_in_app_notify)\n[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](https://opensource.org/licenses/MIT)\n[![Flutter Platform](https://img.shields.io/badge/Platform-Flutter-blue.svg)](https://flutter.dev)\n\n**Beautiful, modern, and highly customizable in-app notifications for Flutter applications.**\n\nTransform your app's user experience with stunning notifications that slide, fade, and scale with smooth animations. Perfect for status updates, alerts, confirmations, and user feedback.\n\n## 📋 Table of Contents\n\n- [📱 Screenshots](#-screenshots)\n- [✨ Features](#-features)\n- [🚀 Quick Start](#-quick-start)\n  - [Installation](#installation)\n  - [Basic Setup](#basic-setup)\n  - [Integration with Other Packages](#integration-with-other-packages)\n  - [Show Your First Notification](#show-your-first-notification)\n- [🎨 Feature Showcase](#-feature-showcase)\n  - [Different Notification Types](#different-notification-types)\n  - [Positions \u0026 Animations](#positions--animations)\n  - [Interactive Features](#interactive-features)\n- [📖 Complete Usage Guide](#-complete-usage-guide)\n  - [Basic Notifications](#basic-notifications)\n  - [Advanced Custom Notifications](#advanced-custom-notifications)\n  - [Positioning Options](#positioning-options)\n  - [Animation Types](#animation-types)\n  - [Progress Bars \u0026 Auto-Dismiss](#progress-bars--auto-dismiss)\n  - [Interactive Notifications](#interactive-notifications)\n  - [Persistent Notifications](#persistent-notifications)\n  - [Background Blur Effects](#background-blur-effects)\n  - [Multiple Notifications](#multiple-notifications)\n- [🎛️ API Reference](#️-api-reference)\n  - [NotificationContent](#notificationcontent)\n  - [NotificationStyle](#notificationstyle)\n  - [NotificationConfig](#notificationconfig)\n  - [Enums](#enums)\n  - [Static Methods](#static-methods)\n- [🎨 Styling Examples](#-styling-examples)\n  - [Material Design 3 Theme](#material-design-3-theme)\n  - [Dark Theme Support](#dark-theme-support)\n  - [Custom Brand Colors](#custom-brand-colors)\n- [🔧 Migration Guide](#-migration-guide)\n  - [From v2.x to v3.0](#from-v2x-to-v30)\n- [🔍 Examples \u0026 Demos](#-examples--demos)\n- [❓ Frequently Asked Questions](#-frequently-asked-questions)\n- [🤝 Contributing](#-contributing)\n- [📄 License](#-license)\n- [🙏 Acknowledgments](#-acknowledgments)\n\n## 📱 Screenshots\n\n\u003ctable\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e\n\u003cimg src=\"assets/images/screenshot-2025-09-03_15.06.09.149.png\" alt=\"Success Notification\" width=\"250\"/\u003e\n\u003cbr\u003e\u003cb\u003eSuccess Notification\u003c/b\u003e\n\u003c/td\u003e\n\u003ctd align=\"center\"\u003e\n\u003cimg src=\"assets/images/screenshot-2025-09-03_15.06.43.597.png\" alt=\"Error Notification\" width=\"250\"/\u003e\n\u003cbr\u003e\u003cb\u003eError Notification\u003c/b\u003e\n\u003c/td\u003e\n\u003ctd align=\"center\"\u003e\n\u003cimg src=\"assets/images/screenshot-2025-09-22_11.51.50.62.png\" alt=\"Custom Notification\" width=\"250\"/\u003e\n\u003cbr\u003e\u003cb\u003eCustom Styling\u003c/b\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/table\u003e\n\n\u003e 📱 **Live Demo:** The images above show the actual notification styles. Run `flutter run` in the [example](example/) folder to see all 16 notification types in action!\n\n\u003e ⚠️ **Note:** If images don't display in GitHub, they will be visible once the package is published to pub.dev.\n\n## ✨ Features\n\n### 🎨 **Beautiful Design**\n\n- Material Design 3 compatible\n- Pre-built themes for Success, Error, Warning, and Info\n- Fully customizable colors, typography, and spacing\n- Smooth rounded corners and elegant shadows\n\n### 🎭 **Rich Animations**\n\n- **Slide** animations from top, bottom, or sides\n- **Fade** animations with opacity transitions\n- **Scale** animations that grow from center\n- **Custom** animation durations and curves\n- Background blur effects with animated opacity\n\n### 📍 **Flexible Positioning**\n\n- **Top** positioning for status updates\n- **Bottom** positioning for action confirmations\n- **Center** positioning for important alerts\n- Responsive margins and safe area handling\n\n### ⚡ **Smart Features**\n\n- **Auto-dismiss** with configurable duration\n- **Progress bars** showing countdown visualization\n- **Tap-to-dismiss** and **swipe-to-dismiss** interactions\n- **Hover effects** that pause auto-dismiss timers\n- **Multiple notifications** or single notification modes\n\n### 🛠️ **Developer Friendly**\n\n- Simple, intuitive API with method chaining\n- Comprehensive TypeScript-style documentation\n- Zero breaking changes from previous versions\n- Built-in accessibility support\n- Memory efficient with automatic cleanup\n\n## 🚀 Quick Start\n\n### Installation\n\nAdd to your `pubspec.yaml`:\n\n```yaml\ndependencies:\n  easy_in_app_notify: ^3.0.0\n```\n\nRun the installation:\n\n```bash\nflutter pub get\n```\n\n### Basic Setup\n\nInitialize the notification system in your `MaterialApp`:\n\n```dart\nimport 'package:easy_in_app_notify/easy_in_app_notify.dart';\n\nclass MyApp extends StatelessWidget {\n  @override\n  Widget build(BuildContext context) {\n    return MaterialApp(\n      title: 'My App',\n      builder: EasyInAppNotify.init(), // 👈 Add this line\n      home: MyHomePage(),\n    );\n  }\n}\n```\n\n### Show Your First Notification\n\n```dart\nEasyInAppNotify.showSuccess(\n  title: 'Welcome!',\n  message: 'Your account has been created successfully.',\n);\n```\n\nThat's it! 🎉\n\n### Integration with Other Packages\n\nIf you're using other packages that also require a `builder` in `MaterialApp` (like `flutter_easyloading`, `bot_toast`, etc.), you can chain the builders together:\n\n#### With EasyLoading\n\n```dart\nimport 'package:easy_in_app_notify/easy_in_app_notify.dart';\nimport 'package:flutter_easyloading/flutter_easyloading.dart';\n\nclass MyApp extends StatelessWidget {\n  @override\n  Widget build(BuildContext context) {\n    return MaterialApp(\n      title: 'My App',\n      builder: (context, child) {\n        // Chain multiple builders\n        child = EasyLoading.init()(context, child);\n        child = EasyInAppNotify.init()(context, child);\n        return child;\n      },\n      home: MyHomePage(),\n    );\n  }\n}\n```\n\n#### Alternative Nested Approach\n\n```dart\nclass MyApp extends StatelessWidget {\n  @override\n  Widget build(BuildContext context) {\n    return MaterialApp(\n      title: 'My App',\n      builder: EasyLoading.init(\n        builder: (context, child) {\n          return EasyInAppNotify.init()(context, child);\n        },\n      ),\n      home: MyHomePage(),\n    );\n  }\n}\n```\n\n#### With Multiple Packages\n\n```dart\nclass MyApp extends StatelessWidget {\n  @override\n  Widget build(BuildContext context) {\n    return MaterialApp(\n      title: 'My App',\n      builder: (context, child) {\n        // Add as many builders as needed\n        child = EasyLoading.init()(context, child);\n        child = BotToastInit()(context, child);\n        child = EasyInAppNotify.init()(context, child);\n        return child;\n      },\n      home: MyHomePage(),\n    );\n  }\n}\n```\n\n\u003e **💡 Tip**: The order matters! Place `EasyInAppNotify.init()` last to ensure notifications appear on top of other overlays.\n\n## 🎨 Feature Showcase\n\n### Different Notification Types\n\n```dart\n// Success (Green theme with checkmark)\nEasyInAppNotify.showSuccess(title: 'Success!', message: 'Task completed');\n\n// Error (Red theme with error icon)\nEasyInAppNotify.showError(title: 'Error', message: 'Something went wrong');\n\n// Warning (Orange theme with warning icon)\nEasyInAppNotify.showWarning(title: 'Warning', message: 'Please check input');\n\n// Info (Blue theme with info icon)\nEasyInAppNotify.showInfo(title: 'Info', message: 'New update available');\n```\n\n### Positions \u0026 Animations\n\n```dart\n// Top slide animation (default)\nEasyInAppNotify.show(\n  content: NotificationContent(title: 'Top Notification'),\n  style: NotificationStyle(position: NotificationPosition.top),\n);\n\n// Center with scale animation\nEasyInAppNotify.show(\n  content: NotificationContent(title: 'Center Alert'),\n  style: NotificationStyle(\n    position: NotificationPosition.center,\n    animation: NotificationAnimation.scale,\n  ),\n);\n\n// Bottom with fade animation\nEasyInAppNotify.show(\n  content: NotificationContent(title: 'Bottom Notice'),\n  style: NotificationStyle(\n    position: NotificationPosition.bottom,\n    animation: NotificationAnimation.fade,\n  ),\n);\n```\n\n### Interactive Features\n\n```dart\n// Progress bar with countdown\nEasyInAppNotify.show(\n  content: NotificationContent(title: 'Downloading...', icon: Icons.download),\n  style: NotificationStyle(showProgressBar: true),\n  config: NotificationConfig(duration: 8),\n);\n\n// Background blur effect\n    EasyInAppNotify.show(\n  content: NotificationContent(title: 'Premium Feature'),\n  style: NotificationStyle(\n    enableBackgroundBlur: true,\n    position: NotificationPosition.center,\n  ),\n);\n\n// Tap to interact\n    EasyInAppNotify.show(\n  content: NotificationContent(title: 'Tap me!'),\n  config: NotificationConfig(\n    dismissOnTap: true,\n    onTap: () =\u003e print('Notification tapped!'),\n  ),\n);\n```\n\n## 📖 Complete Usage Guide\n\n### Basic Notifications\n\nUse the convenience methods for common notification types:\n\n```dart\n// Success notification (green theme)\nEasyInAppNotify.showSuccess(\n  title: 'Success!',\n  message: 'Your data has been saved.',\n);\n\n// Error notification (red theme)\nEasyInAppNotify.showError(\n  title: 'Error',\n  message: 'Failed to connect to server.',\n);\n\n// Warning notification (orange theme)\nEasyInAppNotify.showWarning(\n  title: 'Warning',\n  message: 'Please check your input.',\n);\n\n// Info notification (blue theme)\nEasyInAppNotify.showInfo(\n  title: 'Info',\n  message: 'New update available.',\n);\n```\n\n### Advanced Custom Notifications\n\nFor complete control, use the main `show()` method:\n\n```dart\n      EasyInAppNotify.show(\n  content: NotificationContent(\n    title: 'Custom Notification',\n    message: 'This notification is fully customized.',\n    icon: Icons.star,\n    trailing: Icon(Icons.arrow_forward),\n  ),\n  style: NotificationStyle(\n    primaryColor: Colors.purple,\n    backgroundColor: Colors.purple.shade50,\n    textColor: Colors.purple.shade900,\n    borderRadius: 16,\n    elevation: 8,\n    position: NotificationPosition.center,\n    animation: NotificationAnimation.scale,\n    showProgressBar: true,\n    enableBackgroundBlur: true,\n  ),\n  config: NotificationConfig(\n    duration: 5,\n    dismissOnTap: true,\n    onTap: () =\u003e print('Notification tapped!'),\n    onDismissed: () =\u003e print('Notification dismissed!'),\n  ),\n);\n```\n\n### Positioning Options\n\nControl where your notifications appear:\n\n```dart\n// Top of screen (default)\n      EasyInAppNotify.show(\n  content: NotificationContent(title: 'Top Notification'),\n  style: NotificationStyle(position: NotificationPosition.top),\n);\n\n// Bottom of screen\n      EasyInAppNotify.show(\n  content: NotificationContent(title: 'Bottom Notification'),\n  style: NotificationStyle(position: NotificationPosition.bottom),\n);\n\n// Center of screen\nEasyInAppNotify.show(\n  content: NotificationContent(title: 'Center Notification'),\n  style: NotificationStyle(position: NotificationPosition.center),\n);\n```\n\n### Animation Types\n\nChoose from different animation styles:\n\n```dart\n// Slide animation (default)\n    EasyInAppNotify.show(\n  content: NotificationContent(title: 'Slide Animation'),\n  style: NotificationStyle(\n    animation: NotificationAnimation.slide,\n    animationDuration: Duration(milliseconds: 400),\n  ),\n);\n\n// Fade animation\n    EasyInAppNotify.show(\n  content: NotificationContent(title: 'Fade Animation'),\n  style: NotificationStyle(\n    animation: NotificationAnimation.fade,\n    position: NotificationPosition.center,\n  ),\n);\n\n// Scale animation\n      EasyInAppNotify.show(\n  content: NotificationContent(title: 'Scale Animation'),\n  style: NotificationStyle(\n    animation: NotificationAnimation.scale,\n    position: NotificationPosition.center,\n  ),\n);\n```\n\n### Progress Bars \u0026 Auto-Dismiss\n\nShow progress indicators and control timing:\n\n```dart\n      EasyInAppNotify.show(\n  content: NotificationContent(\n    title: 'Downloading...',\n    message: 'Please wait while we download your files.',\n    icon: Icons.download,\n  ),\n  style: NotificationStyle(\n    primaryColor: Colors.blue,\n    showProgressBar: true, // 👈 Enable progress bar\n  ),\n  config: NotificationConfig(\n    duration: 8, // 👈 8 seconds auto-dismiss\n  ),\n);\n```\n\n### Interactive Notifications\n\nAdd tap handlers and custom behaviors:\n\n```dart\nEasyInAppNotify.show(\n  content: NotificationContent(\n    title: 'New Message',\n    message: 'Tap to read your message.',\n    icon: Icons.message,\n  ),\n  config: NotificationConfig(\n    dismissOnTap: true, // 👈 Dismiss when tapped\n    onTap: () {\n      // Handle tap\n      Navigator.pushNamed(context, '/messages');\n    },\n    onDismissed: () {\n      // Handle dismissal\n      print('User dismissed notification');\n    },\n  ),\n);\n```\n\n### Persistent Notifications\n\nCreate notifications that stay until manually dismissed:\n\n```dart\nEasyInAppNotify.show(\n  content: NotificationContent(\n    title: 'Important Update',\n    message: 'Please update your password.',\n    icon: Icons.security,\n  ),\n  config: NotificationConfig.persistent(), // 👈 No auto-dismiss\n);\n```\n\n### Background Blur Effects\n\nAdd beautiful blur effects behind notifications:\n\n```dart\n      EasyInAppNotify.show(\n  content: NotificationContent(\n    title: 'Premium Feature',\n    message: 'Unlock advanced features with Pro.',\n  ),\n  style: NotificationStyle(\n    enableBackgroundBlur: true, // 👈 Enable blur\n    backgroundBlurOpacity: 0.3, // 👈 Control blur intensity\n    position: NotificationPosition.center,\n  ),\n);\n```\n\n### Multiple Notifications\n\nShow multiple notifications simultaneously:\n\n```dart\n// Allow multiple notifications\nEasyInAppNotify.show(\n  content: NotificationContent(title: 'First notification'),\n  config: NotificationConfig(allowMultiple: true),\n);\n\nEasyInAppNotify.show(\n  content: NotificationContent(title: 'Second notification'),\n  style: NotificationStyle(position: NotificationPosition.bottom),\n  config: NotificationConfig(allowMultiple: true),\n);\n```\n\n## 🎛️ API Reference\n\n### NotificationContent\n\nDefines what content to show in the notification:\n\n```dart\nNotificationContent(\ntitle: 'Required title text',\nmessage: 'Optional message text',\nicon: Icons.check_circle, // Optional icon\ntrailing: Widget(), // Optional trailing widget\ncustomContent: Widget(), // Replace entire content area\n)\n```\n\n**Convenience Constructors:**\n\n- `NotificationContent.success()` - Pre-configured for success\n- `NotificationContent.error()` - Pre-configured for errors\n- `NotificationContent.warning()` - Pre-configured for warnings\n- `NotificationContent.info()` - Pre-configured for information\n\n### NotificationStyle\n\nControls the visual appearance and animations:\n\n```dart\nNotificationStyle(\n// Colors\nprimaryColor: Colors.blue,\nbackgroundColor: Colors.white,\ntextColor: Colors.black87,\niconColor: Colors.blue,\n\n// Layout\nborderRadius: 8.0,\nelevation: 4.0,\nmargin: EdgeInsets.all(16),\npadding: EdgeInsets.all(16),\nmaxWidth: 400.0,\n\n// Position \u0026 Animation\nposition: NotificationPosition.top,\nanimation: NotificationAnimation.slide,\nanimationDuration: Duration(milliseconds: 300),\n\n// Features\nshowProgressBar: false,\nenableSwipeToDismiss: true,\nenableBackgroundBlur: false,\nbackgroundBlurOpacity: 0.1,\n)\n```\n\n**Convenience Constructors:**\n\n- `NotificationStyle.success()` - Green theme\n- `NotificationStyle.error()` - Red theme\n- `NotificationStyle.warning()` - Orange theme\n- `NotificationStyle.info()` - Blue theme\n\n### NotificationConfig\n\nControls behavior and interaction:\n\n```dart\nNotificationConfig(\n  duration: 4, // Auto-dismiss after 4 seconds\n  dismissOnTap: false, // Dismiss when notification is tapped\n  pauseOnHover: true, // Pause timer when mouse hovers\n  allowMultiple: false, // Allow multiple notifications\n\n  // Callbacks\n  onTap: () {}, // Called when notification is tapped\n  onDismissed: () {}, // Called when notification is dismissed\n  onShow: () {}, // Called when notification starts showing\n)\n```\n\n**Convenience Constructors:**\n\n- `NotificationConfig.persistent()` - Never auto-dismiss\n- `NotificationConfig.quick()` - 2 seconds duration\n- `NotificationConfig.long()` - 8 seconds duration\n\n### Enums\n\n```dart\nenum NotificationPosition { top, bottom, center }\nenum NotificationAnimation { slide, fade, scale, none }\n```\n\n### Static Methods\n\n```dart\n// Convenience methods\nEasyInAppNotify.showSuccess(title: 'Title', message: 'Message');\nEasyInAppNotify.showError(title: 'Title', message: 'Message');\nEasyInAppNotify.showWarning(title: 'Title', message: 'Message');\nEasyInAppNotify.showInfo(title: 'Title', message: 'Message');\n\n// Main method\nString id = EasyInAppNotify.show(content: content, style: style, config: config);\n\n// Control methods\nEasyInAppNotify.dismiss(id); // Dismiss specific notification\nEasyInAppNotify.dismissAll(); // Dismiss all notifications\n\n// State queries\nbool showing = EasyInAppNotify.hasActiveNotifications;\nint count = EasyInAppNotify.activeCount;\n\n// Initialization\nTransitionBuilder builder = EasyInAppNotify.init();\n```\n\n## 🎨 Styling Examples\n\n### Material Design 3 Theme\n\n```dart\nEasyInAppNotify.show(\n  content: NotificationContent(\n    title: 'Material Design',\n    message: 'Following Material 3 guidelines.',\n    icon: Icons.palette,\n  ),\n  style: NotificationStyle(\n    primaryColor: Theme.of(context).colorScheme.primary,\n    backgroundColor: Theme.of(context).colorScheme.surface,\n    textColor: Theme.of(context).colorScheme.onSurface,\n    borderRadius: 12,\n    elevation: 3,\n  ),\n);\n```\n\n### Dark Theme Support\n\n```dart\nfinal isDark = Theme.of(context).brightness == Brightness.dark;\n\nEasyInAppNotify.show(\n  content: NotificationContent(title: 'Dark Theme Ready'),\n  style: NotificationStyle(\n    primaryColor: Colors.blue,\n    backgroundColor: isDark ? Colors.grey[800] : Colors.white,\n    textColor: isDark ? Colors.white : Colors.black87,\n  ),\n);\n```\n\n### Custom Brand Colors\n\n```dart\nEasyInAppNotify.show(\n  content: NotificationContent(\n    title: 'Brand Notification',\n    message: 'Using your app\\'s brand colors.',\n  ),\n  style: NotificationStyle(\n    primaryColor: Color(0xFF6366F1), // Your brand color\n    backgroundColor: Color(0xFFF0F9FF),\n    textColor: Color(0xFF1E293B),\n    borderRadius: 16,\n    elevation: 8,\n  ),\n);\n```\n\n## 🔧 Migration Guide\n\n### From v2.x to v3.0\n\nVersion 3.0 introduces a new, cleaner API while maintaining backward compatibility for basic usage.\n\n#### ✅ What Still Works (No Changes Required)\n\n```dart\n// These still work exactly the same\nEasyInAppNotify.showSuccess(title: 'Success');\nEasyInAppNotify.showError(title: 'Error');\nEasyInAppNotify.dismissAll();\n```\n\n#### 🔄 Recommended Updates\n\n**Old v2.x Style:**\n\n```dart\nEasyInAppNotify.show(\n  context,\n  view: CustomWidget(),\n  option: EasyInAppNotifyOption(duration: 3),\n  theme: EasyInAppNotifyTheme(color: Colors.blue),\n);\n```\n\n**New v3.0 Style:**\n\n```dart\nEasyInAppNotify.show(\n  content: NotificationContent(\n    title: 'Modern API',\n    customContent: CustomWidget(),\n  ),\n  style: NotificationStyle(primaryColor: Colors.blue),\n  config: NotificationConfig(duration: 3),\n);\n```\n\n#### 📝 Class Name Changes\n\n| v2.x                     | v3.0                  |\n| ------------------------ | --------------------- |\n| `EasyInAppNotifyOption`  | `NotificationConfig`  |\n| `EasyInAppNotifyTheme`   | `NotificationStyle`   |\n| `EasyInAppNotifyContent` | `NotificationContent` |\n\n## 🔍 Examples \u0026 Demos\n\nCheck out the [example app](example/) for a comprehensive demonstration of all features:\n\n```bash\ncd example\nflutter run\n```\n\nThe example includes:\n\n- ✅ 16 different notification types\n- ✅ All animation types and positions\n- ✅ Interactive features demonstration\n- ✅ Styling and theming examples\n- ✅ Performance testing with rapid notifications\n\n## ❓ Frequently Asked Questions\n\n### Q: Can I customize the notification layout completely?\n\n**A:** Yes! Use the `customContent` parameter in `NotificationContent`:\n\n```dart\nEasyInAppNotify.show(\n  content: NotificationContent(\n    title: '', // Required but can be empty\n    customContent: YourCustomWidget(),\n  ),\n);\n```\n\n### Q: How do I prevent notifications from overlapping?\n\n**A:** By default, new notifications replace old ones. To allow multiple:\n\n```dart\nEasyInAppNotify.show(\n  content: NotificationContent(title: 'Multiple'),\n  config: NotificationConfig(allowMultiple: true),\n);\n```\n\n### Q: Can I show notifications from anywhere in my app?\n\n**A:** Yes! Once initialized with `EasyInAppNotify.init()`, you can show notifications from any widget, even outside the widget tree.\n\n### Q: How do I handle notification taps for navigation?\n\n**A:** Use the `onTap` callback in `NotificationConfig`:\n\n```dart\nEasyInAppNotify.show(\n  content: NotificationContent(title: 'Navigate'),\n  config: NotificationConfig(\n    onTap: () =\u003e Navigator.pushNamed(context, '/route'),\n  ),\n);\n```\n\n### Q: Are notifications accessible for screen readers?\n\n**A:** Yes! The package follows Flutter's accessibility guidelines and works with screen readers out of the box.\n\n### Q: Can I control notification duration precisely?\n\n**A:** Absolutely! Set any duration or disable auto-dismiss:\n\n```dart\n// Custom duration\nNotificationConfig(duration: 10) // 10 seconds\n\n// Never dismiss automatically\nNotificationConfig.persistent()\n```\n\n## 🤝 Contributing\n\nWe welcome contributions! Please see our [Contributing Guide](CONTRIBUTING.md) for details.\n\n### Development Setup\n\n```bash\ngit clone https://github.com/mohamedmaher-dev/easy_in_app_notify.git\ncd easy_in_app_notify\nflutter pub get\ncd example \u0026\u0026 flutter run\n```\n\n### Reporting Issues\n\nFound a bug or have a feature request? Please open an issue on [GitHub](https://github.com/mohamedmaher-dev/easy_in_app_notify/issues).\n\n## 📄 License\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\n\n## 🙏 Acknowledgments\n\n- Built with ❤️ for the Flutter community\n- Inspired by modern mobile notification patterns\n- Thanks to all contributors and users who provided feedback\n\n---\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://pub.dev/packages/easy_in_app_notify\"\u003e\n    \u003cimg src=\"https://img.shields.io/pub/v/easy_in_app_notify.svg\" alt=\"Pub Version\" /\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://github.com/mohamedmaher-dev/easy_in_app_notify\"\u003e\n    \u003cimg src=\"https://img.shields.io/github/stars/mohamedmaher-dev/easy_in_app_notify.svg?style=social\" alt=\"GitHub Stars\" /\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  Made with ❤️ by \u003ca href=\"https://github.com/mohamedmaher-dev\"\u003eMohamed Maher\u003c/a\u003e\n\u003c/p\u003e\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmohamedmaher-dev%2Feasy_in_app_notify","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmohamedmaher-dev%2Feasy_in_app_notify","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmohamedmaher-dev%2Feasy_in_app_notify/lists"}