跳到主要内容

Flet v0.24.0 正式版公告

· 阅读需 8 分钟
Henri Ndonko
Flet Contributor and Maintainer

Flet 0.24.0 版本发布公告

我非常高兴地宣布 Flet 0.24.0 版本发布!它带来了一长串的错误修复、多项增强功能和新特性。

新控件

新属性

  • AudioRecordercancel_recording()
  • Videoon_completedon_track_changed
  • InputFilterunicodecase_sensitivedot_allmultiline
  • Geolocatoron_erroron_position_change
  • BarchartLineCharttooltip_border_sidetooltip_directiontooltip_fit_inside_horizontallytooltip_fit_inside_verticallytooltip_horizontal_offsettooltip_margintooltip_max_content_widthtooltip_paddingtooltip_rounded_radiustooltip_rotate_angle
  • Containerdecorationforeground_decorationignore_interactionsimage
  • PageViewdecorationforeground_decoration
  • CupertinoTextFieldenable_scribbleimageobscuring_characterpaddingscroll_paddingon_click
  • DataTableheading_row_alignment
  • TextFieldcounterdisabled_hint_contentoptions_fill_horizontally
  • ExpansionTilemin_tile_heightshow_trailing_icon
  • Markdownfit_contentimg_error_contentmd_style_sheetshrink_wrapsoft_line_breakon_selection_change
  • MenuItemButtonautofocusoverflow_axissemantic_label
  • Tabslabel_paddinglabel_text_stylepaddingsplash_border_radiusunselected_label_text_styleon_click
  • 还有很多新类(枚举、数据类、事件)……

增强功能

  • 打印事件时,事件的字符串输出更好了。
  • Image.filter_quality现在的默认值是FilterQuality.MEDIUM(之前是FilterQuality.LOW),对于缩小的图像来说,这是一个更好的默认值。
  • Geolocator控件得到了改进,通过新添加的on_position_change事件支持位置流。当定义了这个事件后,你将能够“监听”位置的变化。
  • AppBar.adaptive=True并且应用在苹果平台上运行时,AppBar.actions控件现在被包装在一个Row中,然后显示。在此之前,只显示AppBar.actions列表的第一项。
  • Markdown控件得到了显著改进。现在它可以显示 SVG 图像,并且可以进行更多的自定义。
  • 一个非常受欢迎的功能是能够为应用设置背景图像或渐变。在#3820中,我们使这个功能成为可能并且易于使用。
  • rtl(从右到左)属性已添加到更多控件(NavigationRailDestinationNavigationRailAppBarCupertinoAppBarNavigationDrawer)中,以提高对从右到左文本方向的支持。
  • 引入了--no-rich-output标志(目前仅在flet build命令中),使得可以在控制台中禁用丰富输出(主要是表情符号)。更多信息请参见#3708
  • 类型提示得到了显著改进,特别是对于事件处理程序属性。在像 PyCharm 和 VSCode 这样的现代 IDE 中,你现在可以通过将鼠标悬停在控件中的事件上轻松确定事件处理程序参数的类型。此外,当你尝试访问事件处理程序参数上不存在的属性时,IDE 会突出显示错误,确保代码更加健壮且无错误。

错误修复

以下问题已成功修复:

  • #3769:当输入无效字符时,InputFilter会清除TextField的文本内容。
  • #3770Theme.floating_action_button_theme不存在。
  • #3734:确保Dropdown.alignment被正确应用。
  • #3730:在 Windows 上打包时引发UnicodeEncodeError
  • #2160Markdown控件无法渲染 SVG 图像。
  • #2158:当找不到图像时,Markdown损坏。
  • #3679:损坏的Dismissible
  • #3670Switch.heightSwitch.width未被正确应用。
  • #3612#3566:损坏的OnScrollEvent
  • #3564:损坏的TextField.capitalization
  • #3649CupertinoPicker在某些平台上跳跃滚动。
  • #3557:Impeller 在 Mac Intel 上导致空白屏幕。
  • #3574Geolocator在 Android 设备上无法工作。
  • #3505WindowEventType不包含所有全屏事件。

感谢所有报告这些问题的人!

弃用

此版本中所有弃用的项目将在 0.27.0 版本中删除。

  • ThemeVisualDensity已弃用,并已重命名为VisualDensity
  • CupertinoButtondisabled_color已弃用,并已重命名为disabled_bgcolor,这更好地反映了其用途。
  • Markdowncode_style已弃用,现在应作为code_style_sheet.code_text_style访问。
  • Containerimage_fitimage_opacityimage_repeatimage_srcimage_src_base64已弃用,现在应从类型为DecorationImageimage访问。

