Repository files navigation

flutter_background

"Buy Me A Coffee"

A plugin to keep flutter apps running in the background. Currently only works with Android.

It achieves this functionality by running an Android foreground service in combination with a partial wake lock and disabling battery optimizations in order to keep the flutter isolate running.

Note: This plugin currently only works with Android. PRs for iOS are very welcome, although I am not sure if a similar effect can be achieved with iOS at all.

Getting started

To use this plugin, add flutter_background as a dependency in your pubspec.yaml file.

Android

Add the following permissions to the AndroidManifest.xml:

<manifestxmlns:android="http://schemas.android.com/apk/res/android"package="de.julianassmann.flutter_background_example">
<!-- Adapt to the foreground service type(s) desired, these are just examples -->
<uses-permissionandroid:name="android.permission.FOREGROUND_SERVICE_DATA_SYNC" />
<uses-permissionandroid:name="android.permission.FOREGROUND_SERVICE_SPECIAL_USE" />
<application>
...
<!-- Adapt to the foreground service type(s) desired, these are just examples -->
<serviceandroid:name="de.julianassmann.flutter_background.IsolateHolderService"android:exported="false"android:foregroundServiceType="dataSync|specialUse|..." />
</application>
</manifest>

Important: You must specify the appropriate foregroundServiceType for your use case. See the Android docs and the list of available service typs for more information on foreground service types.

Other platforms

Android is the only supported platform. There are currently no plans to extend support for other platforms, but feel free to change that by contributing to this plugin.

Usage

Import flutter_background.dart:

import'package:flutter_background/flutter_background.dart';

Initializing plugin and handling permissions

Before you can use this plugin, you need to initialize it by calling FlutterBackground.initialize(...):

final androidConfig =FlutterBackgroundAndroidConfig(
notificationTitle:"flutter_background example app",
notificationText:"Background notification for keeping the example app running in the background",
notificationImportance:AndroidNotificationImportance.normal,
notificationIcon:AndroidResource(name:'background_icon', defType:'drawable'), // Default is ic_launcher from folder mipmap
);
bool success =awaitFlutterBackground.initialize(androidConfig: androidConfig);

This ensures all permissions are granted and requests them if necessary. It also configures the foreground notification. The configuration above results in the foreground notification shown below when running FlutterBackground.enableBackgroundExecution().

The foreground notification created by the code above.

