Add your description here
Project description
Flet Local Notifications
A comprehensive Flet extension that demonstrates how to manage and send notifications across multiple platforms. This project provides a simple yet powerful interface for requesting notification permissions and sending them using native APIs, with cross-platform support for Android, Windows, and Linux devices.
๐ Credits
Special thanks to @ITAkademi for the inspiration and guidance.
๐ Platform Support
| Platform | Status | Notes |
|---|---|---|
| Android | โ Fully Supported | Native API integration |
| iOS | โณ Planned | Cannot test currently |
| Windows | โ Fully Supported | Desktop notifications |
| macOS | โ Fully Supported | Desktop notifications |
| Linux | โ Fully Supported | Desktop notifications |
โจ Features
- ๐ Permission Management: Check and request notification permissions seamlessly
- ๐ฑ Notification Sending: Send custom notifications with title and text
- ๐ค Android Integration: Uses native Android NotificationManager via JNI
- ๐ฅ๏ธ Desktop Support: Cross-platform desktop notifications
- โฐ Scheduled Notifications: Plan notifications for future delivery
- ๐จ User-Friendly Interface: Simple and intuitive GUI built with Flet framework
- ๐ง Advanced Configuration: Extensive customization options
๐ Requirements
- Python 3.9+ - Modern Python features support
- Flet framework - Cross-platform UI framework
- Android device or emulator - For mobile testing
- Required permissions - Configured in
pyproject.tomlor inAndroidManifest.xml
๐ Installation
pip CLI
pip install flet-local-notifications
uv CLI
uv add flet-local-notifications
๐ป Usage
from flet_local_notifications import (
AndroidNotificationConfig,
DesktopNotificationConfig,
FletLocalNotification,
)
from flet import *
def main(page:Page):
noti = FletLocalNotification(page, lambda e: page.open(SnackBar(Text("Permission Acepted"))))
async def send(e):
await noti.send(
AndroidNotificationConfig(
title="Hello World",
message="Hello"
),
DesktopNotificationConfig(
title="Hello World",
message="Hello",
app_name="Flet-Test",
)
)
page.add(
Button(
text="Send",
on_click=lambda e: page.run_task(send, e) # <- use page.run_task() for run async functions if your main entry point is not async
)
)
app(target=main)
โ๏ธ Configuration
Pyproject.toml Setup
[tool.flet]
# Permissions For The App
permissions = [
"notification",
"access_notification_policy",
"post_notifications",
"wake_lock",
"foreground_service"
]
[tool.flet.android.permissions]
"android.permission.ACCESS_NOTIFICATION" = true
"android.permission.POST_NOTIFICATIONS" = true
"android.permission.WAKE_LOCK" = true
"android.permission.FOREGROUND_SERVICE" = true
"android.permission.INTERNET" = true
"android.permission.RECEIVE_BOOT_COMPLETED" = true
โ ๏ธ Important Notice
For Android SDK > 35, you must manually add permissions to AndroidManifest.xml in your build project or use the custom build template.
Example 1: Manual Permission Addition
Add this line to your AndroidManifest.xml:
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
Example 2: Custom Build Template
Toml Configuration:
[tool.flet.template]
url = "gh:MasterA5/flet-build-template"
ref = "0.28.3"
Terminal Command:
flet build apk --template "gh:MasterA5/flet-build-template" --template-ref "0.28.3"
Example 3: Automatically patch AndroidManifest.xml after build (recommended)
If you are using Android SDK > 35 and prefer not to manually edit the manifest or rely on a custom build template, you can use the provided helper script.
๐ป Terminal
flet build apk
python scripts/fix_manifest.py
๐ฏ Application Interface
The application provides comprehensive functionality:
- ๐ Check Notification Permission: Verifies if the app has notification permissions
- ๐ Request Notification Permission: Requests notification permissions from the user
- ๐ค Send Notification: Sends test notifications (enabled when permissions are granted)
- โฐ Schedule Notifications: Plan notifications for specific times
- ๐จ Customize Notifications: Advanced styling and configuration options
๐ Project Structure
flet-local-notifications/
โโโ src/
โ โโโ flet_local_notifications/
โ โ โโโ __init__.py # Package initialization
โ โ โโโ core.py # Core notification logic
โ โ โโโ flet_local_notifications.py # Main notification class
โ โ โโโ android/ # Android-specific implementations
โ โ โ โโโ AndroidNotification.py
โ โ โ โโโ android_types.py
โ โ โโโ desktop/ # Desktop-specific implementations
โ โ โ โโโ DesktopNotification.py
โ โ โ โโโ desktop_types.py
โ โ โโโ schedule/ # Scheduling functionality
โ โ โโโ schedule_types.py
โ โโโ main.py # Main application entry point
โโโ pyproject.toml # Project configuration and dependencies
โโโ README.md # This file
โโโ README_MEJORADO.md # Enhanced documentation
โโโ LICENSE # MIT License
โโโ .gitignore # Git ignore file
๐ง Key Components
FletLocalNotification Class
The main class that handles cross-platform notification functionality:
- Platform Detection: Automatically detects Android vs Desktop environments
- Permission Handling: Manages notification permissions across platforms
- Unified API: Single interface for multiple platforms
- Async Support: Full asynchronous implementation
AndroidNotification Class
Located in flet_local_notifications/android/AndroidNotification.py:
- Native Integration: Uses Android NotificationManager via JNI
- Channel Management: Creates and manages notification channels
- Advanced Features: Progress bars, buttons, images, and more
- Permission Requests: Handles Android runtime permissions
DesktopNotification Class
Located in flet_local_notifications/desktop/DesktopNotification.py:
- Cross-Platform: Windows, macOS, and Linux support
- Native Notifications: Uses system notification services
- Interactive Elements: Buttons, reply fields, and callbacks
- Custom Styling: Icons, sounds, and attachments
๐ฆ Dependencies
Core Dependencies
flet==0.28.3: Main UI frameworkdesktop-notifier: Desktop notification managementandroid-notify==1.60.8.dev0: Android notification support
๐ Android Permissions
The app requests the following permissions (configured in pyproject.toml):
| Permission | Purpose |
|---|---|
notification |
Basic notification access |
access_notification_policy |
Access to notification policies |
post_notifications |
Ability to post notifications |
wake_lock |
Keep device awake for notifications |
foreground_service |
Run as foreground service |
INTERNET |
Network access (if needed, be deafult in a flet build template) |
RECEIVE_BOOT_COMPLETED |
Auto-start on boot |
๐ Quick Start Examples
๐ฑ | ๐ป Basic Notification
import flet as ft
from flet_local_notifications import FletLocalNotification, AndroidNotificationConfig, DesktopNotificationConfig
async def main(page: ft.Page):
notifier = FletLocalNotification(page)
android_config = AndroidNotificationConfig(
title="Hello World!",
message="This is a test notification"
)
desktop_config = DesktopNotificationConfig(
title="Hello World!",
message="This is a test notification"
)
await notifier.send(android_config, desktop_config)
ft.app(target=main)
๐ฑ | ๐ป -> โฐ Scheduled Notification
from datetime import datetime, timedelta
from flet_local_notifications import ScheduleNotificationConfig
async def main(page: ft.Page):
notifier = FletLocalNotification(page)
# Schedule for 5 minutes from now
schedule_config = ScheduleNotificationConfig(
notify_time=datetime.now() + timedelta(minutes=5)
)
# ... notification configs ...
await notifier.schedule(schedule_config, android_config, desktop_config)
๐ฎ Future Improvements
- iOS Support: Add iOS notification capabilities
- Notification Groups: Implement notification categories
- Advanced Actions: Enhanced notification interactions
- Rich Media: Audio, video, and interactive content
- Cloud Sync: Cross-device notification synchronization
- Analytics: Notification engagement tracking
๐ Notes
- Permission Requirements: Notification functionality requires proper permissions to be granted by the user
- Native APIs: The app uses native platform APIs for reliable notification delivery
- Platform Differences: Some features may vary between platforms due to OS limitations
- Testing: Always test on target platforms before deployment
๐ค Contributing
We welcome contributions! Please follow these steps:
- Fork the repository
- Create a feature branch (
git checkout -b feature/AmazingFeature) - Commit your changes (
git commit -m 'Add some AmazingFeature') - Push to the branch (
git push origin feature/AmazingFeature) - Open a Pull Request
Development Guidelines
- Follow PEP 8 style guidelines
- Add type hints for new functions
- Include docstrings for public APIs
- Add tests for new features
- Update documentation as needed
๐ License
This project is licensed under the MIT License - see the LICENSE file for details.
๐จโ๐ป Author
MasterA5 - Creator and Maintainer - GitHub Profile
๐ Acknowledgments
- @ITAkademi - For the inspiration and guidance
- Flet - The amazing framework that makes this possible
- android_notify - Android notification support
- desktop-notifier - Desktop notification support
๐ Support
If you encounter any issues or have questions:
- Check the Issues page
- Create a new issue with detailed information
- Include your platform, Python version, and minimal reproduction code
- Provide screenshots or error messages when applicable
โญ Star this repository to stay updated with new features and improvements!
๐ข Share this project with other Flet developers who might find it useful!
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file flet_local_notifications-1.0.0.tar.gz.
File metadata
- Download URL: flet_local_notifications-1.0.0.tar.gz
- Upload date:
- Size: 15.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1fa1bb2efd4f233b5a8d5cca451a93c241f4d569f393864ed250202ede8d28a4
|
|
| MD5 |
f0620ee0f93f95e4eff7834558a79879
|
|
| BLAKE2b-256 |
325f231b98db02604143a84d384573d24b885523693f8ec4036e0b9a1c29fea8
|
File details
Details for the file flet_local_notifications-1.0.0-py3-none-any.whl.
File metadata
- Download URL: flet_local_notifications-1.0.0-py3-none-any.whl
- Upload date:
- Size: 15.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
557bf317e6c9cd92f5521647c32269e790646398d83321f2eb94ecd4884c15f8
|
|
| MD5 |
932edc3c2420197218a1e340efb9224f
|
|
| BLAKE2b-256 |
6446a03def4f7f66c7450b98b81ec34c6e230d73ef091ff2d1dbc0744499f6b5
|