Flet v0.24.0 版本发布详解:新控件、破坏性变更与迁移指南
Flet v0.24.0 版本发布详解新控件、破坏性变更与迁移指南【免费下载链接】fletBuild realtime web, mobile and desktop apps in Python only. No frontend experience required.项目地址: https://gitcode.com/gh_mirrors/fl/fletFlet 0.24.0 是一次功能密集的版本发布带来了InteractiveViewer与Placeholder两个新控件、覆盖十余个既有控件的新属性、事件打印输出的增强以及 Tooltip、InputFilter、事件回调订阅等多项破坏性变更。本文以官方发布公告为主体结合当前仓库中 sdk/python/packages/flet 的 Python 源码实现逐项拆解新增能力、参数细节、底层实现与迁移路径帮助你在升级后快速适配自己的 Flet 应用。发布概述Flet 0.24.0 是 Flet 1.0 时代之前的一个重要里程碑版本公告称其包含一长串 bug 修复、多项增强与新特性。该版本的核心变化集中在新增 2 个控件InteractiveViewer、Placeholder为AudioRecorder、Video、InputFilter、Geolocator、图表控件、Container、Page/View、TextField、Markdown、Tabs等补充大量新属性引入若干破坏性变更Tooltip 由控件改为 dataclass、InputFilter.regex_string需要锚定正则、事件处理器只保留最后一个回调清理了一批弃用 API并宣布在 0.27.0 中移除。新控件InteractiveViewer 与 PlaceholderInteractiveViewer平移、缩放与旋转InteractiveViewer允许用户对content进行平移pan、缩放scale和旋转rotate其 Python 实现位于 interactive_viewer.py。从源码看它是一个LayoutControl核心属性与行为如下属性默认值说明content必填被变换的控件必须可见否则抛出ValueErrorpan_enabledTrue是否允许平移scale_enabledTrue是否允许缩放trackpad_scroll_causes_scaleFalse触控板上下滑动是否触发缩放而不是平移constrainedTrue是否对 content 施加正常尺寸约束设为False时 content 获得无限约束适合内容大于视口、需要平移查看的场景min_scale0.8最小缩放比例必须大于 0 且不大于max_scalemax_scale2.5最大缩放比例必须大于 0 且不小于min_scalescale_factor200每次指针滚轮缩放的比例量增大值会让缩放变慢减小则变快仅影响指针滚轮不影响双指捏合interaction_end_friction_coefficient0.0000135手势结束后减速行为clip_behaviorClipBehavior.HARD_EDGE内容裁剪方式设为NONE时内容可视觉溢出但手势仍只在控件区域内生效boundary_marginMargin.all(0)内容可见边界的外边距传无限值可消除所有边界interaction_update_interval200on_interaction_update事件的触发间隔毫秒on_interaction_start/on_interaction_update/on_interaction_endNone平移/缩放手势开始、更新、结束时触发的事件源码同时暴露了 4 个编程式方法reset、save_state、restore_state、zoom、pan它们通过_invoke_method调用底层实现reset(animation_durationNone)将当前变换矩阵重置为单位矩阵可传入动画时长实现平滑过渡save_state()/restore_state()保存/恢复当前变换矩阵快照zoom(factor)按倍数缩放相对当前比例结果会被夹在min_scale与max_scale之间pan(dx, dy, dz0)按逻辑像素平移平移范围同样受交互边界约束。一个典型的用法是把大图包在InteractiveViewer中并配合constrainedFalse让用户自由拖动查看超出视口的部分。Placeholder占位框Placeholder提供一个可视的占位盒子常用于布局开发阶段预留区域实现位于 placeholder.py源码 docstring 给出了最小示例ft.Placeholder( expandTrue, colorft.Colors.RED_500, )其属性包括content可选占位框内显示的控件、color默认Colors.BLUE_GREY_700、fallback_height/fallback_width默认 400.0用于无界高度/宽度场景、stroke_width默认 2.0线条宽度。开发阶段用它代替尚未实现的模块可以直观看到页面布局的骨架。新增属性一览与源码佐证媒体与定位类AudioRecorder.cancel_recording()新增取消录音的方法Video新增on_completed播放完成、on_track_changed轨道切换事件Geolocator新增on_error、on_position_change后者支持位置流式监听——只要定义了该事件就可以在位置变化发生时实时收听。图表 Tooltip 系列BarChart与LineChart一次性新增了 10 个 tooltip 定制属性tooltip_border_side、tooltip_direction、tooltip_fit_inside_horizontally、tooltip_fit_inside_vertically、tooltip_horizontal_offset、tooltip_margin、tooltip_max_content_width、tooltip_padding、tooltip_rounded_radius、tooltip_rotate_angle可以精确控制数据点提示框的边框、方向、内缩、偏移、圆角与旋转角度。装饰与背景Container新增decoration、foreground_decoration、ignore_interactions和imagePage、View同样新增decoration、foreground_decoration。其中image的类型是DecorationImage定义于 box.py。源码显示它支持srcURL、资源路径、base64 字符串或原始字节、color_filter、fit、alignment、repeat、scale、opacity、filter_quality默认MEDIUM、invert_colors、anti_alias等属性。这意味着为整个应用或某个页面设置背景图片/渐变已经成为简单易用的一等公民能力公告中引用的 PR #3820 正是这项需求。文本输入类CupertinoTextFieldenable_scribble、image、obscuring_character、padding、scroll_padding、on_clickTextFieldcounter、disabled_hint_content、options_fill_horizontallyInputFilterunicode、case_sensitive、dot_all、multiline详见下文迁移部分DataTableheading_row_alignmentExpansionTilemin_tile_height、show_trailing_icon。其余控件Markdownfit_content、img_error_content、md_style_sheet、shrink_wrap、soft_line_break、on_selection_changeMenuItemButtonautofocus、overflow_axis、semantic_labelTabslabel_padding、label_text_style、padding、splash_border_radius、unselected_label_text_style、on_click。此外还新增了大量枚举、dataclass、事件类集中在 reference 文档中。增强功能盘点事件打印输出事件对象在print时的字符串输出更友好便于调试时直接打印事件内容。图片过滤质量默认值调整Image.filter_quality默认值从FilterQuality.LOW改为FilterQuality.MEDIUM对缩小显示的图片是更优的默认选择。这一默认值在DecorationImage.filter_quality上同样保持一致。AppBar 自适应模式下 actions 的展示当AppBar.adaptiveTrue且在 Apple 平台运行时AppBar.actions中的控件现在会被包进一个Row再显示此前只会显示列表中的第一项。Markdown 能力增强Markdown控件得到显著改进现在可以渲染 SVG 图片并支持更丰富的自定义例如通过md_style_sheet定制代码样式等。RTL 支持扩展rtlright-to-left从右到左属性被加入更多控件NavigationRailDestination、NavigationRail、AppBar、CupertinoAppBar、NavigationDrawer以改善对从右到左文字方向的支持。构建命令新增--no-rich-outputflet build命令新增--no-rich-output标志用于关闭控制台中的富文本输出主要是 emoji方便在 CI 等对终端输出要求严格的场景中使用。类型提示大幅改进事件处理器属性的类型提示得到显著提升在 PyCharm、VSCode 等现代 IDE 中只需悬停事件即可查看事件参数的类型当你访问事件参数上不存在的属性时IDE 会直接标红提示从源头上减少运行时错误。Bug 修复清单本次发布修复了一批影响较大的问题编号为公告引用的 issue/PR 编号#3769InputFilter在输入非法字符时清空TextField全部文本#3770Theme.floating_action_button_theme不存在#3734确保Dropdown.alignment生效#3730在 Windows 打包时抛出UnicodeEncodeError#2160Markdown无法渲染 SVG 图片#2158Markdown在图片找不到时崩溃#3679Dismissible损坏#3670Switch.height、Switch.width不生效#3612、#3566OnScrollEvent损坏#3564TextField.capitalization损坏#3649CupertinoPicker在部分平台滚动跳动#3557Impeller 在 mac Intel 上导致白屏#3574Geolocator在 Android 设备上无法工作#3505WindowEventType缺少 fullscreen 相关事件。弃用项将于 0.27.0 移除本次发布宣布的弃用项将在0.27.0中被彻底移除升级时应尽早完成迁移ThemeVisualDensity弃用更名为VisualDensityCupertinoButton.disabled_color弃用更名为disabled_bgcolor更贴切地反映其用途Markdown.code_style弃用应改为通过code_style_sheet.code_text_style访问Container的image_fit、image_opacity、image_repeat、image_src、image_src_base64弃用应统一改为使用image属性类型为DecorationImage来表达。破坏性变更与迁移指南Tooltip从控件变为 dataclass这是 0.24.0 最直观的破坏性变更Tooltip不再是 Flet 控件而是一个简单的 Python dataclass几乎所有控件的tooltip属性现在同时支持字符串和Tooltip对象。当前仓库中 tooltip.py 的实现印证了这一点并且它还通过TooltipValue Union[str, Tooltip]类型别名显式声明了两种合法取值。迁移前后的对比如下# 迁移前Tooltip 作为独立控件添加到页面 page.add( ft.Tooltip( messageThis is tooltip, contentft.Text(Hover to see tooltip), padding20, border_radius10, ) ) # 迁移后Tooltip 作为 dataclass 挂到控件的 tooltip 属性上 page.add( ft.Text( Hover to see tooltip, tooltipft.Tooltip( messageThis is tooltip, padding20, border_radius10, ) ) )新Tooltipdataclass 提供了远超简单字符串的定制能力包括decoration背景装饰默认随明暗主题自动选择、enable_feedback声音/触感反馈、vertical_offset、margin、padding移动端默认Padding.symmetric(horizontal16, vertical4)桌面端为Padding.symmetric(horizontal8, vertical4)、bgcolor、text_style、text_align、prefer_below、show_duration、wait_duration、exit_duration、tap_to_dismiss、exclude_from_semantics、trigger_modeMANUAL/TAP/LONG_PRESS、mouse_cursor、size_constraints等。TextField 的 InputFilter正则需要锚定InputFilter.regex_string的内部处理方式被修改升级后可能需要在正则中添加锚点即用^起始和$结束约束整个输入串。# 迁移前 filter ft.InputFilter(regex_stringr[0-9]) # 迁移后锚定整个输入 filter ft.InputFilter(regex_stringr^[0-9]$)注意r^[0-9]$会带来一个新问题文本字段的最后一个字符无法被删除。解决方案是在正则中加入*表示匹配零个或多个数字包括空字符串filter ft.InputFilter(regex_stringr^[0-9]*$)源码层面InputFilter定义于 textfield.py当前实现还支持allowTrue允许匹配、False拒绝匹配、replacement_string替换被禁止模式的字符串、multiline是否多行匹配决定^/$匹配行首行尾还是整个输入的开头结尾、case_sensitive、unicode、dot_all等参数。迁移时可以借助 AI 工具使用这样的提示词update the following regex pattern: #### ensuring that the entire string matches the pattern and it allows for an empty string。事件处理器订阅一个事件只保留一个回调0.24.0 移除了为同一个事件处理器订阅多个回调的能力此前只对部分控件可用存在不一致。从 0.24.0 起一个事件 一个回调只有最后订阅的回调会被执行import flet as ft def main(page: ft.Page): def print_one(e): print(1) def print_two(e): print(2) def print_three(e): print(3) c ft.Container( bgcolorft.Colors.random_color(), width300, height300, ) # 0.24.0 之前三个回调都会执行打印 1、2、3 # 0.24.0 起只有最后一个回调执行打印 3 c.on_tap_down print_one c.on_tap_down print_two c.on_tap_down print_three page.add(c) ft.run(main)如果希望保留多个回调的效果可以创建一个聚合回调在其中依次调用其他回调def main(page: ft.Page): # ...其他代码 def print_all(e): print_one(e) print_two(e) print_three(e) c ft.Container( bgcolorft.Colors.random_color(), width300, height300, on_tap_downprint_all, ) # 或者 # c.on_tap_down print_all结语与升级建议Flet 0.24.0 在带来InteractiveViewer、Placeholder两个新控件和大量属性增强的同时也引入了 Tooltip 用法、InputFilter 正则写法、事件订阅行为三处需要动手修改的破坏性变更并预告了 0.27.0 将移除一批弃用 API。建议升级后重点检查所有把Tooltip当作控件添加的代码、所有未锚定的InputFilter.regex_string、以及所有对同一事件重复赋值的回调逻辑。逐项对照本文的迁移示例完成适配即可平滑过渡到新版本。【免费下载链接】fletBuild realtime web, mobile and desktop apps in Python only. No frontend experience required.项目地址: https://gitcode.com/gh_mirrors/fl/flet创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