The arguments are:

  • notificationTitle: The title used for the foreground service notification.
  • notificationText: The body used for the foreground service notification.
  • notificationImportance: The importance of the foreground service notification.
  • notificationIcon: The icon used for the foreground service notification shown in the top left corner. This must be a drawable Android Resource (see here for more). E. g. if the icon with name "background_icon" is in the "drawable" resource folder, it should be of value `AndroidResource(name: 'background_icon', defType: 'drawable').
  • enableWifiLock: Indicates whether or not a WifiLock is acquired when background execution is started. This allows the application to keep the Wi-Fi radio awake, even when the user has not used the device in a while (e.g. for background network communications).

In this example, background_icon is a drawable resource in the drawable folders (see the example app). For more information check out the Android documentation for creating notification icons for more information how to create and store an icon.

In order to function correctly, this plugin needs a few permissions. FlutterBackground.initialize(...) will request permissions from the user if necessary. You can call initialize more than one time, so you can call initalize() every time before you call enableBackgroundExecution() (see below).

In order to notify the user about upcoming permission requests by the system, you need to know, whether or not the app already has these permissions. You can find out by calling

bool hasPermissions =awaitFlutterBackground.hasPermissions;

before calling FlutterBackground.initialize(...). If the app already has all necessary permissions, no permission requests will be displayed to the user.

Run app in background

With

bool success =awaitFlutterBackground.enableBackgroundExecution();

you can try to get the app running in the background. You must call FlutterBackground.initialize() before calling FlutterBackground.enableBackgroundExecution().

With

awaitFlutterBackground.disableBackgroundExecution();

you can stop the background execution of the app. You must call FlutterBackground.initialize() before calling FlutterBackground.disableBackgroundExecution().

To check whether background execution is currently enabled, use

bool enabled =FlutterBackground.isBackgroundExecutionEnabled;

Example

The example is a TCP chat app: It can connect to a TCP server and send and receive messages. The user is notified about incoming messages by notifications created with the plugin flutter_local_notifications.

Using this plugin, the example app can maintain the TCP connection with the server, receiving messages and creating notifications for the user even when in the background.

Maintainer

Julian Aßmann

If you experience any problems with this package, please create an issue on Github. Pull requests are also very welcome.

About

A flutter plugin to keep apps running in the background via foreground services. Android only.

Topics

Resources

Stars

95 stars

Watchers

4 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

flutter_background

"Buy Me A Coffee"

A plugin to keep flutter apps running in the background. Currently only works with Android.

It achieves this functionality by running an Android foreground service in combination with a partial wake lock and disabling battery optimizations in order to keep the flutter isolate running.

Note: This plugin currently only works with Android. PRs for iOS are very welcome, although I am not sure if a similar effect can be achieved with iOS at all.

Getting started

To use this plugin, add flutter_background as a dependency in your pubspec.yaml file.

Android

Add the following permissions to the AndroidManifest.xml:

<manifestxmlns:android="http://schemas.android.com/apk/res/android"package="de.julianassmann.flutter_background_example">
<!-- Adapt to the foreground service type(s) desired, these are just examples -->
<uses-permissionandroid:name="android.permission.FOREGROUND_SERVICE_DATA_SYNC" />
<uses-permissionandroid:name="android.permission.FOREGROUND_SERVICE_SPECIAL_USE" />
<application>
...
<!-- Adapt to the foreground service type(s) desired, these are just examples -->
<serviceandroid:name="de.julianassmann.flutter_background.IsolateHolderService"android:exported="false"android:foregroundServiceType="dataSync|specialUse|..." />
</application>
</manifest>

Important: You must specify the appropriate foregroundServiceType for your use case. See the Android docs and the list of available service typs for more information on foreground service types.

Other platforms

Android is the only supported platform. There are currently no plans to extend support for other platforms, but feel free to change that by contributing to this plugin.

Usage

Import flutter_background.dart:

import'package:flutter_background/flutter_background.dart';

Initializing plugin and handling permissions

Before you can use this plugin, you need to initialize it by calling FlutterBackground.initialize(...):

final androidConfig =FlutterBackgroundAndroidConfig(
notificationTitle:"flutter_background example app",
notificationText:"Background notification for keeping the example app running in the background",
notificationImportance:AndroidNotificationImportance.normal,
notificationIcon:AndroidResource(name:'background_icon', defType:'drawable'), // Default is ic_launcher from folder mipmap
);
bool success =awaitFlutterBackground.initialize(androidConfig: androidConfig);

This ensures all permissions are granted and requests them if necessary. It also configures the foreground notification. The configuration above results in the foreground notification shown below when running FlutterBackground.enableBackgroundExecution().

The foreground notification created by the code above.

The arguments are:

  • notificationTitle: The title used for the foreground service notification.
  • notificationText: The body used for the foreground service notification.
  • notificationImportance: The importance of the foreground service notification.
  • notificationIcon: The icon used for the foreground service notification shown in the top left corner. This must be a drawable Android Resource (see here for more). E. g. if the icon with name "background_icon" is in the "drawable" resource folder, it should be of value `AndroidResource(name: 'background_icon', defType: 'drawable').
  • enableWifiLock: Indicates whether or not a WifiLock is acquired when background execution is started. This allows the application to keep the Wi-Fi radio awake, even when the user has not used the device in a while (e.g. for background network communications).

In this example, background_icon is a drawable resource in the drawable folders (see the example app). For more information check out the Android documentation for creating notification icons for more information how to create and store an icon.

In order to function correctly, this plugin needs a few permissions. FlutterBackground.initialize(...) will request permissions from the user if necessary. You can call initialize more than one time, so you can call initalize() every time before you call enableBackgroundExecution() (see below).

In order to notify the user about upcoming permission requests by the system, you need to know, whether or not the app already has these permissions. You can find out by calling

bool hasPermissions =awaitFlutterBackground.hasPermissions;

before calling FlutterBackground.initialize(...). If the app already has all necessary permissions, no permission requests will be displayed to the user.

Run app in background

With

bool success =awaitFlutterBackground.enableBackgroundExecution();

you can try to get the app running in the background. You must call FlutterBackground.initialize() before calling FlutterBackground.enableBackgroundExecution().

With

awaitFlutterBackground.disableBackgroundExecution();

you can stop the background execution of the app. You must call FlutterBackground.initialize() before calling FlutterBackground.disableBackgroundExecution().

To check whether background execution is currently enabled, use

bool enabled =FlutterBackground.isBackgroundExecutionEnabled;

Example

The example is a TCP chat app: It can connect to a TCP server and send and receive messages. The user is notified about incoming messages by notifications created with the plugin flutter_local_notifications.

Using this plugin, the example app can maintain the TCP connection with the server, receiving messages and creating notifications for the user even when in the background.

Maintainer

Julian Aßmann

If you experience any problems with this package, please create an issue on Github. Pull requests are also very welcome.

About

A flutter plugin to keep apps running in the background via foreground services. Android only.

Topics

Resources

Stars

95 stars

Watchers

4 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