重大变更和迁移

工具提示

Tooltip类不再是 Flet 控件,现在是一个简单的 Python 数据类。几乎所有控件中都可用的tooltip属性现在同时支持字符串和Tooltip对象。

以下是迁移方法:

# 之前
page.add(
ft.Tooltip(
message="This is tooltip",
content=ft.Text("Hover to see tooltip"),
padding=20,
border_radius=10,
)
)

# 之后
page.add(
ft.Text(
"Hover to see tooltip",
tooltip=ft.Tooltip(
message="This is tooltip",
padding=20,
border_radius=10,
)
)
)

TextFieldInputFilter

我们修改了InputFilter.regex_string的内部处理方式。因此,你(可能)现在需要锚定你的正则表达式模式。这仅仅意味着使用开始(^)和结束($)正则表达式锚点。

例如:r"[0-9]"现在变为r"^[0-9]$"。使用这个新字符串将按预期工作,并且只允许数字,但你可能会注意到另一个问题:文本字段的最后一个字符无法删除。要解决这个问题,你需要在正则表达式中添加一个星号(*),在这种情况下,这将简单地表示“匹配零个或多个数字(包括空字符串)”。新的正则表达式现在变为r"^[0-9]*$"

为了简化此迁移,你可以使用一个 AI 工具,使用以下简单提示:“更新以下正则表达式模式:####,确保整个字符串与模式匹配,并且允许空字符串”。

事件处理程序订阅

已删除将多个回调函数订阅到一个事件处理程序的可能性,因为这在某种程度上是有偏见的(仅在某些情况下可行,而不是在所有情况下)。

以下是一个简单的例子:

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(
bgcolor=ft.colors.random_color(),
width=300,
height=300,
)

# 订阅回调函数
c.on_tap_down = print_one
c.on_tap_down = print_two
c.on_tap_down = print_three
page.add(c)

ft.app(main)

在上面的代码中,我们将多个回调函数订阅到Container.on_tap_down事件。在 Flet 0.24.0 版本之前,运行此代码并点击Container,你将看到所有回调函数都被调用(打印出“1”、“2”和“3”)。

从 Flet 0.24.0 版本开始,一个事件 = 一个回调函数。这意味着只有最后订阅的回调函数将被执行(打印出“3”)。

因此,如果你仍然希望最终输出与第一个输出相似,你可以简单地创建一个回调函数,该函数调用其他函数:


def main(page: ft.Page):
#....

def print_all(e):
print_one(e)
print_two(e)
print_three(e)

c = ft.Container(
bgcolor=ft.colors.random_color(),
width=300,
height=300,
on_tap_down=print_all,
)

# 或者
c.on_tap_down = print_all

结论

如你所见,我们在这个版本中做了很多更改,和往常一样,非常欢迎你的反馈!

升级到 Flet 0.24.0,测试你的应用程序,并让我们知道你对我们添加的新功能的看法。

如果你有任何问题,请加入Flet Discord 服务器或在Flet GitHub 讨论上创建一个新线程。

快乐地使用 Flet!👾

Flet v0.23.0 发布公告

· 阅读需 5 分钟
Henri Ndonko
Flet 贡献者和维护者

我们很高兴地宣布 Flet 0.23.0 的发布。这是一个重大的版本,带来了许多新特性和错误修复。

新控件

新属性

错误处理

PEP 20 (Python 之禅):错误永远不应默默地过去。

一些开发者报告说,在某些情况下,控件可能会在没有明显错误信息的情况下视觉上崩溃。

例如,在问题 #3149 中,@base-13 提到 "在 DataTable 中,如果列数少于任意一行中的数据单元格数,则整个表格将变灰而不抛出错误"

了解这一点,我们在大多数控件中添加了更多的断言检查,以便当您提供错误的值时,会引发一个 AssertionError,带有明确的错误消息。

如果您发现某些检查仍然缺失,请指出来以便我们解决。

命令行(CLI)输出

flet build 命令的输出已经被美化。

此外,添加了一个新的选项 --show-platform-matrix,它显示一个包含构建平台矩阵的表格,该表格的标题列为“命令”(可能的构建命令)和“平台”(您应该使用相应命令的设备)。

