PubSub
如果您使用 Flet 构建聊天应用程序,需要某种方式将用户消息传递给所有会话。当用户发送消息时,它应该被广播到所有其他应用程序会话并显示在他们的页面上。
Flet 提供了一个简单的内置 PubSub 机制,用于异步通信 между页面会话。
Flet PubSub 允许广播消息到所有应用程序会话或仅发送到特定“主题”(或“频道”)的订阅者。
典型的 PubSub 使用场景是:
- 在应用程序会话开始时subscribe到广播消息或subscribe to a topic。
- 在某些事件上,例如“发送”按钮点击时,send广播消息或send to a topic。
- 在某些事件上,例如“离开”按钮点击时,unsubscribe从广播消息或unsubscribe from a topic。
- 在
page.on_close
上unsubscribe从所有内容。
这是一个简单的聊天应用程序示例:
import flet as ft
def main(page: ft.Page):
page.title = "Flet 聊天"
# 订阅广播消息
def on_message(msg):
messages.controls.append(ft.Text(msg))
page.update()
page.pubsub.subscribe(on_message)
def send_click(e):
page.pubsub.send_all(f"{user.value}: {message.value}")
# 清理表单
message.value = ""
page.update()
messages = ft.Column()
user = ft.TextField(hint_text="您的名称", width=150)
message = ft.TextField(hint_text="您的消息...", expand=True) # 填充所有空间
send = ft.ElevatedButton("发送", on_click=send_click)
page.add(messages, ft.Row(controls=[user, message, send]))
ft.app(target=main, view=ft.AppView.WEB_BROWSER)