在 flet 中,一个按钮的 `on_click` 仅接受单个可调用对象;但可通过 lambda 匿名函数将多个操作组合执行,例如先调用业务逻辑函数,再跳转路由。
在 Flet 开发中,初学者常遇到这样一个需求:点击一个按钮时,既要执行某项逻辑(如生成并发送 OTP),又要导航到新页面。但 ElevatedButton 的 on_click 参数只支持一个回调函数,直接写两个函数(如 btn_clicked, page.go('/home'))会导致语法错误——正如你遇到的 SyntaxError: positional argument follows keyword argument。
✅ 正确做法是:使用 lambda 将多个操作封装为一个可调用表达式。Flet 支持在 lambda 中用逗号分隔多个语句(注意:必须用括号包裹,形成元组,以确保语法合法且按序执行):
on_click=lambda e: (btn_clicked(e), page.go("/home"))⚠️ 关键细节说明:
def handle_signup_and_navigate(e):
btn_clicked(e) # 发送 OTP 等操作
page.go("/home") # 跳转页面
# 然后绑定:
ElevatedButton(
text="Send OTP & Continue",
on_click=handle_signup_and_navigate
)? 额外修正建议(来自你的原始代码):
o.rest import Client;? 总结:Flet 不限制“一个按钮只能做一件事”,而是通过 Python 表达能力(lambda 或普通函数)灵活组合行为。掌握这一模式,你就能轻松实现「点击→执行→跳转→刷新→提示」等多步交互,这是构建完整用户流程的基础能力。