此外,当目标平台无法在您的设备上构建时,将显示一个包含构建平台矩阵的表格,并带有一个信息性消息。

重大变化

在上述“错误处理”中,我们不得不将一些重要属性标记为必需。

以下属性现在是“必需”的(必须提供和可见)当创建它们的类的实例时:

错误修复

以下问题已成功修复:

特别感谢活跃的 Flet 社区报告了他们遇到的所有问题。我们将继续努力解决剩余的问题。

废弃

  • 所有 Page.window_*** 属性现在已废弃,已移动到 Page.window 属性,该属性的类型为 Window。 要迁移,请简单地使用 window_ 替换为 window.,如下所示:

    # 之前
    page.window_height = 200
    page.on_window_event = lambda e: print(e.type)

    # 现在
    page.window.height = 200
    page.window.on_event = lambda e: print(e.type)
  • SafeArea.minimum 已废弃,已重命名为 minimum_padding

  • MaterialState 枚举已废弃,已重命名为 ControlState

  • NavigationDestination 已废弃,已重命名为 NavigationBarDestination

此外,废弃策略已修改。在 Flet 为 pre-1.0 时,所有废弃都会在下一个 3 个版本后从 API 中删除。 所以在 v0.23.0 中(以及之前版本中)进行的上述废弃,将在 v0.26.0 中删除。

就是这样! :)

升级到 Flet 0.23.0,测试您的应用程序,并让我们知道您对新功能的看法。 如果您有任何问题,请加入 Flet Discord 服务器 或创建一个新的线程 Flet GitHub 讨论

祝您愉快地使用 Flet!

Flet 在 PyCon US 2024

· 阅读需 2 分钟
Feodor Fitsner
Flet 创始人和开发者

上周我们参加了在宾夕法尼亚州匹茨堡市举行的 PyCon US 2024 大会!

我参加过许多会议,但在 PyCon 上,我被大会的场地、组织、内容质量和友好社区深深折服 😎,...还有美味的食物 🍔!

我们遇到了很多伟大的人,特别是来自 Beeware 的好人(你好,Russell,Malcolm 和 Russell 👋)。他们在推广 Python 在移动设备上的应用和倡导在 Python 3.13 的下一个版本中添加 iOS 和 Android 平台方面做出了杰出贡献 🎉!

我们享受了精彩的演讲和激励人心的主题演讲,学习了新知识,享受了城市的美景。闪电演讲(短短 5 分钟的演讲)真是太有趣了!

我在微软展台上见到了 Guido van Rossum (Python 的创始人,如果你不知道 😅),但没有机会和他合影,因为有排队的人 😉。

作为首次参加 PyCon 的人,我们没有做演讲或展示,而是观看和学习。

我们计划明年参加演讲 🤞。

下一届 PyCon US 将在同一地点举行。我们将再次参加,希望看到更多的你们!

Flet 打包更新

· 阅读需 10 分钟
Feodor Fitsner
Flet 创始人和开发者

问题

当您将 Flet 程序打包成在移动设备(或桌面设备)上运行的 Python 程序时,生成的包(.apk、.ipa、.exe、.app)包含您的 Python 程序、Python 解释器和 Python 标准库

如果您的程序只使用 Python 标准库,那么打包过程相对简单——Flet 会将您的代码压缩并将 Flutter 应用程序与为目标平台(Android 或 iOS)编译的 Python 解释器和标准库组合在一起。

然而,当您的 Flet 程序使用第三方包时,可能会出现问题,而这些包有数千个发布在 PyPI 或 Conda 上。

第三方包有两种类型:

纯 Python 包

“纯 Python”包是仅包含 Python 代码的包,不包括用 C、C++、Rust 或其他语言编写的扩展。您只需要一个 Python 解释器和 Python 标准库即可运行纯 Python 包,而无需关心您的操作系统或平台。

此类包的示例:httpxclickrichrequests

要验证包是否纯粹,请在 PyPI 上找到该包并导航到其“下载文件”页面。如果在“已构建分发”部分下只有一个以 -py3-none-any.whl 结尾的 wheel,那么很可能它是一个纯 Python 包,可以在任何带有 Python 的设备上“按原样”运行。

我们说*“可能”*是因为该纯包可能依赖于非纯包,例如 pydantic 是一个纯包,但它需要使用 Rust 编写的 pydantic-core 非纯包才能正常工作。

