You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在移动端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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 13:41:09