跳到主要内容

可消除控件 Dismissible

一个可以通过拖动指定的dismiss_direction来消除的控件。当以指定的dismiss_direction拖动或甩动时,其内容会平滑地滑出视图。

示例

可消除的 ListView 块

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("Please confirm"),
content=ft.Text("Do you really want to delete this item?"),
actions=[
ft.TextButton("Yes", on_click=close_yes_dlg),
ft.TextButton("No", 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: # right-to-left slide
# save current dismissible to dialog's data
dlg.data = e.control
page.show_dialog(dlg)
else: # left-to-right slide
e.control.confirm_dismiss(True)

def handle_dismiss(e):
lv.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(
lv := ft.ListView(
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)
],
expand=True,
)
)


ft.app(main)

属性

background

一个在content后面层叠的控件。

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

content

包含在可消除控件中的子控件。

cross_axis_end_offset

指定卡片在被解除时的主轴末尾偏移量。

如果给出了非零值,则小部件以与偏移正负相对应的交叉方向移动。

direction

控件可以被解除的方向。使用DismissDirection枚举指定:

  • DismissDirection.UP
  • DismissDirection.DOWN
  • DismissDirection.LEFT
  • DismissDirection.RIGHT
  • DismissDirection.START_TO_END
  • DismissDirection.END_TO_START

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

在此控件被拖动后触发。

Methods

confirm_dismiss(dismiss: bool)

解决待处理的解散请求。在处理 on_confirm_dismiss 事件时调用该方法。