非纯 Python 包

“非纯 Python”包是部分或全部用 C、C++、Rust 或其他语言编写并必须为其运行的平台编译为机器码的包。

此类包的示例:cryptographyopencv-pythonnumpymsgpack

在非纯包的“下载文件”页面上,您会发现为各种平台预构建的轮子:macOS、Windows、Linux。

当您运行 pip install <package> 时,pip 会尝试根据轮子后缀查找特定平台和 Python 版本的轮子。

这是包开发者提供的礼貌行为,为多个平台提供预编译的轮子。某些平台可能缺少轮子,或者没有轮子——只有“源分发”中的 .tar.gz 包含包源代码。

从源代码构建包很难

要安装仅具有源代码分发的包,pip 会尝试使用安装的编译器、链接器、库和 SDK 在您的机器上构建非 Python 代码。然而,这个过程可能既漫长又容易出错。编译后的代码库可能很大,并且您的机器可能缺少所需的库或工具链。

还没有适用于 iOS 和 Android 的轮子

PyPI 上还没有适用于 iOS 和 Android 的预构建轮子,并且 PyPI 的验证过程不允许包开发者上传这些轮子,因为 iOS 和 Android 都不是 Python 的正式支持平台。

有一个过程(PEP 730PEP 738)将为 Python 3.13 添加对 iOS 和 Android 的正式支持,因此,希望开发者体验将有所改善。

包依赖关系

纯 Python 包可以导入或依赖非纯包,在将您的 Flet 应用程序打包以在移动设备上运行时,您应该牢记这一点。

例如,supabase 包用于访问 Supabase API,是一个依赖于 pydantic 包的纯包,而 pydantic 包本身依赖于用 Rust 编写的 pydantic-core 非纯包。因此,要运行使用 Supabase API 的 Flet 应用程序,打包过程应该能够找到适合目标平台的预构建轮子。如果 PyPI 没有该轮子,那么要么是 Flet 开发人员在他们的服务器上构建该轮子并托管它,要么是您在自己的机器上构建该轮子。

要查看包的依赖关系图,您可以使用 pipgrip

使用 --tree 选项运行它以获得依赖关系树视图:

$ pipgrip --tree fastapi

fastapi (0.110.3)
├── pydantic!=1.8,!=1.8.1,!=2.0.0,!=2.0.1,!=2.1.0,<3.0.0,>=1.7.4 (2.7.1)
│ ├── annotated-types>=0.4.0 (0.6.0)
│ ├── pydantic-core==2.18.2 (2.18.2)
│ │ └── typing-extensions!=4.7.0,>=4.6.0 (4.11.0)
│ └── typing-extensions>=4.6.1 (4.11.0)
├── starlette<0.38.0,>=0.37.2 (0.37.2)
│ └── anyio<5,>=3.4.0 (4.3.0)
│ ├── idna>=2.8 (3.7)
│ └── sniffio>=1.1 (1.3.1)
└── typing-extensions>=4.8.0 (4.11.0)

当前方法

我们在4 个月前发布了打包的第一个版本,自那时以来,我们意识到初始方法存在多个缺陷,需要改进。

当您使用当前版本的 Flet 运行 flet build apk 时,它会下载为 Android(或如果使用 flet build ipa 运行时为 iOS)预构建的 Python 运行时和标准库。

对于非纯包,例如 numpy,Flet 要求您使用 Kivy 的“Python for Android”(p4a)工具自行构建这些包,然后提供一个路径到预构建包可以找到的“p4a”分发包。

这是问题 #1 - 您被迫与在您的机器上安装“p4a”工具并编译 Python 模块的复杂过程作斗争。

问题 #2 - 来自 p4a 的 dist 目录中的所有包将被包含在最终的应用程序包中 - 它可能包含无关的包和其他垃圾。

问题 #3 - 非纯包必须在运行 flet build 命令之前构建。您必须分析应用程序的所有依赖项,并分离出必须使用 p4a 构建的内容。

问题 #4 - p4a 的“配方”可能非常旧或缺失。您希望旧版本的包适用于您的应用程序,尝试编写“配方”并希望它能工作,或者在 Kivy 存储库中提交新配方的请求。