5个APM飞控避坑指南:解决配置卡半天的最佳实践

5个APM飞控避坑指南:解决配置卡半天的最佳实践

5个APM飞控避坑指南:解决配置卡半天的最佳实践 配环境配了三天,报错日志翻了几十页,APM飞控的部署依然卡在初始化阶段。这种“配置环境就卡半天”的折磨,是无数无人机开发者噩梦的开始。其实,问题往往不出在代码逻辑,而藏在那些被忽略的依赖关系…

2026/9/21 23:19:16 阅读更多 →
Sanic Extensions 后台日志记录器(Background Logger)实战指南:配置、原理与性能优化

Sanic Extensions 后台日志记录器(Background Logger)实战指南:配置、原理与性能优化

Sanic Extensions 后台日志记录器(Background Logger)实战指南:配置、原理与性能优化 【免费下载链接】sanic Accelerate your web app development | Build fast. Run fast. 项目地址: https://gitcode.com/gh_mirrors/sa/sanic San…

2026/9/21 23:19:15 阅读更多 →
Material Components Web 的 mdc-auto-init:声明式 DOM 初始化工具完全指南

Material Components Web 的 mdc-auto-init:声明式 DOM 初始化工具完全指南

前端UI组件设计系统 【免费下载链接】material-components-web Modular and customizable Material Design UI components for the web 项目地址: https://gitcode.com/gh_mirrors/ma/material-components-web 点击查看 免费下载 mdc-auto-init 是 Material Compon…

