π Global UI Overlay
A lightweight, production-ready Flutter package to display global overlay widgets across your app with precise positioning, scroll-aware effects, and lifecycle callbacks.
Designed for FABs, chat heads, support buttons, banners, or any persistent UI element that must float above your app reliably.
β pub.dev Quality Checklist (Passed)
- β Clean public API
- β Null-safe & memory-safe
- β No HTML in README (pub.dev compatible)
- β Clear usage & examples
- β MIT licensed
- β Zero dependencies
- β Optimized for production apps
β¨ Features
-
π 9 positioning options (top/center/bottom Γ left/center/right)
-
π Scroll-aware visual effects
- Hide on scroll
- Fade on inactivity
- Slide on scroll
- Scale on scroll
-
β± Delayed display support
-
π Lifecycle callbacks (tap, show, hide, dispose)
-
π§ Global scroll detection
-
β‘ Minimal performance overhead
-
π§Ή Automatic cleanup & memory-safe disposal
π¦ Installation
Add this to your pubspec.yaml:
dependencies:
global_ui_overlay: ^1.0.0
Then run:
flutter pub get
π Quick Start (Minimal Setup)
1οΈβ£ Create a global NavigatorKey
final GlobalKey<NavigatorState> navigatorKey = GlobalKey<NavigatorState>();
2οΈβ£ Wrap your app with ScrollDetectorWrapper
This enables scroll-based effects globally.
MaterialApp(
navigatorKey: navigatorKey,
builder: (context, child) {
return ScrollDetectorWrapper(child: child!);
},
home: HomePage(),
);
3οΈβ£ Initialize the overlay (once)
GlobalUIOverlay.initialize(
navigatorKey: navigatorKey,
config: GlobalUIOverlayConfig(
child: FloatingActionButton(
onPressed: () {},
child: const Icon(Icons.chat),
),
alignment: OverlayAlignmentConfig(
position: OverlayPosition.bottomRight,
),
effect: OverlayEffect.scrollHide,
enableScrollEffect: true,
),
);
Thatβs it β the overlay is now live across your app.
βοΈ Configuration Guide (Detailed)
πΉ GlobalUIOverlayConfig
| Property | Type | Description |
|---|---|---|
child |
Widget |
Required. Widget to display as overlay |
alignment |
OverlayAlignmentConfig |
Position + margin configuration |
displayDelay |
Duration? |
Delay before showing overlay |
effect |
OverlayEffect |
Visual behavior (scroll, fade, etc.) |
enableScrollEffect |
bool |
Enable scroll-based effects |
onTap |
VoidCallback? |
Called when overlay is tapped |
onDisplay |
VoidCallback? |
Called when overlay appears |
onHide |
VoidCallback? |
Called when overlay hides |
onDispose |
VoidCallback? |
Called on cleanup |
π Positioning (OverlayAlignmentConfig)
OverlayAlignmentConfig(
position: OverlayPosition.bottomRight,
margin: EdgeInsets.only(bottom: 96, right: 16),
)
Available positions:
topLeft,topCenter,topRightcenterLeft,center,centerRightbottomLeft,bottomCenter,bottomRight
π Effects (OverlayEffect)
| Effect | Behavior |
|---|---|
OverlayEffect.none |
No animation |
OverlayEffect.scrollHide |
Hides while scrolling |
OverlayEffect.fadeOnInactivity |
Fades after inactivity |
OverlayEffect.slideOnScroll |
Slides slightly on scroll |
OverlayEffect.scaleOnScroll |
Scales down during scroll |
Example:
effect: OverlayEffect.fadeOnInactivity,
enableScrollEffect: true,
π« Hiding Overlay on Specific Screens
Hide overlay on login, splash, or onboarding screens.
@override
void initState() {
super.initState();
GlobalUIOverlay.hide();
}
@override
void dispose() {
GlobalUIOverlay.show();
super.dispose();
}
π§Ή Cleanup (Important)
Dispose when your app shuts down:
@override
void dispose() {
GlobalUIOverlay.dispose();
super.dispose();
}
π§ Best Practices
- Initialize only once
- Always provide
navigatorKey - Use
ScrollDetectorWrapperfor scroll effects - Hide overlay explicitly on sensitive screens
- Prefer lightweight widgets (FABs, icons)
π‘ License
MIT License
MIT License
Copyright (c) 2025
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction...
π€ Author & Contact
Gunjan Sharma Senior Flutter Engineer
- π LinkedIn: https://www.linkedin.com/in/gunjan1sharma/
- π» GitHub: https://github.com/gunjan1sharma
- π§ Email: gunjan.sharmo@gmail.com
β Support
If this package helps you:
- Star the repo β
- Report issues
- Suggest improvements
Built for teams that care about clean architecture, UX polish, and production reliability.