跳到主要内容

可取消控件

一个可以通过在指定的 dismiss_direction 方向上拖动来取消的控件。当在指定方向上拖动或快速滑动时,其内容会平滑地滑出视图。

示例

在线示例

可取消的列表视图条目

import flet as ft


def main(page):
def handle_dlg_action_clicked(e):
page.close(dlg)
dlg.data.confirm_dismiss(e.control.data)

dlg = ft.AlertDialog(
modal=True,
title=ft.Text("Please confirm"),
content=ft.Text("Do you really want to delete this item?"),
actions=[
ft.TextButton("Yes", data=True, on_click=handle_dlg_action_clicked),
ft.TextButton("No", data=False, on_click=handle_dlg_action_clicked),
],
actions_alignment=ft.MainAxisAlignment.CENTER,
)

def handle_confirm_dismiss(e: ft.DismissibleDismissEvent):
if e.direction == ft.DismissDirection.END_TO_START: # right-to-left slide
# save current dismissible to dialog's data, for confirmation in handle_dlg_action_clicked
dlg.data = e.control
page.open(dlg)
else: # left-to-right slide
e.control.confirm_dismiss(True)

def handle_dismiss(e):
e.control.parent.controls.remove(e.control)
page.update()

def handle_update(e: ft.DismissibleUpdateEvent):
print(
f"Update - direction: {e.direction}, progress: {e.progress}, reached: {e.reached}, previous_reached: {e.previous_reached}"
)

page.add(
ft.ListView(
expand=True,
controls=[
ft.Dismissible(
content=ft.ListTile(title=ft.Text(f"Item {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)
],
)
)


ft.app(main)

属性

background

一个控件,堆叠在 content 之后。

如果 secondary_background 也被指定,那么这个控件只会在内容被向下或向右拖动时出现。

content

由可取消控件包含的子控件。

cross_axis_end_offset

指定控件被取消后沿主轴的结束偏移量。

如果给出非零值,则控件将沿着交叉方向移动,具体取决于该值是正值还是负值。

dismiss_direction

控件可以被取消的方向。 类型值为DismissDirection.

dismiss_thresholds

控件被认为已取消之前必须拖动的偏移阈值。

例如:阈值为 0.4(默认值)意味着项目必须至少被拖动 40% 才能被认为已取消。

它以字典的形式指定,其中键是 DismissDirection 类型,值是阈值(介于 0.01.0 之间的小数值):

ft.Dismissible(
# ...
dismiss_thresholds={
ft.DismissDirection.VERTICAL: 0.1,
ft.DismissDirection.START_TO_END: 0.7
}
)

movement_duration

控件取消或未取消时返回原位的持续时间。

resize_duration

控件在 on_dismiss 被调用之前收缩的时间。

secondary_background

一个控件,堆叠在 content 之后,当 content 被向上或向左拖动时会显示。只有在 background 也被指定时才可以指定此属性。

事件

on_confirm_dismiss

在取消操作即将完成时给应用程序一个确认或否决的机会。在解决此待定的取消操作之前,控件不能再次被拖动。

要解决待定的取消操作,请调用 confirm_dismiss(dismiss) 方法,并传递一个表示决定的布尔值。如果为 True,则控件将被取消,否则将返回到原始位置。

请参见页面顶部的示例以了解可能的实现方式。

on_dismiss

在控件被取消后触发,完成调整大小之后。

on_resize

在控件大小变化时触发,例如在取消之前收缩时。

on_update

在控件被拖动时触发。

方法

confirm_dismiss(dismiss: bool)

解决待定的取消操作。在处理 on_confirm_dismiss 事件时调用。