可取消控件
一个可以通过在指定的 dismiss_direction
方向上拖动来取消的控件。当在指定方向上拖动或快速滑动时,其内容会平滑地滑出视图。
示例
可取消的列表视图条目
- Python
import flet as ft
def main(page):
page.window_height, page.window_width = 500, 400
def close_yes_dlg(e):
page.close_dialog()
dlg.data.confirm_dismiss(True)
def close_no_dlg(e):
page.close_dialog()
dlg.data.confirm_dismiss(False)
dlg = ft.AlertDialog(
modal=True,
title=ft.Text("请确认"),
content=ft.Text("您确定要删除此项目吗?"),
actions=[
ft.TextButton("是", on_click=close_yes_dlg),
ft.TextButton("否", on_click=close_no_dlg),
],
actions_alignment=ft.MainAxisAlignment.CENTER,
)
def handle_confirm_dismiss(e: ft.DismissibleDismissEvent):
if e.direction == ft.DismissDirection.END_TO_START: # 右滑删除
# 保存当前的可取消控件到对话框的数据中
dlg.data = e.control
page.show_dialog(dlg)
else: # 左滑删除
e.control.confirm_dismiss(True)
def handle_dismiss(e):
lv.controls.remove(e.control)
page.update()
def handle_update(e: ft.DismissibleUpdateEvent):
print(f"更新 - 方向: {e.direction}, 进度: {e.progress}, 达到: {e.reached}, 之前达到: {e.previous_reached}")
page.add(
lv := ft.ListView(
controls=[
ft.Dismissible(
content=ft.ListTile(title=ft.Text(f"项目 {i}")),
dismiss_direction=ft.DismissDirection.HORIZONTAL,
background=ft.Container(bgcolor=ft.colors.GREEN),
secondary_background=ft.Container(bgcolor=ft.colors.RED),
on_dismiss=handle_dismiss,
on_update=handle_update,
on_confirm_dismiss=handle_confirm_dismiss,
dismiss_thresholds={
ft.DismissDirection.END_TO_START: 0.2,
ft.DismissDirection.START_TO_END: 0.2,
},
)
for i in range(10)
],
expand=True,
)
)
ft.app(main)
属性
background
一个控件,堆叠在 content
之后。
如果 secondary_background
也被指定,那么这个控件只会在内容被向下或向右拖动时出现。
content
由可取消控件包含的子控件。
cross_axis_end_offset
指定控件被取消后沿主轴的结束偏移量。
如果给出非零值,则控件将沿着交叉方向移动,具体取决于该值是正值还是负值。