跳到主要内容

8 篇博文 含有标签「releases」

查看所有标签

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为FastAPI提供支持

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

我们刚刚发布了支持 FastAPI 的 Flet 0.10.0!

FastAPI 配合 Uvicorn、Hypercorn、Gunicorn 或其他网络服务器,可以取代内置的 Flet 网络服务器(Fletd),以可靠地运行生产环境中的 Flet 工作负载。

另一方面,经验丰富的 FastAPI 开发者可以使用 Flet,轻松地为现有或新的 FastAPI 服务添加互动的实时仪表盘和管理 UI。

一个简单的应用示例

import flet as ft
import flet_fastapi

async def main(page: ft.Page):
await page.add_async(
ft.Text("Hello, Flet!")
)

app = flet_fastapi.app(main)

这是一个简单的应用程序,只是在网页上输出“Hello, Flet!”。

要运行该应用程序,请安装 Flet for FastAPI 和 Uvicorn:

pip install flet-fastapi
pip install uvicorn

将上述代码保存为 hello.py,然后启动 Uvicorn:

uvicorn hello:app

打开浏览器并导航到 http://127.0.0.1:8000 查看运行中的应用程序。

警告

Flet 应用程序必须是 异步的 才能与 FastAPI WebSocket 处理程序一起工作。

特性和优势

  • 单域名下的多个 Flet 应用程序 - 映射到根路径和/或子路径。
  • 简单的单行映射单个端点配置
  • 围绕 FastAPI WebSocket 连接的轻量级异步包装器,以提高并发性。
  • 提供包含用户资源和应用程序元信息自定义的 Flet 静态文件。
  • FilePicker 控件的上传处理程序。
  • 处理 OAuth 回调进行身份验证流程。

查看 指南 以获取有关 Flet 与 FastAPI 的完整信息。

通过加入 Flet Discord 服务器 或在 Flet GitHub 讨论 创建新主题,让我们知道您的想法。

用于 Android 的 Flet

· 阅读需 3 分钟
Feodor Fitsner
Flet创始人兼开发者

🤖 现已支持Android平台!

通过 Flet Android 应用,你可以在 Android 设备上查看 Flet Python 应用的外观和行为,而应用本身仍在你的电脑上运行。

与 iOS 类似,Flet for Android 是一个完全用 Python 编写的 Flutter 应用,使用了两个开源软件包:serious_pythonflet。生成的应用包技术上符合 Google Play 的要求,因此你可以用纯 Python 发布优秀的 Android 应用。

按照本指南 开始在 Android 上测试你的 Flet 应用。探索应用、浏览画廊、尝试示例项目和应用设置。

常见问题

如何将我的 Flet 应用打包到 Google Play?

我们将提供一个启动 Flutter 应用的项目模板和指南,介绍如何将 Flutter、serious_python 软件包和你的 Python 应用结合在一起,创建一个独立的 Android 应用并发布到 Google Play。

查看 serious_python 的自述文件,了解如何创建一个 Flutter 启动并将你的 Python 应用打包在其中。使用 flet_example 项目作为起点。

你们会提供 Windows、macOS 和 Linux 的打包吗?

会的!目前,Flet 桌面应用使用 flet pack 命令和 PyInstaller 打包。生成的应用包增加了性能和大小的开销,并且难以定制,因此我们将用原生的 Flutter 打包替代它。

Flet v0.9.0 发行说明

要在 Android 上进行测试,你需要将 Flet 安装升级到 v0.9.0。

为了支持 Android,Flet CLI 进行了一些更改。如果你发现了什么异常情况,请告诉我们。

祝您使用愉快!

用于 iOS 的 Flet

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

🎉 哇哦,Flet 应用现已上架 App Store!🎉

有了 Flet iOS 应用,您可以在 iPhone 或 iPad 上查看 Flet Python 应用的外观和行为,而应用程序本身正在您的计算机上运行。

但这不仅仅是测试手机上的 Flet 应用程序!Flet 移动应用程序本身是用 Python 编写的,其发布到 App Store 是整个 Flet 项目中的一个重要里程碑。这是一个成功的证明,表明您可以仅使用 Python 创建出色的移动应用程序,并将其打包以便在 App Store 中被接受!

按照本指南 开始在 iPhone 或 iPad 上测试您的 Flet 应用程序。探索应用程序、浏览图库、尝试示例项目和应用程序设置。

我要感谢 Kivy 项目 制作了一个 iOS 工具链,我们使用它来编译适用于 iOS 设备的 Python 解释器和依赖项。我们发布了 serious_python 包,用于将 Python 运行时添加到任何 Flutter 应用程序中。

常见问题解答

何时支持 Android?

很快。它现在是我们的首要任务,我们已经开始研究它。

如何将我的 Flet 应用程序打包到 App Store?

我们将提供一个项目模板,用于引导 Flutter 应用程序,并提供指南,说明如何将 Flutter、serious_python 包和您的 Python 应用程序结合在一起,创建一个独立的 iOS 应用程序并将其发布到 App Store。

今年晚些时候,我们将创建一个 CI 管道以完全自动化该过程。

请查看 serious_python 的自述文件,了解如何创建 Flutter 引导程序并打包您的 Python 应用程序以在其中运行。使用 flet_example 项目作为起点。

Flet v0.8.0 发行说明

要在 iOS 上进行测试,您需要将 Flet 安装升级到 v0.8.0。

在 v0.8.0 中 进行了很多更改,并且有一些重大更改。在您升级到 0.8.0 时请耐心等待,并让我们知道您是否遇到任何问题。

尽情享受吧!