flutter_background

"Buy Me A Coffee"

A plugin to keep flutter apps running in the background. Currently only works with Android.

It achieves this functionality by running an Android foreground service in combination with a partial wake lock and disabling battery optimizations in order to keep the flutter isolate running.

Note: This plugin currently only works with Android. PRs for iOS are very welcome, although I am not sure if a similar effect can be achieved with iOS at all.

Getting started

To use this plugin, add flutter_background as a dependency in your pubspec.yaml file.

Android

Add the following permissions to the AndroidManifest.xml:

<manifestxmlns:android="http://schemas.android.com/apk/res/android"package="de.julianassmann.flutter_background_example">
<!-- Adapt to the foreground service type(s) desired, these are just examples -->
<uses-permissionandroid:name="android.permission.FOREGROUND_SERVICE_DATA_SYNC" />
<uses-permissionandroid:name="android.permission.FOREGROUND_SERVICE_SPECIAL_USE" />
<application>
...
<!-- Adapt to the foreground service type(s) desired, these are just examples -->
<serviceandroid:name="de.julianassmann.flutter_background.IsolateHolderService"android:exported="false"android:foregroundServiceType="dataSync|specialUse|..." />
</application>
</manifest>

Important: You must specify the appropriate foregroundServiceType for your use case. See the Android docs and the list of available service typs for more information on foreground service types.

Other platforms

Android is the only supported platform. There are currently no plans to extend support for other platforms, but feel free to change that by contributing to this plugin.

Usage

Import flutter_background.dart:

import'package:flutter_background/flutter_background.dart';

Initializing plugin and handling permissions

Before you can use this plugin, you need to initialize it by calling FlutterBackground.initialize(...):

final androidConfig =FlutterBackgroundAndroidConfig(
notificationTitle:"flutter_background example app",
notificationText:"Background notification for keeping the example app running in the background",
notificationImportance:AndroidNotificationImportance.normal,
notificationIcon:AndroidResource(name:'background_icon', defType:'drawable'), // Default is ic_launcher from folder mipmap
);
bool success =awaitFlutterBackground.initialize(androidConfig: androidConfig);

This ensures all permissions are granted and requests them if necessary. It also configures the foreground notification. The configuration above results in the foreground notification shown below when running FlutterBackground.enableBackgroundExecution().

The foreground notification created by the code above.