2026/9/21 23:18:14 阅读更多 →

最新新闻

蓝绿厂是指什么手机?3个代码案例搞定性能优化痛点

蓝绿厂是指什么手机?3个代码案例搞定性能优化痛点

蓝绿厂是指什么手机?3个代码案例搞定性能优化痛点 你复制来的代码跑不通,报错信息一片红,完全不知道从哪调起?别慌,这不是你代码写得烂,而是没掌握 性能优化…

2026/9/22 0:45:11 阅读更多 →
手写实现千手罗汉:3步搞定面试高频考点

手写实现千手罗汉:3步搞定面试高频考点

手写实现千手罗汉:3步搞定面试高频考点 面试被问“千手罗汉”原理答不上来,太尴尬了。很多候选人只背概念,手写实现时卡壳。面试官看的是代码功底,不是死记硬背。 考点梳理:别把千手罗汉想太玄乎…

2026/9/22 0:45:11 阅读更多 →
逍遥模拟器源码拆解:从入门到精通的底层逻辑

逍遥模拟器源码拆解:从入门到精通的底层逻辑

逍遥模拟器源码拆解:从入门到精通的底层逻辑 面试被问“进程间通信怎么保证原子性”时,你卡壳了。 面试官追问:“那在模拟环境里,Android 进程和宿主机进程的数据同步怎么做的?” 你支支吾吾,只能说出…

