随着跨平台应用开发需求的持续升温,Python 开发者越来越渴望能够用单一语言编写同时运行于 Web、桌面和移动端的应用。Flet 框架作为近年来崛起的新星,以其简洁的 API 和强大的 Flutter 底层能力,迅速获得了社区关注。近日,Flet 官方团队宣布了一项重要更新:Flet 应用现已支持原生 Android 通知推送。这意味着开发者无需编写一行 Java/Kotlin 代码,仅凭 Python 即可向 Android 设备发送本地或远程通知。这一功能将大大降低移动端通知功能的开发门槛,为 Python 生态在移动领域的应用注入新活力。

打破平台壁垒:Flet 的“通知魔法”

Flet 本质上是一个基于 Google Flutter 的 Python 封装框架,它允许开发者用 Python 描述 UI 和业务逻辑,最终生成原生的 Flutter 应用。在移动端,Flet 应用编译为 Android APK 或 iOS IPA。此前,Flet 已支持基本的 UI 组件和事件处理,但通知功能一直依赖平台原生代码或第三方插件。此次更新通过内置的 flet_notification 模块,将 Android 通知的创建、调度和交互完全融入 Python 语法。

核心实现:几步完成通知推送

在最新的 Flet 0.24 版本中,开发者只需导入 flet_notification 并调用 send_notification 函数,即可在 Android 设备上弹出系统级通知。以下是一个最简单的示例:

import flet as ft
from flet_notification import send_notification

def main(page: ft.Page):
    def on_click(e):
        send_notification(
            title="任务提醒",
            body="您的 Python 脚本已运行完毕!",
            icon="android_icon"  # 可选,支持自定义图标
        )
    page.add(ft.ElevatedButton("发送通知", on_click=on_click))

ft.app(target=main)

该代码在 Android 真机或模拟器上运行后,点击按钮即可看到系统通知栏弹出提示。通知支持标题、正文、小图标、大图标、点击后跳转页面、分组、进度条等丰富属性。对于需要定时通知的场景,Flet 还提供了 schedule_notification 方法,配合 Python 的 datetime 模块,可以精确到秒级调度。

技术要点:权限、通道与后台运行

Android 通知在 Android 8.0(API 26)以后引入了通知通道(Notification Channel)的概念。Flet 的封装自动处理了通道创建,默认生成一个名为“Flet 默认”的通道。开发者也可以通过 create_channel 自定义通道名称、重要性等级(IMPORTANCE_HIGH 等),从而控制声音、震动、锁屏显示等行为。

此外,Android 13 要求运行时权限 POST_NOTIFICATIONS。Flet 在启动应用时自动请求该权限(若在 Android 13 及以上设备),无需开发者额外处理。对于后台服务发通知的场景,Flet 支持将通知发送逻辑绑定到应用的生命周期事件中,但需注意 Android 的后台限制——Flet 建议使用 WorkManager 插件(flet_workmanager)实现可靠的定期通知。

实际用例:从提醒到互动

除了基本的文本通知,Flet 支持在通知中添加操作按钮(Action)。例如,用户可以在通知栏直接回复消息或暂停提醒,无需打开应用。代码如下:

send_notification(
    title="新消息",
    body="来自张三的问候",
    actions=[
        {"action": "reply", "title": "快速回复"},
        {"action": "mark_read", "title": "标记已读"}
    ]
)

这些按钮点击后,会触发 Flet 应用中的事件回调,实现真正的跨组件交互。这对于聊天应用、任务管理、即时通讯等场景极具价值。

常见问题与性能考量

虽然 Flet 的通知功能非常强大,但开发者仍需注意以下几点:

  1. 仅限 Android:目前 flet_notification 仅支持 Android 平台。iOS 通知因 Apple 推送服务(APNs)的复杂性,尚未原生支持,Flet 团队表示正在开发中,预计 2025 年 Q1 提供预览。
  2. 依赖 Google Play Services:部分高级功能(如基于时间的精确调度)可能需要设备支持 Google Play Services,建议在发布前对华为、小米等无 GMS 设备进行单独测试。
  3. 应用生命周期:Flet 应用在后台被系统杀死后,已调度的通知可能无法触发。需要结合前台服务或 flet_workmanager 来保证可靠性。

生态意义:Python 移动开发再进一步

Flet 创始人曾在采访中表示:“让 Python 开发者能够用最少的代码构建带通知功能的生产级应用,是我们推动 Python 进入移动开发主流的使命。” 此次通知功能的推出,填补了 Flet 在关键系统集成能力上的空白。结合 Flet 已有的文件选择、相机、传感器等插件,Python 开发者现在可以几乎不依赖其他语言,完成大多数常见移动应用的开发。

社区中已有开发者利用这一功能构建了极简版“番茄钟”、待办事项列表、股票价格监控器等应用,并成功上架 Google Play。随着更多原生 API 的封装,Flet 有望成为 Python 在跨平台领域的新一代标杆工具。

结语

从 Web 到桌面再到移动端,Flet 逐步兑现了“用 Python 写一切”的承诺。Android 通知功能的原生支持,不仅让开发更高效,也让用户体验更接近原生应用。无论您是刚接触移动开发的 Python 爱好者,还是寻求快速原型验证的专业团队,都可以立即尝试在您的 Flet 项目中加入通知功能,感受一行代码唤醒手机的魔力。未来,Flet 还将带来 iOS 通知、动态岛适配等特性,值得持续关注。