flet-notifications
Cross-platform local notifications for Flet apps.
A 1:1 wrapping of the official flutter_local_notifications Flutter plugin, in the same architecture as flet-ads. One uv add flet-notifications covers Android, iOS, macOS, Windows, Linux and Web — no Python dependencies beyond flet.
Test it without an account
Every release builds the example app for every platform. Sideload any of them and every button is live:
| Variant | Download | Notes |
|---|---|---|
| 📱 ARM64 (most phones/TVs) | app-arm64-v8a-release.apk | Modern 64-bit Android devices — grab this one unless you know otherwise |
| 📱 ARMv7 (older phones/TV boxes) | app-armeabi-v7a-release.apk | Legacy 32-bit Android devices |
| 💻 x86_64 (emulators/ChromeOS) | app-x86_64-release.apk | Android emulators & Chromebooks |
| 🖥️ Windows | flet-notifications-example-windows.zip | Portable zip |
| 🍎 macOS | flet-notifications-example-macos.dmg | Disk image |
| 🐧 Linux | tar.gz · deb · rpm | Bundle or packages |
| 🌐 Web | flet-notifications-example-web.tar.gz | Static bundle |
Plain flet run launches the prebuilt client without the extension's Dart half — notifications need a built app (an artifact above, or flet build <platform>).
Platform Support
| Platform | Show | Schedule | Actions & callbacks | Channels | Progress | Notes |
|---|---|---|---|---|---|---|
| iOS | ✅ | ✅ | ✅ | — | — | 13+; attachments, interruption levels |
| Android | ✅ | ✅ | ✅ | ✅ | ✅ | 7.0+ (API 24); Android TV works |
| macOS | ✅ | ✅ | ✅ | — | — | 10.15+ |
| Windows | ✅ | one-shot | ✅ | — | ✅ | 10+; cancel/queries need MSIX identity |
| Linux | ✅ | — | ✅ | — | — | D-Bus server; capabilities vary |
| Web | ✅ | — | Chrome/Edge only | — | — | Notifications API; gesture-gated permissions |
Usage
uv add flet-notifications
import flet as ft
from flet_notifications import LocalNotifications
def main(page: ft.Page):
notifications = LocalNotifications()
async def on_tap(e):
print("tapped:", e.payload)
notifications.on_tap = on_tap
if await notifications.request_permissions():
await notifications.show(id=1, title="Hello", body="Hello!")
ft.run(main)
Controls
| Control | Base | Purpose |
|---|---|---|
LocalNotifications |
ft.Service |
Show/schedule/cancel, permissions, probes, channels; construct once, it registers itself |
Event handlers
notifications.on_tap = on_tap # typed: NotificationEvent
notifications.on_action = on_action # typed: e.action_id, e.input, e.data
notifications.on_dismissed = handler # typed
Typed handlers must use ft.EventHandler[NotificationEvent], not ft.ControlEventHandler[NotificationEvent] — ControlEventHandler[X] double-wraps X in Event[...], so e.payload raises AttributeError. NotificationEvent carries id, action_id, payload, input, data and response_type.
Taps that arrive while the app wasn't running are replayed on the next start (Android background taps, iOS/macOS cold-start launches).
Configuration
Scheduling on Android needs permissions in the app's pyproject.toml:
[tool.flet.android.permission]
RECEIVE_BOOT_COMPLETED = true # restore alarms after reboot
SCHEDULE_EXACT_ALARM = true # exact schedule modes
The scheduled-notification receivers are <application> children, which [tool.flet.android.*] cannot declare — the flet-notifications-patch console script injects them (plus the core-library-desugaring Gradle flags the plugin needs), idempotently:
uv run flet build apk --yes --project myapp --org com.example -v
uv run flet-notifications-patch --project-root build/flutter
cd build/flutter/android && ./gradlew assembleRelease -Psplit-per-abi=true
Configuration reference
Types: NotificationAction/NotificationActionInput (buttons, inline reply) · BigTextStyle/BigPictureStyle/InboxStyle/MessagingStyle (+ Person, Message, AndroidIcon) · NotificationChannel (importance, sound, vibration, badge, DND, lights) · NotificationOptions with AndroidOptions/DarwinOptions/LinuxOptions/WindowsOptions/WebOptions (the full per-platform detail surface) · enums RepeatInterval, DateTimeComponents, AndroidScheduleMode, Importance, GroupAlertBehavior, InterruptionLevel.
Calls: show · schedule · periodically_show · cancel/cancel_all/cancel_pending · request_permissions · are_notifications_enabled · can_schedule_exact_notifications/request_exact_alarm_permission · request_full_screen_intent_permission · has/request_notification_policy_access · open_app_notification_settings · get_pending_notifications/get_active_notifications/get_notification_app_launch_details · create/delete/get_notification_channels (+ groups) · start/stop_foreground_service.
Errors: NotificationError with a stable code — unsupported_platform, init_failed, show_failed, schedule_failed, invalid_action, invalid_schedule, invalid_style, invalid_channel, invalid_option, invalid_service_id, channel_failed, foreground_service_failed, query_failed, permission_failed, unknown_method.
Limitations
- Linux/Web have no OS scheduler; Windows schedules one-shot only.
- Android channel sound/vibration are immutable after creation; aggressive OEM skins may drop alarms after force-stop; Samsung caps ~500 alarms.
- Interruptions beyond
passiveon Apple need Xcode capabilities. - Not wrapped (upstream niche): HTML-format style flags,
MediaStyle, actionsemanticAction/invisible/contextual, CarPlay, message data MIME/URI, Linux custom hints. - iOS IPAs need Apple signing and are built owner-side; CI builds every other platform.
Example
examples/flet_notifications_example — every API on one screen with a timestamped event log, built for Windows, macOS, Linux, Android and Web on every release.
License
MIT
Metadata
Release files for flet-notifications 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| flet_notifications-0.1.0.tar.gz | 51.8 kB | With provenance | Details for flet_notifications-0.1.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| flet_notifications-0.1.0-py3-none-any.whl | Python 3 | none | any | Details for flet_notifications-0.1.0-py3-none-any.whl |
Total release size: 95.1 kB
Release files / flet_notifications-0.1.0.tar.gz
| Download URL | flet_notifications-0.1.0.tar.gz |
|---|---|
| Size | 51.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
d87b251b689b39abf7c0aba0c7e4f3203530b886bcc21e856482551e4f12f44a
|
|
BLAKE2b-256 checksum How to use checksums |
eda4d1ef882260279fb6525421bd2d70c69fb456112d2d3d951911dc5bbe52fa
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 11, 2026.
Transparency logRelease files / flet_notifications-0.1.0-py3-none-any.whl
| Download URL | flet_notifications-0.1.0-py3-none-any.whl |
|---|---|
| Size | 43.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
62997e0faf29e812aec5aa2523e54debedf8add45aeecf011f1b8e33090ba1bf
|
|
BLAKE2b-256 checksum How to use checksums |
0c77574ff557f7ad2c64395cfc2a1eb4bd9d8645ca769692c5333b0ef2a61ca1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 11, 2026.
Transparency logSecurity for flet-notifications 0.1.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
Both files in this release have been uploaded with provenance metadata.
Attestation for flet_notifications-0.1.0.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 11, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.