当您完成使用 p4a 构建非纯包时,Flet 要求您在 requirements.txt 中仅指定纯包,这在纯包直接或间接依赖于非纯包时不起作用(请参见上述示例) - 这是问题 #5。有一个最近的例子说明了这个问题:flet buildrequirements.txt 中用 flet-embed 替换 flet,但它无法知道是否有第三方包依赖于 flet,因此会安装 flet-embed 和不适用于移动设备的 flet。这不是解决方案,而是一个黑客!

打包 2.0

在 Flet 打包实现的下一次迭代中,我们将放弃 Kivy 并用 Mobile Forge 取而代之。Mobile Forge 是由 Beeware 团队基于他们在 Briefcase 和 Chaquopy 上的经验创建的。Mobile Forge 是一个用于二进制 Python 包的打包工具的清洁实现,依赖于 crossenv

Mobile Forge 和 crossenv 的主要承诺是,大多数现有的非纯 Python 包将能够通过简单地添加一个 meta.yaml 文件的配方来为 iOS 和/或 Android 编译,而无需任何黑客或补丁。

我们将使用 Mobile Forge 为 iOS 和 Android 预构建最流行的非纯 Python 包,并在我们自己的公共存储库中托管它们。您将能够使用该工具来构建和贡献其他不在我们存储库中的包。

我们在 Flet 讨论中创建了一个新的“包”类别,您可以在其中发布、投票和讨论适用于 Flet 的非纯(本机)Python 包的请求(在发布之前请查看规则)。Flet 的目标是提供最全面的预构建 Python 包目录,并使添加新包的过程尽可能友好和透明。

新版本的 flet build 将使用自定义的虚拟 pip 索引。此索引将分析依赖项,检测非纯包,并提供 pip 移动包。对于所有其他包,它将回退到 PyPI。

希望新的打包版本将在几周内可用。在我们工作期间,我们鼓励您访问并查看您需要的包是否在那里。提交请求或为现有包投票将帮助我们优先处理包的“配方”。

谢谢!

控件和主题增强

· 阅读需 6 分钟
Henri Ndonko
Flet 贡献者和维护者

在发布 Flet 0.21.0 一个多月后,我们很高兴地宣布发布 Flet 0.22.0。

此版本带来了许多增强、错误修复和弃用功能:

增强功能

这是本次发布的主要关注点之一。我们进行了两种类型的增强:

控件增强

我们遍历了现有控件的长列表,并在可能的情况下公开了更多属性 - PR #2882。这将为您提供更多对 Flet 控件的控制,以便在您的优秀应用程序中使用。

以下是完整列表:

  • AppBar: elevation_on_scroll, exclude_header_semantics, force_material_transparency, is_secondary, shadow_color, surface_tint_color, clip_behavior, title_spacing, toolbar_opacity, title_text_style, toolbar_text_style, shape
  • AlertDialog: action_button_padding, clip_behavior, icon_padding, shadow_color, surface_tint_color
  • Banner: content_text_style, margin, elevation, divider_color, shadow_color, surface_tint_color, on_visible
  • CupertinoListTile: leading_size, leading_to_title
  • CupertinoSegmentedButton: click_color
  • CupertinoSwitch:on_label_color, off_label_color
  • CupertinoTimerPicker: item_extent
  • Chip: surface_tint_color, color, click_elevation, clip_behavior, visual_density, border_side
  • Divider: leading_indent, trailing_indent
  • ExpansionTile: dense, enable_feedback, visual_density
  • Card: clip_behavior, is_semantic_container, show_border_on_foreground, variant
  • Checkbox: border_side, semantics_label, shape, splash_radius, is_error, visual_density, mouse_cursor
  • CircleAvatar: on_image_error
  • DataTable: clip_behavior
  • DatePicker: on_entry_mode_change
  • Draggable: on_drag_complete, on_drag_start
  • DragTarget: on_move
  • Dropdown: fill_color, hint_content, icon_content, elevation, item_height, max_menu_height, icon_size, enable_feedback, padding, icon_enabled_color, icon_disabled_color, on_click
  • ElevatedButton: clip_behavior
  • FloatingActionButton: clip_behavior, enable_feedback, focus_color, foreground_color, disabled_elevation, elevation, focus_elevation, highlight_elevation, hover_elevation, mouse_cursor
  • GridView: cache_extent, clip_behavior, semantic_child_count
  • IconButton: alignment, disabled_color, focus_color, enable_feedback, hover_color, padding, splash_color, splash_radius, focus_color, mouse_cursor, visual_density
  • Image: exclude_from_semantics, filter_quality
  • ListTile: enable_feedback, horizontal_spacing, min_leading_width, min_vertical_padding, selected_color, selected_tile_color, style, title_alignment, icon_color, text_color, shape, visual_density, mouse_cursor, title_text_style, subtitle_text_style, leading_and_trailing_text_style
  • ListView: cache_extent, clip_behavior, semantic_child_count
  • NavigationBar: animation_duration, overlay_color
  • NavigationDrawerDestination: bgcolor
  • NavigationDestination: bgcolor
  • NavigationRail: selected_label_text_style, unselected_label_text_style
  • NavigationRailDestination: indicator_color, indicator_shape
  • Option: alignment, on_click
  • OutlinedButton: clip_behavior
  • Page: locale_configuration
  • PopupMenuItem: height, padding, mouse_cursor
  • PopupMenuButton: bgcolor, clip_behavior, elevation, enable_feedback, icon_color, shadow_color, surface_tint_color, icon_size, padding, splash_radius, shape, on_open, on_cancel
  • ProgressBar: border_radius, semantics_label, semantics_value
  • ProgressRing: semantics_label, semantics_value, stroke_cap, stroke_align
  • Radio: focus_color, hover_color, overlay_color, splash_radius, toggleable, visual_density, mouse_cursor
  • SearchBar: keyboard_type, view_surface_tint_color, autofocus
  • SelectionArea: on_change
  • Slider: interaction, overlay_color, mouse_cursor, secondary_track_value, secondary_active_color
  • Stack: alignment, fit
  • SnackBar: clip_behavior, shape, on_visible, action_overflow_threshold
  • Switch: hover_color, splash_radius, overlay_color, track_outline_color, mouse_cursor
  • Tabs: divider_height, enable_feedback, indicator_thickness, is_secondary, mouse_cursor, clip_behavior
  • TextField: fill_color, hover_color
  • TimePicker: orientation, on_entry_mode_change
  • Tooltip: enable_tap_to_dismiss, exclude_from_semantics
  • VerticalDivider: leading_indent, trailing_indent

