ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Flet FloatingActionButton(悬浮操作按钮)完全指南:从页面挂载到源码实现

Flet FloatingActionButton(悬浮操作按钮)完全指南:从页面挂载到源码实现 Flet FloatingActionButton悬浮操作按钮完全指南从页面挂载到源码实现【免费下载链接】fletBuild realtime web, mobile and desktop apps in Python only. No frontend experience required.项目地址: https://gitcode.com/gh_mirrors/fl/fletFloatingActionButton简称 FAB是 Material Design 中用于承载页面主操作的悬浮圆形按钮在 Flet 中既可作为全局按钮挂载到page.floating_action_button也可作为普通控件嵌入任意布局。本文以 官方控件文档 为骨架结合 Python 控件源码 与 Flutter 渲染实现系统讲解其属性、位置、主题定制与事件机制读完后你将能够独立实现点击 FAB 触发主操作的完整交互并掌握其底层工作原理。认识 FloatingActionButton从源码看FloatingActionButton是一个典型的 Material 控件定义于 floating_action_button.pycontrol(FloatingActionButton) class FloatingActionButton(LayoutControl, ActionControl):它同时继承了两个基类因此天然具备两类能力LayoutControl参与页面布局拥有尺寸width、height、aspect_ratio、绝对定位left、top、right、bottom、2D 变换rotate、scale、offset、flip以及animate_*系列隐式动画属性定义见 layout_control.py。这意味着 FAB 不仅可以悬浮还能被旋转、缩放、位移甚至做入场动画。ActionControl支持action属性可在客户端浏览器/移动端于用户点击手势内部直接执行打开文件选择器、写入剪贴板、分享、打开新标签页等操作避免一次 Python 往返耗时导致浏览器权限失效详见 action_control.py。此外FAB 的官方定位是悬浮于内容之上、突出页面主操作因此最典型的用法是挂载到页面根视图page.floating_action_button ft.FloatingActionButton(iconft.Icons.ADD)page.floating_action_button与page.floating_action_button_location两个属性定义在 base_page.py 中View与Pagelet控件同样支持这两个属性见 view.py 与 pagelet.py因此你也可以在View或Pagelet作用域内挂载各自的 FAB。完整示例点击 FAB 添加列表项官方文档引用的示例位于 sdk/python/examples/controls/material/floating_action_button/handling_clicks/main.py完整代码如下可直接运行import flet as ft def main(page: ft.Page): page.title Floating Action Button page.theme_mode ft.ThemeMode.LIGHT page.horizontal_alignment ft.CrossAxisAlignment.CENTER page.padding 0 page.scroll ft.ScrollMode.HIDDEN count 1 def handle_fab_click(e: ft.Event[ft.FloatingActionButton]): nonlocal count page.add( ft.ListTile( titleft.Text(fTile {count}), bgcolorft.Colors.TEAL_300, leadingft.Icon( ft.Icons.CIRCLE_OUTLINED, colorft.Colors.DEEP_ORANGE_300, ), on_clicklambda x: print(x.control.title.value was clicked!), ) ) page.show_dialog(ft.SnackBar(ft.Text(Tile was added successfully!))) count 1 page.floating_action_button ft.FloatingActionButton( keyhandling_clicks_fab, iconft.Icons.ADD, on_clickhandle_fab_click, bgcolorft.Colors.LIME_300, ) page.add( ft.SafeArea( contentft.Column( controls[ ft.Container( bgcolorft.Colors.BLUE, paddingft.Padding.all(20), contentft.Row( alignmentft.MainAxisAlignment.CENTER, controls[ ft.Text( valueFloating Action Button Example, styleft.TextStyle( size20, weightft.FontWeight.W_500, ), ) ], ), ), ft.Text(Press the FAB to add a tile!), ], ), ) ) if __name__ __main__: ft.run(main)该示例覆盖了 FAB 使用中的三个关键点挂载方式通过page.floating_action_button ft.FloatingActionButton(...)将 FAB 挂到页面根视图自动悬浮于内容右下角事件绑定on_click回调接收类型为ft.Event[ft.FloatingActionButton]的事件对象可在回调中修改页面内容交互反馈点击后通过page.show_dialog(ft.SnackBar(...))弹出提示条属于 Material 推荐的 FAB 反馈模式。核心属性详解FAB 的全部属性都定义在 floating_action_button.py下面按功能分组说明。内容与外观属性类型默认值说明iconIconDataOrControlNone按钮内显示的图标如ft.Icons.ADD可以是图标数据或任意控件contentStrOrControlNone按钮内容字符串或可见控件同时提供icon与content时 FAB 自动变为**扩展型extended**样式bgcolorColorValueNone按钮背景色foreground_colorColorValueNone图标与文字的默认前景色shapeOutlinedBorderNoneFAB 边框形状如圆角/圆形边框clip_behaviorClipBehaviorClipBehavior.NONE内容超出按钮边界时的裁剪方式验证规则源码末尾的__validation_rules__floating_action_button.py强制要求icon或content字符串或可见控件至少提供其一否则抛出ValueError。Flutter 端渲染时同样会检查若两者皆空则渲染ErrorControl提示Provide at minimum icon or content见 floating_action_button.dart。尺寸mini 与扩展模式属性默认值说明miniFalse是否为迷你尺寸。标准 FAB 高宽为56.0逻辑像素mini FAB 高宽为40.0布局占位为48.0逻辑像素Flutter 端根据icon与content的提供情况选择构造器见 floating_action_button.dart仅提供icon或仅提供content→ 使用FloatingActionButton(...)圆形图标按钮配合mini控制大小同时提供icon与content→ 自动使用FloatingActionButton.extended(...)渲染为图标 文本的胶囊形扩展 FAB此时mini不再生效文本样式与间距由主题层控制。高程Elevation体系FAB 悬浮于内容之上其阴影深浅通过高程表达。源码定义了五个高程属性且均带V.ge(0)校验负值会抛ValueError属性默认值触发场景elevation6常规状态disabled_elevation同elevation控件被禁用focus_elevation8获得输入焦点hover_elevation8悬停桌面端鼠标highlight_elevation12按下高亮交互反馈属性默认值说明hover_colorNone悬停时的填充色focus_colorNone获得焦点时的填充色splash_colorNone点击时墨迹水波ink splash的颜色enable_feedbackNone手势是否附带声学/触觉反馈Android 上为True时点击有提示音、长按有短暂振动autofocusFalse是否作为页面初始焦点多个控件同时设置时以第一个加入页面的为准mouse_cursorNone鼠标悬停时的光标样式urlNone点击时打开的 URL若同时设置了on_clickURL 打开动作先发生随后触发on_clickon_clickNone点击事件回调类型为ControlEventHandler[FloatingActionButton]控制 FAB 的位置FAB 在页面根视图上的位置由page.floating_action_button_location控制可选值定义在 types.py 的FloatingActionButtonLocation枚举中也可直接传Offset实现任意偏移枚举值含义CENTER_DOCKED居中并停靠在底部导航控件上方按钮中心与导航顶边对齐CENTER_FLOAT居中悬浮于屏幕底部CENTER_TOP居中悬浮于 AppBar 与页面主体的过渡处END_CONTAINED靠右悬浮于底部导航控件上与导航中心对齐END_DOCKED靠右停靠在底部导航控件上方中心与导航顶边对齐END_FLOAT靠右悬浮于屏幕底部Material 应用中的默认位置END_TOP靠右悬浮于 AppBar 与页面主体的过渡处MINI_CENTER_*/MINI_END_*上述位置的迷你按钮变体专为miniTrue设计源码注释特别指出CENTER_DOCKED、END_DOCKED、END_CONTAINED适用于带底部导航控件的应用如NavigationBar、Material 3BottomAppBar无底部导航时通常无意义*_TOP系列则依赖顶部AppBar存在。同时文档也提醒使用 mini 按钮时应配合MINI_*系列位置以获得正确布局。主题级定制FloatingActionButtonTheme若希望对页面内所有 FAB 统一风格可在page.theme中通过floating_action_button_theme定制见 theme.py。FloatingActionButtonTheme类的完整字段定义于 theme.py与控件属性一一对应颜色bgcolor、hover_color、focus_color、foreground_color、splash_color高程elevation、focus_elevation、hover_elevation、highlight_elevation、disabled_elevation形状与反馈shape、enable_feedback扩展 FAB 专属extended_padding图标与文本并存时的内边距、text_style合并进默认文本样式、icon_label_spacing图标与文本间距、extended_size_constraints/size_constraints尺寸约束。示例给应用内所有 FAB 统一绿色背景与圆角形状import flet as ft page.theme ft.Theme( floating_action_button_themeft.FloatingActionButtonTheme( bgcolorft.Colors.GREEN, shapeft.RoundedRectangleBorder(radius10), elevation4, ) )控件级属性如bgcolor优先于主题级值形成全局主题兜底、局部属性覆盖的层级关系。源码级原理点击事件如何到达 Python从 Flutter 端 floating_action_button.dart 可以看到点击处理的关键链路Function()? onPressed control.disabled ? null : () { runControlActions(context, control); control.triggerEvent(click); };onPressed被置为null即按钮禁用态点击时按顺序执行两件事runControlActions(context, control)先执行控件声明的客户端action如复制到剪贴板、打开文件选择器这些操作在浏览器/移动端用户手势有效窗口内立即完成control.triggerEvent(click)再将click事件通过 Flet 传输层发回 Python触发on_click回调——这也是官方文档中url打开动作先发生on_click随后触发的底层原因。另外FloatingActionButton的heroTag被设置为control.idfloating_action_button.dart这意味着页面导航切换时Flutter 的 Hero 动画会让 FAB 平滑过渡到下一页面对应的按钮上。小结与更多资源基本用法page.floating_action_button ft.FloatingActionButton(icon..., on_click...)即可获得 Material 规范的悬浮主操作按钮完整可运行示例见 handling_clicks/main.py。内容形态只有icon/只有content为圆形按钮mini可调小icon与content并存自动变为扩展型 FAB。位置与主题通过page.floating_action_button_locationFloatingActionButtonLocation枚举控制摆放位置通过page.theme.floating_action_button_theme做全局统一风格。底层机制客户端 action 先于click事件执行heroTag由控件 id 决定按钮禁用态通过onPressed null实现。如需查阅控件全部成员的完整文档可直接阅读官方页面 website/docs/controls/floatingactionbutton.md源码级定义请参考 floating_action_button.py、FloatingActionButtonLocation 枚举 与 FloatingActionButtonTheme。【免费下载链接】fletBuild realtime web, mobile and desktop apps in Python only. No frontend experience required.项目地址: https://gitcode.com/gh_mirrors/fl/flet创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表