v2.0.11system_alert_window
Um plugin do Flutter para mostrar uma janela de sobreposição semelhante ao Truecaller, sobre todos os outros aplicativos, junto com eventos de retorno.
Um plug-in do Flutter para exibir uma janela sobreposta semelhante ao Truecaller, sobre todos os outros aplicativos, junto com eventos de retorno. Nos dispositivos Android Go ou Android 11 e superiores, este plug-in exibe uma bolha de notificação; em outras versões do Android, exibe uma janela sobreposta.
{"sdk":"flutter"}{"sdk":"flutter"}^4.0.0Texto original em inglês. Visite o GitHub para a versão atual.
A flutter plugin to show Truecaller like overlay window, over all other apps along with callback events. Android Go or Android 11 & above, this plugin shows notification bubble, in other android versions, it shows an overlay window.
https://github.com/pvsvamsi/SystemAlertWindow/raw/master/assets/images/example%20demo.gif https://github.com/pvsvamsi/SystemAlertWindow/raw/master/assets/images/background%20button%20click.gif
//Permissions
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE " />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<application
//Linking the previously added application class
android:name=".Application"
android:label="system_alert_window_example"
android:icon="@mipmap/ic_launcher">
Uses 'draw on top' permission and displays it as a overlay window
With SystemWindowPrefMode.OVERLAY, system alert windows uses 'overlay functionality' wherever it's supported. In that mode, it will show as bubbles if the 'display over other apps' is not supported. With SystemWindowPrefMode.DEFAULT/SystemWindowPrefMode.BUBBLE, User has to allow 'All conversations can bubble' in the notification settings of the app. Uses Android Bubble APIs to show the overlay window inside a notification bubble.
Edge-to-edge content and window insets are handled automatically inside the bubble container — wrap your overlay widget with SafeArea to avoid content being obscured by system bars.
User has to manually enable bubbles from the developer options. Uses Android Bubble APIs to show the overlay window inside a notification bubble.
Displays as a notification in the notification center [Help Needed]
await SystemAlertWindow.requestPermissions;
main.dart create an entry point for your Overlay widget;// overlay entry point
@pragma("vm:entry-point")
void overlayMain() {
runApp(const MaterialApp(
debugShowCheckedModeBanner: false,
home: Material(child: Text("My overlay"))
));
}
//Open overLay content
// - Optional arguments:
/// `gravity` Position of the window and default is [SystemWindowGravity.CENTER]
/// `width` Width of the window and default is [Constants.MATCH_PARENT]
/// `height` Height of the window and default is [Constants.WRAP_CONTENT]
/// `notificationTitle` Notification title, applicable in case of bubble
/// `notificationBody` Notification body, applicable in case of bubble
/// `prefMode` Preference for the system window. Default is [SystemWindowPrefMode.DEFAULT]
/// `layoutParamFlags` List of List of WindowManager.LayoutParams. This is not applicable for bubbles.
await SystemAlertWindow.showSystemWindow();
/// update the overlay flag while the overlay in action
/// - Optional arguments:
/// `gravity` Position of the window and default is [SystemWindowGravity.CENTER]
/// `width` Width of the window and default is [Constants.MATCH_PARENT]
/// `height` Height of the window and default is [Constants.WRAP_CONTENT]
/// `notificationTitle` Notification title, applicable in case of bubble
/// `notificationBody` Notification body, applicable in case of bubble
/// `prefMode` Preference for the system window. Default is [SystemWindowPrefMode.DEFAULT]
/// `layoutParamFlags` List of List of WindowManager.LayoutParams. This is not applicable for bubbles.
await FlutterOverlayWindow.updateSystemWindow();
// closes overlay if open
await SystemAlertWindow.closeSystemWindow();
// broadcast data to overlay app from main app
await SystemAlertWindow.sendMessageToOverlay("Hello from the other side");
//streams message from main app to overlay.
SystemAlertWindow.overlayListener.listen((event) {
log("Current Event: $event");
});
import 'dart:isolate';
import 'dart:ui';
class IsolateManager{
static const FOREGROUND_PORT_NAME = "foreground_port";
static SendPort lookupPortByName() {
return IsolateNameServer.lookupPortByName(FOREGROUND_PORT_NAME);
}
static bool registerPortWithName(SendPort port) {
assert(port != null, "'port' cannot be null.");
removePortNameMapping(FOREGROUND_PORT_NAME);
return IsolateNameServer.registerPortWithName(port, FOREGROUND_PORT_NAME);
}
static bool removePortNameMapping(String name) {
assert(name != null, "'name' cannot be null.");
return IsolateNameServer.removePortNameMapping(name);
}
}
await SystemAlertWindow.checkPermissions;
ReceivePort _port = ReceivePort();
IsolateManager.registerPortWithName(_port.sendPort);
_port.listen((message) {
log("message from OVERLAY: $message");
print("Do what ever you want here. This is inside your application scope");
});
void callBackFunction(String tag) {
print("Got tag " + tag);
SendPort port = IsolateManager.lookupPortByName();
port.send(tag);
}