2026/9/22 0:45:11 阅读更多 →
3个戴明盟图解原理技巧,告别只会背书的尴尬

3个戴明盟图解原理技巧,告别只会背书的尴尬

3个戴明盟图解原理技巧,告别只会背书的尴尬 刚拿到证书的朋友,是不是经常陷入一种怪圈?戴明盟图解原理看了一百遍,PPT上的箭头画得再漂亮,一到面试官面前问“这个流程在实际项目中怎么落地”,脑子就一片空白。很多人觉得这是理论太深,其实不然,这…

2026/9/22 0:45:11 阅读更多 →
图解原理:blcs 配置避坑,3 招搞定环境卡死

图解原理:blcs 配置避坑,3 招搞定环境卡死

图解原理:blcs 配置避坑,3 招搞定环境卡死 配置环境就卡半天?别急,这锅不全是你的。很多刚接触 blcs 的同行,尤其是从前端转后端,或者像我们这种平时搬砖搞建筑的,一遇到依赖冲突和版本不匹配,心态容易崩。其实 blcs…

2026/9/22 0:45:11 阅读更多 →
3个后端踩坑实录:手写实现校验哪个邮箱好用

3个后端踩坑实录:手写实现校验哪个邮箱好用

3个后端踩坑实录:手写实现校验哪个邮箱好用 刚学会 Python 或 Java 的语法,是不是感觉自己也行了? 结果一动手写个用户注册模块,对着需求文档里的“哪个邮箱好用”发愣,不知道该怎么下手。…

2026/9/22 0:44:10 阅读更多 →

日新闻

3台商务办公笔记本实测:手写实现环境配置,告别卡半天

3台商务办公笔记本实测:手写实现环境配置,告别卡半天

3台商务办公笔记本实测:手写实现环境配置,告别卡半天 配置环境就卡半天?别怪机器慢,多半是你没选对工具链。在Java、Go或Python的项目现场, 手写实现…

2026/9/22 0:00:41 阅读更多 →
剑帝加点速查手册:3分钟搞懂核心逻辑

剑帝加点速查手册:3分钟搞懂核心逻辑

剑帝加点速查手册:3分钟搞懂核心逻辑 面试被问原理答不上来,是不是常态?别慌。很多开发者对着 GitHub 开源仓库里的代码发呆,看似简单实则暗藏玄机。今天这份【剑帝加点】速查手册,直接带你拆解核心实现,把面试必考的原理讲透。…

2026/9/22 0:00:41 阅读更多 →
手写实现图片压缩网站核心:搞定WebP转换与质量调优

手写实现图片压缩网站核心:搞定WebP转换与质量调优

手写实现图片压缩网站核心:搞定WebP转换与质量调优 复制来的代码跑不通不知道怎么调?别慌,这种“复制粘贴地狱”在开发圈太常见了。尤其是做 图片压缩网站…

2026/9/22 0:00:41 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/21 3:13:20 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/21 2:19:36 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/21 4:51:05 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/21 15:36:51 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/21 15:36:51 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/19 23:35:34 阅读更多 →