The arguments are:

  • notificationTitle: The title used for the foreground service notification.
  • notificationText: The body used for the foreground service notification.
  • notificationImportance: The importance of the foreground service notification.
  • notificationIcon: The icon used for the foreground service notification shown in the top left corner. This must be a drawable Android Resource (see here for more). E. g. if the icon with name "background_icon" is in the "drawable" resource folder, it should be of value `AndroidResource(name: 'background_icon', defType: 'drawable').
  • enableWifiLock: Indicates whether or not a WifiLock is acquired when background execution is started. This allows the application to keep the Wi-Fi radio awake, even when the user has not used the device in a while (e.g. for background network communications).

In this example, background_icon is a drawable resource in the drawable folders (see the example app). For more information check out the Android documentation for creating notification icons for more information how to create and store an icon.

In order to function correctly, this plugin needs a few permissions. FlutterBackground.initialize(...) will request permissions from the user if necessary. You can call initialize more than one time, so you can call initalize() every time before you call enableBackgroundExecution() (see below).

In order to notify the user about upcoming permission requests by the system, you need to know, whether or not the app already has these permissions. You can find out by calling

bool hasPermissions =awaitFlutterBackground.hasPermissions;

before calling FlutterBackground.initialize(...). If the app already has all necessary permissions, no permission requests will be displayed to the user.

Run app in background

With

bool success =awaitFlutterBackground.enableBackgroundExecution();

you can try to get the app running in the background. You must call FlutterBackground.initialize() before calling FlutterBackground.enableBackgroundExecution().

With

awaitFlutterBackground.disableBackgroundExecution();

you can stop the background execution of the app. You must call FlutterBackground.initialize() before calling FlutterBackground.disableBackgroundExecution().

To check whether background execution is currently enabled, use

bool enabled =FlutterBackground.isBackgroundExecutionEnabled;

Example

The example is a TCP chat app: It can connect to a TCP server and send and receive messages. The user is notified about incoming messages by notifications created with the plugin flutter_local_notifications.

Using this plugin, the example app can maintain the TCP connection with the server, receiving messages and creating notifications for the user even when in the background.

Maintainer

Julian Aßmann

If you experience any problems with this package, please create an issue on Github. Pull requests are also very welcome.

About

A flutter plugin to keep apps running in the background via foreground services. Android only.

Topics

Resources

Stars

95 stars

Watchers

4 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

flutter_background

"Buy Me A Coffee"

A plugin to keep flutter apps running in the background. Currently only works with Android.

It achieves this functionality by running an Android foreground service in combination with a partial wake lock and disabling battery optimizations in order to keep the flutter isolate running.

Note: This plugin currently only works with Android. PRs for iOS are very welcome, although I am not sure if a similar effect can be achieved with iOS at all.

Getting started

To use this plugin, add flutter_background as a dependency in your pubspec.yaml file.

Android

Add the following permissions to the AndroidManifest.xml:

<manifestxmlns:android="http://schemas.android.com/apk/res/android"package="de.julianassmann.flutter_background_example">
<!-- Adapt to the foreground service type(s) desired, these are just examples -->
<uses-permissionandroid:name="android.permission.FOREGROUND_SERVICE_DATA_SYNC" />
<uses-permissionandroid:name="android.permission.FOREGROUND_SERVICE_SPECIAL_USE" />
<application>
...
<!-- Adapt to the foreground service type(s) desired, these are just examples -->
<serviceandroid:name="de.julianassmann.flutter_background.IsolateHolderService"android:exported="false"android:foregroundServiceType="dataSync|specialUse|..." />
</application>
</manifest>

Important: You must specify the appropriate foregroundServiceType for your use case. See the Android docs and the list of available service typs for more information on foreground service types.

Other platforms

Android is the only supported platform. There are currently no plans to extend support for other platforms, but feel free to change that by contributing to this plugin.

Usage

Import flutter_background.dart:

import'package:flutter_background/flutter_background.dart';

Initializing plugin and handling permissions

Before you can use this plugin, you need to initialize it by calling FlutterBackground.initialize(...):

final androidConfig =FlutterBackgroundAndroidConfig(
notificationTitle:"flutter_background example app",
notificationText:"Background notification for keeping the example app running in the background",
notificationImportance:AndroidNotificationImportance.normal,
notificationIcon:AndroidResource(name:'background_icon', defType:'drawable'), // Default is ic_launcher from folder mipmap
);
bool success =awaitFlutterBackground.initialize(androidConfig: androidConfig);

This ensures all permissions are granted and requests them if necessary. It also configures the foreground notification. The configuration above results in the foreground notification shown below when running FlutterBackground.enableBackgroundExecution().

The foreground notification created by the code above.

The arguments are:

  • notificationTitle: The title used for the foreground service notification.
  • notificationText: The body used for the foreground service notification.
  • notificationImportance: The importance of the foreground service notification.
  • notificationIcon: The icon used for the foreground service notification shown in the top left corner. This must be a drawable Android Resource (see here for more). E. g. if the icon with name "background_icon" is in the "drawable" resource folder, it should be of value `AndroidResource(name: 'background_icon', defType: 'drawable').
  • enableWifiLock: Indicates whether or not a WifiLock is acquired when background execution is started. This allows the application to keep the Wi-Fi radio awake, even when the user has not used the device in a while (e.g. for background network communications).

In this example, background_icon is a drawable resource in the drawable folders (see the example app). For more information check out the Android documentation for creating notification icons for more information how to create and store an icon.

In order to function correctly, this plugin needs a few permissions. FlutterBackground.initialize(...) will request permissions from the user if necessary. You can call initialize more than one time, so you can call initalize() every time before you call enableBackgroundExecution() (see below).

In order to notify the user about upcoming permission requests by the system, you need to know, whether or not the app already has these permissions. You can find out by calling

bool hasPermissions =awaitFlutterBackground.hasPermissions;

before calling FlutterBackground.initialize(...). If the app already has all necessary permissions, no permission requests will be displayed to the user.

Run app in background

With

bool success =awaitFlutterBackground.enableBackgroundExecution();

you can try to get the app running in the background. You must call FlutterBackground.initialize() before calling FlutterBackground.enableBackgroundExecution().

With

awaitFlutterBackground.disableBackgroundExecution();

you can stop the background execution of the app. You must call FlutterBackground.initialize() before calling FlutterBackground.disableBackgroundExecution().

To check whether background execution is currently enabled, use

bool enabled =FlutterBackground.isBackgroundExecutionEnabled;

Example

The example is a TCP chat app: It can connect to a TCP server and send and receive messages. The user is notified about incoming messages by notifications created with the plugin flutter_local_notifications.

Using this plugin, the example app can maintain the TCP connection with the server, receiving messages and creating notifications for the user even when in the background.

Maintainer

Julian Aßmann

If you experience any problems with this package, please create an issue on Github. Pull requests are also very welcome.

About

A flutter plugin to keep apps running in the background via foreground services. Android only.

Topics

Resources

Stars

95 stars

Watchers

4 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

flutter_background

