如果您使用 Flet 构建聊天应用程序,您需要以某种方式在会话之间传递用户消息。当用户发送消息时,它应该被广播到所有其他应用程序会话并显示在他们的页面上。

Flet 为页面会话之间的异步通信提供了一个简单的内置 PubSub 机制。

Flet PubSub 允许向所有应用会话广播消息或仅向特定“主题”(或“频道”)订阅者发送消息。

典型的 PubSub 用法是:

  • 订阅广播消息或订阅应用会话开始时的主题。
  • 发送广播消息或发送到某个事件的主题,例如单击“发送”按钮。
  • 取消订阅广播消息或取消订阅某个事件的主题,例如单击“离开”按钮。
  • 取消订阅上的所有内容page.on_close。

这是一个简单的聊天应用程序的示例:

import flet
from flet import Column, ElevatedButton, Page, Row, Text, TextField

def main(page: Page):
    page.title = "Flet Chat"

    # subscribe to broadcast messages
    def on_message(msg):
        messages.controls.append(Text(msg))
        page.update()

    page.pubsub.subscribe(on_message)

    def send_click(e):
        page.pubsub.send_all(f"{user.value}: {message.value}")
        # clean up the form
        message.value = ""
        page.update()

    messages = Column()
    user = TextField(hint_text="Your name", width=150)
    message = TextField(hint_text="Your message...", expand=True)  # fill all the space
    send = ElevatedButton("Send", on_click=send_click)
    page.add(messages, Row(controls=[user, message, send]))

flet.app(target=main, view=flet.WEB_BROWSER)