ARTICLE DETAIL

资讯详情

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

Flet InputBorder 详解:三种输入框边框样式与按状态定制

Flet InputBorder 详解:三种输入框边框样式与按状态定制 前端跨平台桌面应用移动开发【免费下载链接】fletBuild realtime web, mobile and desktop apps in Python only. No frontend experience required.项目地址https://gitcode.com/gh_mirrors/fl/flet点击查看免费下载flet.InputBorder是 Flet 中所有「带装饰输入区」的 Material 表单控件如TextField、DropdownM2共用的边框类型体系。它由三个可直接实例化的子类——OutlineInputBorder描边圆角矩形、UnderlineInputBorder底部下划线与NoInputBorder无边框组成通过border属性以普通值或「按交互状态ControlState」映射的形式交给控件渲染。读完本文你将掌握三种边框各自的参数语义、如何让边框随聚焦/错误状态切换以及 1.0 版本中InputBorder从枚举到类的演进细节。InputBorder 是什么InputBorder是 form_field_control.py 中定义的边框基类专门描述「围绕表单控件装饰输入区」的边框绘制方式。它本身不可直接实例化——其__post_init__会直接抛出TypeError源码注释明确说明应使用OutlineInputBorder、UnderlineInputBorder或NoInputBorder三个子类。value class InputBorder(metaclass_InputBorderMeta): _type: Optional[str] field(initFalse, reprFalse, compareFalse, defaultNone) def __post_init__(self): raise TypeError( InputBorder is not intended to be instantiated directly; use OutlineInputBorder, UnderlineInputBorder, or NoInputBorder. )每个子类在__post_init__中设置内部类型标记_typeoutline/underline/none该标记会被传递到 Flutter 渲染层决定实际绘制的边框形态。三种边框类型与参数详解OutlineInputBorder描边圆角矩形OutlineInputBorder沿装饰区容器的四边绘制一个圆角矩形是文本框最常用的「默认边框」形态。它支持三个参数参数类型默认值说明sideOptional[BorderSide]None边框线条的颜色与粗细。为None时颜色和粗细由 Material 主题按交互状态解析例如聚焦时使用主题主色显式传入的side作用于启用enabled状态border_radiusBorderRadiusValue4圆角矩形四角的圆角半径gap_paddingNumber4.0为浮动标签floating label在边框上「挖出的缺口」两侧的水平内边距必须为非负数其中gap_padding是OutlineInputBorder独有的参数当控件设置了label且标签浮动到边框线上时边框会为标签留出一个缺口gap_padding控制缺口两侧留白的大小。UnderlineInputBorder底部下划线UnderlineInputBorder只在装饰区容器的底部边缘绘制一条水平线是 Material 风格「扁平输入框」的典型样式参数类型默认值说明sideOptional[BorderSide]None下划线的颜色与粗细语义同OutlineInputBorder.sideborder_radiusBorderRadiusValueBorderRadius.only(top_left4, top_right4)容器四角的圆角半径。默认只圆化顶部两个角注意border_radius在这里的作用比较特殊它圆化的是容器填充fill的边角——即当控件设置了filledTrue时填充区域的顶部圆角而绘制出来的边框仍然是底部那条水平线不会因为圆角变成异形。NoInputBorder无边框NoInputBorder不绘制任何边框对应 Flutter 的InputBorder.none。它没有任何额外参数通常与filledTrue搭配让输入区呈现为一块纯色填充的无边框区域。通过 border 属性接入表单控件InputBorder及其子类通过FormFieldControl.border属性作用于控件border: Optional[ControlStateValue[InputBorder]] None从源码看form_field_control.pyborder是ControlStateValue[InputBorder]类型传入单个InputBorder实例所有交互状态共用同一套边框形状传入「状态 → 边框」的字典可针对ControlState.DEFAULT、ControlState.FOCUSED、ControlState.ERROR、ControlState.DISABLED等状态分别指定不同边框当某状态的边框side未显式指定时边框颜色与粗细由 Material 主题针对该状态自动解析例如聚焦态用主题主色、错误态用红色这也是「只传形状、颜色交给主题」的推荐写法。FormFieldControl还暴露了filled属性填充输入区背景与error属性错误提示文案它们与边框联动当error非空时边框颜色会动画过渡为红色。若想手动接管错误态的边框就需要用按状态的border字典。示例一三种边框样式展示关联文档的showcase示例input_border/showcase/main.py在一屏内并排演示四种形态import flet as ft def main(page: ft.Page): page.add( ft.SafeArea( contentft.Column( controls[ ft.TextField( labelOutline, borderft.OutlineInputBorder(), hint_textThe default border, ), ft.TextField( labelUnderline, borderft.UnderlineInputBorder(), hint_textA line along the bottom edge, ), ft.TextField( labelUnderline filled, borderft.UnderlineInputBorder(), filledTrue, hint_textThe radius rounds the fills top corners, ), ft.TextField( labelNone, borderft.NoInputBorder(), filledTrue, hint_textDraws no border at all, ), ], ), ), ) if __name__ __main__: ft.run(main)OutlineOutlineInputBorder()使用全部默认参数即 4 像素圆角、gap_padding4边框颜色交给主题按状态解析——这是TextField的默认观感Underline底部一条下划线其余三边无边框Underline filledfilledTrue后输入区出现填充色此时UnderlineInputBorder默认的顶部圆角top_left4, top_right4会圆化填充区域的上边角NoneNoInputBorder()配合filledTrue得到一块干净的无边框填充输入区。示例二自定义样式与按状态边框关联文档的styling示例input_border/styling/main.py展示了参数定制与状态绑定的完整写法import flet as ft def main(page: ft.Page): page.add( ft.SafeArea( contentft.Column( controls[ ft.TextField( labelCustom outline, borderft.OutlineInputBorder( border_radius12, gap_padding8, sideft.BorderSide(width2, colorft.Colors.TEAL), ), ), ft.TextField( labelCustom underline, borderft.UnderlineInputBorder( border_radiusft.BorderRadius.only( top_left12, top_right12 ), sideft.BorderSide(width3, colorft.Colors.DEEP_ORANGE), ), filledTrue, ), ft.TextField( labelPer-state borders, hint_textFocus me, border{ ft.ControlState.DEFAULT: ft.OutlineInputBorder( border_radius20, sideft.BorderSide(colorft.Colors.BLUE_GREY_400), ), ft.ControlState.FOCUSED: ft.OutlineInputBorder( border_radius20, sideft.BorderSide(width3, colorft.Colors.INDIGO), ), }, ), ft.TextField( labelError border, errorThis value is required, border{ ft.ControlState.DEFAULT: ft.OutlineInputBorder(), ft.ControlState.ERROR: ft.UnderlineInputBorder( sideft.BorderSide(width3, colorft.Colors.PINK), ), }, ), ], ), ), ) if __name__ __main__: ft.run(main)逐段解读自定义描边border_radius12加大圆角、gap_padding8加宽浮动标签缺口的留白、sideft.BorderSide(width2, colorft.Colors.TEAL)固定边框为 2 像素青色。这里side属于BorderSide类型来自 border.py其核心参数即width宽度与color颜色自定义下划线用ft.BorderRadius.only(top_left12, top_right12)手动指定顶部圆角配合 3 像素深橙色下划线并开启filledTrue展示圆角填充效果聚焦状态切换border传入字典DEFAULT状态为 20 像素圆角、蓝灰色细边框FOCUSED状态同为 20 像素圆角但变为 3 像素靛蓝色。聚焦时边框会在两种样式间切换这是官方推荐的「聚焦高亮」实现方式错误状态切换DEFAULT用默认OutlineInputBorder()ERROR则换成 3 像素粉色的UnderlineInputBorder()。配合errorThis value is required的错误文案输入校验失败时边框形态会整体变化。运行方式与 Flet 标准应用一致将上述代码保存为main.py在安装flet的 Python 环境中执行flet run main.py或直接python main.py即可看到效果。从源码看 InputBorder 的 1.0 演进InputBorder在 Flet 1.0 之前是枚举类型写法是borderft.InputBorder.OUTLINE或borderft.InputBorder.UNDERLINE。1.0 之后它被重构为类体系但为了保证旧代码兼容源码通过元类_InputBorderMeta提供了「遗留成员解析」机制_LEGACY_MEMBERS (OUTLINE, UNDERLINE, NONE)访问InputBorder.OUTLINE、InputBorder.UNDERLINE、InputBorder.NONE时会触发deprecated_warning并分别返回OutlineInputBorder()、UnderlineInputBorder()、NoInputBorder()的实例同时提示从 1.0.0 起弃用、计划在 1.3.0 移除见 form_field_control.py。同理FormFieldControl上旧的边框参数——border_radius、border_width、border_color、focused_border_width、focused_border_color——也全部被border属性取代并标注弃用border_radius→borderOutlineInputBorder(border_radius...)border_width/border_color→borderOutlineInputBorder(sideBorderSide(width..., color...))focused_border_width/focused_border_color→border{ControlState.FOCUSED: OutlineInputBorder(sideBorderSide(...))}如果你在升级到 1.0 的旧代码中看到关于这些参数的警告按上面的对应关系迁移即可。小结InputBorder的设计核心是「形状与颜色解耦」border只负责定义边框的形状描边/下划线/无与圆角、缺口等几何参数而颜色和粗细在side未指定时由 Material 主题按交互状态自动解析当需要完全掌控某个状态的观感时再用「ControlState→ 边框实例」的字典对状态逐一覆盖。掌握这三种子类与状态绑定语法就能为 Flet 的输入控件打造出与主题统一、又能随交互反馈的精致边框体验。赞分享前端跨平台桌面应用移动开发【免费下载链接】fletBuild realtime web, mobile and desktop apps in Python only. No frontend experience required.项目地址https://gitcode.com/gh_mirrors/fl/flet点击查看免费下载相关推荐Flet 渐变背景与按钮、输入框样式实战Container 渐变、ButtonStyle 状态化样式与 TextField 圆角输入框Flet 渐变背景与按钮、输入框样式实战Container 渐变、ButtonStyle 状态化样式与 TextField 圆角输入框 本篇技术指南以 Fle前端跨平台桌面应用移动开发komorebi 边框样式详解system / rounded / square 三种模式与底层绘制原理komorebi 边框样式详解system / rounded / square 三种模式与底层绘制原理 导读 border style 是 komore桌面应用深入解析 Coze Studio 前端全局 HTTP 客户端 coze-arch/bot-http拦截器、API 错误事件与统一错误处理深入解析 Coze Studio 前端全局 HTTP 客户端 coze arch/bot http拦截器、API 错误事件与统一错误处理 导读 在 Coze前端跨平台桌面应用移动开发上一篇Self-hosted AI Starter Kit完整指南快速构建本地AI工作流的终极方案下一篇mailcow-dockerized API开发指南构建自定义邮件应用创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表