"Buy Me A Coffee"

A plugin to keep flutter apps running in the background. Currently only works with Android.

It achieves this functionality by running an Android foreground service in combination with a partial wake lock and disabling battery optimizations in order to keep the flutter isolate running.

Note: This plugin currently only works with Android. PRs for iOS are very welcome, although I am not sure if a similar effect can be achieved with iOS at all.

Getting started

To use this plugin, add flutter_background as a dependency in your pubspec.yaml file.

Android

Add the following permissions to the AndroidManifest.xml:

<manifestxmlns:android="http://schemas.android.com/apk/res/android"package="de.julianassmann.flutter_background_example">
<!-- Adapt to the foreground service type(s) desired, these are just examples -->
<uses-permissionandroid:name="android.permission.FOREGROUND_SERVICE_DATA_SYNC" />
<uses-permissionandroid:name="android.permission.FOREGROUND_SERVICE_SPECIAL_USE" />
<application>
...
<!-- Adapt to the foreground service type(s) desired, these are just examples -->
<serviceandroid:name="de.julianassmann.flutter_background.IsolateHolderService"android:exported="false"android:foregroundServiceType="dataSync|specialUse|..." />
</application>
</manifest>

Important: You must specify the appropriate foregroundServiceType for your use case. See the Android docs and the list of available service typs for more information on foreground service types.

Other platforms

Android is the only supported platform. There are currently no plans to extend support for other platforms, but feel free to change that by contributing to this plugin.

Usage

Import flutter_background.dart:

import'package:flutter_background/flutter_background.dart';

Initializing plugin and handling permissions

Before you can use this plugin, you need to initialize it by calling FlutterBackground.initialize(...):

final androidConfig =FlutterBackgroundAndroidConfig(
notificationTitle:"flutter_background example app",
notificationText:"Background notification for keeping the example app running in the background",
notificationImportance:AndroidNotificationImportance.normal,
notificationIcon:AndroidResource(name:'background_icon', defType:'drawable'), // Default is ic_launcher from folder mipmap
);
bool success =awaitFlutterBackground.initialize(androidConfig: androidConfig);

This ensures all permissions are granted and requests them if necessary. It also configures the foreground notification. The configuration above results in the foreground notification shown below when running FlutterBackground.enableBackgroundExecution().

The foreground notification created by the code above.