如果您觉得有些功能缺失且需要添加,请随时告诉我们。

查看我写的关于 Page.locale_configuration 的文章这里

主题增强

用于应用程序主题设置的 Theme 类在浅色和深色模式下得到了进一步增强。 引入了许多新主题 - PR #2955

查看主题指南 这里

Rive 动画

Rive 是一个非常流行的实时交互设计和动画工具。 新引入的 Rive 控件允许您在应用程序中加载和可视化任何 Rive 动画。

动画的来源 (Rive.src) 可以是本地资源文件或 URL - 如常所述,这完全取决于你的需求。

父控件

根据 #952 的请求,已添加访问任何控件父级的功能:Control.parent

阅读更多内容 这里

错误修复

成功修复了以下问题:

  • #2560 - Dropdown.bgcolor 未得到视觉上的尊重
  • #2740 - CircleAvatar 无法与本地资产图像一起使用
  • #2781 - Linux 上引发了 'FletSocketServer' 错误
  • #2826 - PopupMenuItem.data 未得到尊重
  • #2839 - ExpansionTile.initially_expanded 无视觉效果
  • #2867 - PopupMenuButton 始终显示“显示菜单”工具提示
  • 在某些 Python 版本上,您可能会看到 RuntimeError('Event loop is closed'),通常在关闭应用程序窗口时显示。Python-dev 团队最近修复了这一 asyncio 相关的问题,但该修复仅存在于 2024 年发布的版本中。因此,如果您遇到此问题,请下载最新的 Python 版本之一并替换您环境中使用的版本。

特别感谢 Flet 动态社区报告他们遇到的所有问题。我们将继续努力解决剩余的问题。

弃用

如前面在有关 Flet v0.21.0 的 公告 中提到的,所有弃用将在版本 1.0 中完全从 API 中删除 - 因此您有足够的时间来更新您的应用程序。

您无需完全记住哪些内容已弃用,因为我们添加了 DeprecationWarnings,它们将直接显示在您的控制台中(不会破坏您的应用程序)。

文档

Flet 文档已重新组织,以便于导航(特别是对于初学者/新用户)。

升级到 Flet 0.22.0,测试您的应用程序,并告诉我们您对新增功能的看法。 如果您有任何问题,请加入 Flet Discord 服务器 或在 Flet GitHub 讨论 中创建一个新主题。

祝您使用 Flet 愉快!