如何在移动端Flet中实现Session Storage?求Android适配示例
Flet 中实现 Session Storage(适配 Android 平台)
Flet 的 Session Storage 用于在应用会话周期内存储键值对数据——在 Android 平台上,数据仅在应用进程存活时保留,关闭应用后自动清除,适合存储临时会话信息(如登录状态、临时用户数据)。以下是完整的实现示例及细节说明:
完整示例代码
这个示例实现了一个简单的登录-主页流程,演示 Session Storage 的写入、读取和清除操作:
import flet as ft def login_clicked(e): username_input = e.page.get_control("username") password_input = e.page.get_control("password") if username_input.value and password_input.value: # 写入 Session Storage e.page.session.set("username", username_input.value) e.page.session.set("is_logged_in", "true") # 跳转到主页 e.page.go("/home") else: e.page.snack_bar = ft.SnackBar(ft.Text("请输入完整的用户名和密码")) e.page.snack_bar.open = True e.page.update() def home_page(page: ft.Page): # 读取 Session Storage 中的数据 username = page.session.get("username") is_logged_in = page.session.get("is_logged_in") == "true" # 未登录则跳转回登录页 if not is_logged_in: page.go("/login") return def logout_clicked(e): # 清除指定键的 Session 数据 page.session.remove("username") page.session.remove("is_logged_in") # 也可以用 page.session.clear() 清空所有 Session 数据 page.go("/login") return ft.Column( controls=[ ft.Text(f"欢迎回来,{username}!", size=24), ft.ElevatedButton("退出登录", on_click=logout_clicked, width=150) ], alignment=ft.MainAxisAlignment.CENTER, horizontal_alignment=ft.CrossAxisAlignment.CENTER ) def main(page: ft.Page): page.title = "Session Storage 示例" page.window.width = 350 page.window.height = 600 def route_change(route): page.views.clear() if page.route == "/login": page.views.append( ft.View( "/login", [ ft.Text("用户登录", size=24, weight=ft.FontWeight.BOLD), ft.TextField(label="用户名", key="username", width=300), ft.TextField(label="密码", password=True, key="password", width=300), ft.ElevatedButton("登录", on_click=login_clicked, width=300, margin=ft.Margin(top=20)) ], horizontal_alignment=ft.CrossAxisAlignment.CENTER, vertical_alignment=ft.MainAxisAlignment.CENTER ) ) elif page.route == "/home": page.views.append( ft.View( "/home", [home_page(page)], appbar=ft.AppBar(title=ft.Text("主页"), center_title=True) ) ) page.update() page.on_route_change = route_change page.go("/login") if __name__ == "__main__": ft.app(target=main)
核心操作说明
1. 写入 Session Storage
使用 page.session.set(key, value) 方法存储数据,key 和 value 都必须是字符串类型:
page.session.set("username", "张三") page.session.set("is_logged_in", "true")
2. 读取 Session Storage
使用 page.session.get(key) 方法读取数据,若键不存在则返回 None:
username = page.session.get("username") is_logged_in = page.session.get("is_logged_in") == "true"
3. 清除数据
- 清除单个键:
page.session.remove(key) - 清空所有 Session 数据:
page.session.clear()
Android 平台适配注意事项
- 数据生命周期:Android 上的 Session Storage 数据存储在应用临时内存区域,仅在应用进程存活时有效——用户关闭应用(进程被系统杀死)后,数据会自动清除,符合会话级存储的特性。
- 权限无需额外配置:Flet 框架已内置 Session Storage 的实现,打包 Android 应用时不需要申请任何存储权限。
- 持久化存储区分:如果需要长期保存数据(如记住登录状态),请使用 Flet 的
Local Storage(page.local_storage),它的数据会持久化到设备本地,应用重启后仍可读取。
内容的提问来源于stack exchange,提问作者Answere
相关产品推荐
相关产品推荐