The arguments are:

  • notificationTitle: The title used for the foreground service notification.
  • notificationText: The body used for the foreground service notification.
  • notificationImportance: The importance of the foreground service notification.
  • notificationIcon: The icon used for the foreground service notification shown in the top left corner. This must be a drawable Android Resource (see here for more). E. g. if the icon with name "background_icon" is in the "drawable" resource folder, it should be of value `AndroidResource(name: 'background_icon', defType: 'drawable').
  • enableWifiLock: Indicates whether or not a WifiLock is acquired when background execution is started. This allows the application to keep the Wi-Fi radio awake, even when the user has not used the device in a while (e.g. for background network communications).

In this example, background_icon is a drawable resource in the drawable folders (see the example app). For more information check out the Android documentation for creating notification icons for more information how to create and store an icon.

In order to function correctly, this plugin needs a few permissions. FlutterBackground.initialize(...) will request permissions from the user if necessary. You can call initialize more than one time, so you can call initalize() every time before you call enableBackgroundExecution() (see below).

In order to notify the user about upcoming permission requests by the system, you need to know, whether or not the app already has these permissions. You can find out by calling

bool hasPermissions =awaitFlutterBackground.hasPermissions;

before calling FlutterBackground.initialize(...). If the app already has all necessary permissions, no permission requests will be displayed to the user.

Run app in background

With

bool success =awaitFlutterBackground.enableBackgroundExecution();

you can try to get the app running in the background. You must call FlutterBackground.initialize() before calling FlutterBackground.enableBackgroundExecution().

With

awaitFlutterBackground.disableBackgroundExecution();

you can stop the background execution of the app. You must call FlutterBackground.initialize() before calling FlutterBackground.disableBackgroundExecution().

To check whether background execution is currently enabled, use

bool enabled =FlutterBackground.isBackgroundExecutionEnabled;

Example

The example is a TCP chat app: It can connect to a TCP server and send and receive messages. The user is notified about incoming messages by notifications created with the plugin flutter_local_notifications.

Using this plugin, the example app can maintain the TCP connection with the server, receiving messages and creating notifications for the user even when in the background.

Maintainer

Julian Aßmann

If you experience any problems with this package, please create an issue on Github. Pull requests are also very welcome.

About

A flutter plugin to keep apps running in the background via foreground services. Android only.

Topics

Resources

Stars

95 stars

Watchers

4 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

flutter_background

"Buy Me A Coffee"

A plugin to keep flutter apps running in the background. Currently only works with Android.

It achieves this functionality by running an Android foreground service in combination with a partial wake lock and disabling battery optimizations in order to keep the flutter isolate running.

Note: This plugin currently only works with Android. PRs for iOS are very welcome, although I am not sure if a similar effect can be achieved with iOS at all.

Getting started

To use this plugin, add flutter_background as a dependency in your pubspec.yaml file.

Android

Add the following permissions to the AndroidManifest.xml:

<manifestxmlns:android="http://schemas.android.com/apk/res/android"package="de.julianassmann.flutter_background_example">
<!-- Adapt to the foreground service type(s) desired, these are just examples -->
<uses-permissionandroid:name="android.permission.FOREGROUND_SERVICE_DATA_SYNC" />
<uses-permissionandroid:name="android.permission.FOREGROUND_SERVICE_SPECIAL_USE" />
<application>
...
<!-- Adapt to the foreground service type(s) desired, these are just examples -->
<serviceandroid:name="de.julianassmann.flutter_background.IsolateHolderService"android:exported="false"android:foregroundServiceType="dataSync|specialUse|..." />
</application>
</manifest>

Important: You must specify the appropriate foregroundServiceType for your use case. See the Android docs and the list of available service typs for more information on foreground service types.

Other platforms

Android is the only supported platform. There are currently no plans to extend support for other platforms, but feel free to change that by contributing to this plugin.

Usage

Import flutter_background.dart:

import'package:flutter_background/flutter_background.dart';

Initializing plugin and handling permissions

Before you can use this plugin, you need to initialize it by calling FlutterBackground.initialize(...):

final androidConfig =FlutterBackgroundAndroidConfig(
notificationTitle:"flutter_background example app",
notificationText:"Background notification for keeping the example app running in the background",
notificationImportance:AndroidNotificationImportance.normal,
notificationIcon:AndroidResource(name:'background_icon', defType:'drawable'), // Default is ic_launcher from folder mipmap
);
bool success =awaitFlutterBackground.initialize(androidConfig: androidConfig);

This ensures all permissions are granted and requests them if necessary. It also configures the foreground notification. The configuration above results in the foreground notification shown below when running FlutterBackground.enableBackgroundExecution().

The foreground notification created by the code above.

The arguments are:

  • notificationTitle: The title used for the foreground service notification.
  • notificationText: The body used for the foreground service notification.
  • notificationImportance: The importance of the foreground service notification.
  • notificationIcon: The icon used for the foreground service notification shown in the top left corner. This must be a drawable Android Resource (see here for more). E. g. if the icon with name "background_icon" is in the "drawable" resource folder, it should be of value `AndroidResource(name: 'background_icon', defType: 'drawable').
  • enableWifiLock: Indicates whether or not a WifiLock is acquired when background execution is started. This allows the application to keep the Wi-Fi radio awake, even when the user has not used the device in a while (e.g. for background network communications).

In this example, background_icon is a drawable resource in the drawable folders (see the example app). For more information check out the Android documentation for creating notification icons for more information how to create and store an icon.

In order to function correctly, this plugin needs a few permissions. FlutterBackground.initialize(...) will request permissions from the user if necessary. You can call initialize more than one time, so you can call initalize() every time before you call enableBackgroundExecution() (see below).

In order to notify the user about upcoming permission requests by the system, you need to know, whether or not the app already has these permissions. You can find out by calling

bool hasPermissions =awaitFlutterBackground.hasPermissions;

before calling FlutterBackground.initialize(...). If the app already has all necessary permissions, no permission requests will be displayed to the user.

Run app in background

With

bool success =awaitFlutterBackground.enableBackgroundExecution();

you can try to get the app running in the background. You must call FlutterBackground.initialize() before calling FlutterBackground.enableBackgroundExecution().

With

awaitFlutterBackground.disableBackgroundExecution();

you can stop the background execution of the app. You must call FlutterBackground.initialize() before calling FlutterBackground.disableBackgroundExecution().

To check whether background execution is currently enabled, use

bool enabled =FlutterBackground.isBackgroundExecutionEnabled;

Example

The example is a TCP chat app: It can connect to a TCP server and send and receive messages. The user is notified about incoming messages by notifications created with the plugin flutter_local_notifications.

Using this plugin, the example app can maintain the TCP connection with the server, receiving messages and creating notifications for the user even when in the background.

Maintainer

Julian Aßmann

If you experience any problems with this package, please create an issue on Github. Pull requests are also very welcome.

About

A flutter plugin to keep apps running in the background via foreground services. Android only.

Topics

Resources

Stars

95 stars

Watchers

4 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

flutter_background

"Buy Me A Coffee"

A plugin to keep flutter apps running in the background. Currently only works with Android.

It achieves this functionality by running an Android foreground service in combination with a partial wake lock and disabling battery optimizations in order to keep the flutter isolate running.

Note: This plugin currently only works with Android. PRs for iOS are very welcome, although I am not sure if a similar effect can be achieved with iOS at all.

Getting started

To use this plugin, add flutter_background as a dependency in your pubspec.yaml file.

Android

Add the following permissions to the AndroidManifest.xml:

<manifestxmlns:android="http://schemas.android.com/apk/res/android"package="de.julianassmann.flutter_background_example">
<!-- Adapt to the foreground service type(s) desired, these are just examples -->
<uses-permissionandroid:name="android.permission.FOREGROUND_SERVICE_DATA_SYNC" />
<uses-permissionandroid:name="android.permission.FOREGROUND_SERVICE_SPECIAL_USE" />
<application>
...
<!-- Adapt to the foreground service type(s) desired, these are just examples -->
<serviceandroid:name="de.julianassmann.flutter_background.IsolateHolderService"android:exported="false"android:foregroundServiceType="dataSync|specialUse|..." />
</application>
</manifest>

Important: You must specify the appropriate foregroundServiceType for your use case. See the Android docs and the list of available service typs for more information on foreground service types.

Other platforms

Android is the only supported platform. There are currently no plans to extend support for other platforms, but feel free to change that by contributing to this plugin.

Usage

Import flutter_background.dart:

import'package:flutter_background/flutter_background.dart';

Initializing plugin and handling permissions

Before you can use this plugin, you need to initialize it by calling FlutterBackground.initialize(...):

final androidConfig =FlutterBackgroundAndroidConfig(
notificationTitle:"flutter_background example app",
notificationText:"Background notification for keeping the example app running in the background",
notificationImportance:AndroidNotificationImportance.normal,
notificationIcon:AndroidResource(name:'background_icon', defType:'drawable'), // Default is ic_launcher from folder mipmap
);
bool success =awaitFlutterBackground.initialize(androidConfig: androidConfig);

This ensures all permissions are granted and requests them if necessary. It also configures the foreground notification. The configuration above results in the foreground notification shown below when running FlutterBackground.enableBackgroundExecution().

The foreground notification created by the code above.

The arguments are:

  • notificationTitle: The title used for the foreground service notification.
  • notificationText: The body used for the foreground service notification.
  • notificationImportance: The importance of the foreground service notification.
  • notificationIcon: The icon used for the foreground service notification shown in the top left corner. This must be a drawable Android Resource (see here for more). E. g. if the icon with name "background_icon" is in the "drawable" resource folder, it should be of value `AndroidResource(name: 'background_icon', defType: 'drawable').
  • enableWifiLock: Indicates whether or not a WifiLock is acquired when background execution is started. This allows the application to keep the Wi-Fi radio awake, even when the user has not used the device in a while (e.g. for background network communications).

In this example, background_icon is a drawable resource in the drawable folders (see the example app). For more information check out the Android documentation for creating notification icons for more information how to create and store an icon.

In order to function correctly, this plugin needs a few permissions. FlutterBackground.initialize(...) will request permissions from the user if necessary. You can call initialize more than one time, so you can call initalize() every time before you call enableBackgroundExecution() (see below).

In order to notify the user about upcoming permission requests by the system, you need to know, whether or not the app already has these permissions. You can find out by calling

bool hasPermissions =awaitFlutterBackground.hasPermissions;

before calling FlutterBackground.initialize(...). If the app already has all necessary permissions, no permission requests will be displayed to the user.

Run app in background

With

bool success =awaitFlutterBackground.enableBackgroundExecution();

you can try to get the app running in the background. You must call FlutterBackground.initialize() before calling FlutterBackground.enableBackgroundExecution().

With

awaitFlutterBackground.disableBackgroundExecution();

you can stop the background execution of the app. You must call FlutterBackground.initialize() before calling FlutterBackground.disableBackgroundExecution().

To check whether background execution is currently enabled, use

bool enabled =FlutterBackground.isBackgroundExecutionEnabled;

Example

The example is a TCP chat app: It can connect to a TCP server and send and receive messages. The user is notified about incoming messages by notifications created with the plugin flutter_local_notifications.

Using this plugin, the example app can maintain the TCP connection with the server, receiving messages and creating notifications for the user even when in the background.

Maintainer

Julian Aßmann

If you experience any problems with this package, please create an issue on Github. Pull requests are also very welcome.

About

A flutter plugin to keep apps running in the background via foreground services. Android only.

Topics

Resources

Stars

95 stars

Watchers

4 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

flutter_background

"Buy Me A Coffee"

A plugin to keep flutter apps running in the background. Currently only works with Android.

It achieves this functionality by running an Android foreground service in combination with a partial wake lock and disabling battery optimizations in order to keep the flutter isolate running.

Note: This plugin currently only works with Android. PRs for iOS are very welcome, although I am not sure if a similar effect can be achieved with iOS at all.

Getting started

To use this plugin, add flutter_background as a dependency in your pubspec.yaml file.

Android

Add the following permissions to the AndroidManifest.xml:

<manifestxmlns:android="http://schemas.android.com/apk/res/android"package="de.julianassmann.flutter_background_example">
<!-- Adapt to the foreground service type(s) desired, these are just examples -->
<uses-permissionandroid:name="android.permission.FOREGROUND_SERVICE_DATA_SYNC" />
<uses-permissionandroid:name="android.permission.FOREGROUND_SERVICE_SPECIAL_USE" />
<application>
...
<!-- Adapt to the foreground service type(s) desired, these are just examples -->
<serviceandroid:name="de.julianassmann.flutter_background.IsolateHolderService"android:exported="false"android:foregroundServiceType="dataSync|specialUse|..." />
</application>
</manifest>

Important: You must specify the appropriate foregroundServiceType for your use case. See the Android docs and the list of available service typs for more information on foreground service types.

Other platforms

Android is the only supported platform. There are currently no plans to extend support for other platforms, but feel free to change that by contributing to this plugin.

Usage

Import flutter_background.dart:

import'package:flutter_background/flutter_background.dart';

Initializing plugin and handling permissions

Before you can use this plugin, you need to initialize it by calling FlutterBackground.initialize(...):

final androidConfig =FlutterBackgroundAndroidConfig(
notificationTitle:"flutter_background example app",
notificationText:"Background notification for keeping the example app running in the background",
notificationImportance:AndroidNotificationImportance.normal,
notificationIcon:AndroidResource(name:'background_icon', defType:'drawable'), // Default is ic_launcher from folder mipmap
);
bool success =awaitFlutterBackground.initialize(androidConfig: androidConfig);

This ensures all permissions are granted and requests them if necessary. It also configures the foreground notification. The configuration above results in the foreground notification shown below when running FlutterBackground.enableBackgroundExecution().

The foreground notification created by the code above.

The arguments are:

  • notificationTitle: The title used for the foreground service notification.
  • notificationText: The body used for the foreground service notification.
  • notificationImportance: The importance of the foreground service notification.
  • notificationIcon: The icon used for the foreground service notification shown in the top left corner. This must be a drawable Android Resource (see here for more). E. g. if the icon with name "background_icon" is in the "drawable" resource folder, it should be of value `AndroidResource(name: 'background_icon', defType: 'drawable').
  • enableWifiLock: Indicates whether or not a WifiLock is acquired when background execution is started. This allows the application to keep the Wi-Fi radio awake, even when the user has not used the device in a while (e.g. for background network communications).

In this example, background_icon is a drawable resource in the drawable folders (see the example app). For more information check out the Android documentation for creating notification icons for more information how to create and store an icon.

In order to function correctly, this plugin needs a few permissions. FlutterBackground.initialize(...) will request permissions from the user if necessary. You can call initialize more than one time, so you can call initalize() every time before you call enableBackgroundExecution() (see below).

In order to notify the user about upcoming permission requests by the system, you need to know, whether or not the app already has these permissions. You can find out by calling

bool hasPermissions =awaitFlutterBackground.hasPermissions;

before calling FlutterBackground.initialize(...). If the app already has all necessary permissions, no permission requests will be displayed to the user.

Run app in background

With

bool success =awaitFlutterBackground.enableBackgroundExecution();

you can try to get the app running in the background. You must call FlutterBackground.initialize() before calling FlutterBackground.enableBackgroundExecution().

With

awaitFlutterBackground.disableBackgroundExecution();

you can stop the background execution of the app. You must call FlutterBackground.initialize() before calling FlutterBackground.disableBackgroundExecution().

To check whether background execution is currently enabled, use

bool enabled =FlutterBackground.isBackgroundExecutionEnabled;

Example

The example is a TCP chat app: It can connect to a TCP server and send and receive messages. The user is notified about incoming messages by notifications created with the plugin flutter_local_notifications.

Using this plugin, the example app can maintain the TCP connection with the server, receiving messages and creating notifications for the user even when in the background.

Maintainer

Julian Aßmann

If you experience any problems with this package, please create an issue on Github. Pull requests are also very welcome.

About

A flutter plugin to keep apps running in the background via foreground services. Android only.

Topics

Resources

Stars

95 stars

Watchers

4 watching

Forks

Releases

Packages

Used by

Contributors

Languages