Repository navigation
🌈 TDesign Flutter 1.0.0 2026-10-15
TDesign Flutter 1.0 正式发布!
本次版本围绕组件 API、主题体系、默认视觉和交互体验完成系统性升级,统一常用组件的使用方式,并增强表单、上传、选择器、图片预览、表格和轮播等能力。
✨ 本次发布重点
- 统一组件 API:统一
T前缀、内容插槽、回调与受控状态,梳理 Controller 和浮层职责,移除旧版兼容入口及重复配置。 - 完善主题体系:通过全局 Token、组件 Theme、局部主题和实例配置定制样式,统一深浅色及主题切换表现。
- 提升视觉与交互一致性:集中优化尺寸、排版、状态反馈、文字缩放和无障碍体验,使默认表现更贴合 TDesign 设计规范。
- 增强常用能力:新增标准选择器弹层、上传列表与拖拽排序、图片预览缩放、自定义徽标,以及表格、轮播和进度条配置。
📖 升级到 1.0.0
1.0 包含不兼容的 API 和默认行为调整,最低要求 Flutter ≥ 3.32.0、Dart ≥ 3.8.0。
从 0.2.7 升级时,请先阅读 0.2.7 → 1.0 迁移指南(仓库版本),按项目实际使用的组件迁移公共配置、参数、回调与业务流程。不能仅通过替换 TD 前缀完成升级;编译通过后,还需回归默认视觉、受控状态、确认/取消和异步操作。
🚨 Breaking Changes
- 公共 API 与运行环境
TThemeData- 统一全局 Token、组件 Theme、局部主题和实例配置的职责,移除重复的样式与行为入口;内置文字、图标、控件、Tooltip、反馈及滚动表现由 TDesign 配置控制,不再继承外部 Material/M2/M3 的默认或显式配置,自定义内容保留调用方主题。(#1146、#1157)
- 调整语义 Token 名称及默认颜色、字体、间距和圆角;
grayColor3/5/11分别调整为#E7E7E7、#C5C5C5、#383838,Gy4 修正为#DCDCDC。依赖旧 Token 或默认视觉的应用需复核主题。(#1104、#1143、#1146) - 主题复制统一使用
copyWith(name: ..., spacerMap: ...),移除旧复制包装、ofColor/ofFont/ofCorner/ofFontFamily/ofShadow/ofExtra和公开parseThemeData;copyWith/lerp返回TThemeData。(#1152)
TIcon / TIcons:图标迁移到TIcon与独立图标包的TIcons;旧all改为allIconsMap,部分旧图标名称不再提供同名常量,替代方式见迁移指南;独立TIcon默认尺寸为 24dp,颜色为主文字色。(#967、#1146)TButtonTTextTDivider:统一默认线条、文字、间距和垂直尺寸;垂直分割线默认左右间距由 8dp 改为 16dp。(#1044、#1101)TLink:移除互斥的variant,改为独立组合下划线及前后图标;统一尺寸、状态和无障碍行为,配色参数由colorScheme改为colorPreset。(#1043、#1146)TFabTForm:字段约束统一使用validator,移除TFormField.rules;横向标签字号改为 16px,竖向保持 14px,表单根节点默认使用容器背景色。(#1038、#1102、#1146)TInputTTextarea:移除 Materialdecoration透传,由组件 Theme 管理容器与输入视觉;内置标题默认横排,原竖排效果使用layout: TTextareaLayout.vertical,内置编辑视觉使用 TDesign 配置。(#1038、#1111、#1157)TSearchBar:取消按钮、自动聚焦和样式入口统一为actionText/onActionPressed/autofocus/TSearchBarThemeData;内置文字、操作和编辑视觉使用 TDesign 配置。(#1051、#1157)TCheckbox / TCheckboxGroupTRadio / TRadioGroupTSwitch:加载态改为独立loading参数,移除TSwitchVariant.loading;未选中轨道默认使用组件背景激活色。(#1050、#1146)TRate:移除TRateThemeData.showText,评分文案统一由texts控制;整星点击、长按和拖动默认显示评分提示,可通过showValueIndicator: false关闭。(#1056)TUpload:文件点击回调统一为onFileTap,取代onPreview/onRetry。(#1047)TCalendar:firstDayOfWeek改为TCalendarFirstDayOfWeek枚举,日期格模型改为不可变快照;使用日期受控值并通过value/onChanged更新,弹层与确认流程由业务组合。(#942、#953、#1059)TPicker:选择内容与弹层、标题和确认流程分离;父级未接收并回写onChanged时,滚轮停止后恢复受控value,标准弹层可通过TPickerPopup组合。(#921、#926、#1062、#1121)TDateTimePicker:选择内容与业务确认流程分离,按受控值回写;弹层与标题操作使用TPickerPopup或TPopup组合。(#921、#926、#1121)TCascader:分支点击后等待调用方回写value再推进层级,业务需在onChanged中接收并回写候选路径。(#1060)TPopup- 统一使用
TPopupOptions + TPopupHandle管理展示、关闭和结果;蒙层配置集中到TPopupOverlayConfig,透明度写入颜色 alpha,动画时长使用TPopupOptions.animationDuration。(#946、#1037、#1146) - bottom/center 默认只展示
child,标题和操作通过headerBuilder + TPopupHeader组合,移除旧标题和确认/取消构建参数;生命周期使用onVisibleChange/onOpened/onClosed。(#1037) - left/right 默认改为无圆角全高矩形;
useSafeArea默认改为false,如需安全区避让须显式开启。(#1037)
- 统一使用
TPopoverTActionSheetTDialog:普通操作默认改为浅色填充;actionsPadding/actionSpacing改为可空并从主题 Token 解析默认值;三项及以上混合角色操作默认按主要/危险优先排序。(#1036)TDrawerTToastTMessageTNoticeBarTLoading:size改为逻辑像素数值,默认 20,移除TLoadingSize;动画默认时长由 2000ms 改为 800ms,图文排列默认由竖向改为横向。(#1031)TSwipeCellTPullDownRefresh:统一使用TPullDownRefresh,移除TRefreshHeader/TRefreshThemeData;默认loadingBarHeight=50、maxBarHeight=80,触发阈值由 48 改为 50。(#1029)TTabsBar:形态统一为line/tag/card,调整 Tag 主题字段和默认视觉;移除TTab.badge,改用TTab(child: TBadge(child: ...))组合。(#1072)TTabBarTSideBar:style改为非空variant(line/tag),默认宽度改为 103;徽标使用TBadgeConfig?,默认定位在文字右上角;移除 Theme 的style/height/selectedColor,选中样式统一通过selectedTextStyle配置。(#1083、#1141、#1146)TNavBarTIndexes:吸顶、方向和胶囊模式统一由组件实例管理,移除 Theme 中的同义状态入口;调整侧栏、按压提示和锚点的默认尺寸、字体、颜色及间距。(#1081)TBackTop:shape/visibilityOffset使用非空实例默认值,移除 Theme 同义状态;onPressed改为回顶完成通知,配色参数统一为colorPreset。(#1079、#1146)TSteps:使用TSteps.progress/selectable/display区分进度、可选择和纯展示模式,以indicator/onChange替代simple/readOnly/verticalSelect;success状态更名为process,successIcon更名为icon,移除持有业务模式的 Theme。(#1084)TBadge:默认形态更名为circle,移除TBadgeVariant.small,尺寸使用TBadgeSize.medium/large;统一预设、自定义及组合组件的徽标配置语义。(#1071、#1141)TTagTAvatarGroup:调整默认描边、阴影及可见成员的尺寸继承,依赖旧头像缩放或描边表现的布局需复核。(#1146)TCell:有主内容时,note改用受约束的自然宽度分配。(#1143)TCollapse:展开状态统一由List<T> value/onChanged管理,移除旧 Panel 状态和索引回调 API。(#1089)TImage:形状和适配方式分别使用TImageShape与BoxFit,默认改为方形和拉伸填充。(#1087)TImageViewer:关闭完成通过TImageViewer.show返回的 Future 感知,移除onClose和无实际蒙层区域的barrierDismissible。(#1091)TSwiperTProgress:使用.linear/.plump/.circular/.microCircular/.button/.microButton六个命名构造函数替代variant;按形态统一有效参数、尺寸、圆角、标签位置和交互语义,线性进度百分比默认显示在右侧。(#1092、#1143)TTable:默认列宽改为自动均分,TTableColumn.width改为可空;onCellTap改用TTableCellContext。(#1140)TTreeSelect:调整默认列宽,避免在 375px 容器中使用两列或三列布局时水平溢出。(#1065)TResult:状态统一为status/TResultStatus,描述改为description,替代旧variant/TResultVariant/subtitle。(#1093)TSkeleton:预设构造的variant改为非空,原variant: null改用TSkeleton();自定义布局使用TSkeleton.custom(layout: ...)。(#1094)TFooter:移除variant/width,通过logo/links/text组合内容,未设置高度时由内容自然撑开;品牌内容可与说明文案共存,调整链接分隔间距和颜色。(#1088、#1143)TEmpty:移除场景枚举和内置操作参数,使用operationWidget 组合操作区。(#1086)TDropdownMenu:animationDuration改为可空,显式值优先于主题;单选和多选选项区默认最大高度改为 280dp,超出后在面板内滚动,可通过maxHeight覆盖。(#1034、#1146)
🚀 Features
TButton:新增渐变背景能力。(#1005、#1007、#1010、#1018、#1021)TIcon / TIcons:图标包升级至 0.0.6,新增tablet、tablet-filled图标。(#1045)TText:支持TextScaler、语义标识和文本选区颜色,未显式设置缩放时遵循系统无障碍策略。(#1042)TForm:支持字段级校验、清除校验状态和外部错误注入。(#1038)TSearchBar:支持加权字数限制、受控操作按钮、焦点回调和实例级文字对齐。(#1051)TUpload:新增列表布局TUploadLayout.list、长按拖拽排序draggable和可重试失败状态retryableError。(#1047)TDateTimePicker:新增月日选择模式。(#1061)TPicker:新增TPickerPopup.show,统一 Picker 与 DateTimePicker 的标准弹层尺寸和配置。(#1121)TCascader:支持按活动层级展示次级标题。(#1060)TPopover:新增TPopoverAnchor与TPopoverController,支持open/close/isOpen控制展示。(#1099)TDialog:新增可选barrierResult/closeButtonResult,用于区分蒙层与关闭按钮的关闭来源。(#1036)TDrawer:showTDrawer新增蒙层点击通知onOverlayClick和关闭后销毁策略destroyOnClose。(#1080)TToast:支持可见半透明蒙层,并可独立控制是否拦截背景交互。(#1018、#1154)TSwipeCell:面板展开后,点击本格或外部区域可自动关闭。(#1021)TPullDownRefresh:默认启用 3 秒刷新超时,超时通过onStateChanged(timeout)通知并自动结束刷新,refreshTimeout: null可关闭;配置onLoadMore后支持按lowerThreshold触底加载。(#1029)TTabsBar:新增 small/large 尺寸和disabledLabelStyle禁用标签样式入口。(#1072、#1100)TTabBar:新增iconTextLayout,支持图标与文字左右排列。(#1146)TIndexes:新增initialIndex初始定位与useSafeArea安全区配置;竖向索引条超高时支持滚动和点击选择,未溢出时支持拖动选择。(#1081、#1117、#1160)TBackTop:新增 light/dark 配色预设及视觉定制字段。(#1079)TBadge:新增方形、气泡、左右带状角标和左右三角角标,支持位置偏移;通过TBadge.custom/TBadgeConfig统一预设、自定义和组合徽标。(#1071、#1106、#1141)TTag:支持在组件 Theme 中分别定制 danger/success 基础色和 success 浅色填充。(#1146)TAvatar:新增形状、实例颜色及字符文字样式配置。(#1090)TAvatarGroup:新增成员尺寸和方向感知的层叠配置。(#1090)TCollapse:新增leadingBuilder/trailingBuilder组合标题前后内容;expandIconBuilder可替换展开图标,显式传入null可隐藏。(#1089)TImage:新增onLoad/onError事件,空来源显示加载态、空字符串显示失败态;完善图片类型及默认、自定义加载和失败提示。(#1087)TImageViewer:支持双击、双指缩放和下拉关闭,放大时自动暂停切图与轮播。(#1091)TSwiper:支持实例级切换时长、动画曲线和相邻卡片缩放效果。(#1095)TProgress:支持常规、警告、错误和成功状态、状态图标、百分比、线性渐变,以及辅助技术可读的进度描述。(#1092)TTable:新增onRowTap、实例级bordered/stripe、行 key、合并单元格、列最小宽度和固定高度,优化排序、固定列及横向滚动交互。(#1140)TResult:统一内置状态图标、字号与间距,支持通过iconSize/descriptionStyle定制图标和描述样式。(#1093)TSlider:新增 normal/capsule 视觉形态,统一胶囊轨道、游标和刻度绘制。(#1144)
🐞 Bug Fixes
TThemeData:修复稀疏自定义深色 JSON 的未配置背景、文字及引用错误回退为浅色 Token 的问题。(#1169)TButtonTText:修复实例与组件 Theme 的样式优先级、子 Span 样式继承,以及内置单行文字在固定内容槽中的垂直偏移,保留多行正文、显式排版和自定义内容。(#1042、#1160)TFontLoader:并发加载共享 Future,加载失败可重试,并拒绝同名字体切换 URL。(#1042)TForm:修复校验时机、错误状态和 placeholder 的主题优先级,以及横排表单标签的间距与行高。(#1038、#1144)TInputTTextarea:修复横排标签与输入提示文字未对齐的问题。(#1144)TSearchBar:修复背景高度、禁用操作文字、只读态清除按钮及中文输入法组合文本截断问题。(#1051)TCheckbox / TCheckboxGroup:修复单行、多行和卡片文案对齐、禁用未选样式、卡片间距及分割线起点和残留线问题;方形指示器圆角修正为 1.5px。(#1104、#1143、#1144)TRadio / TRadioGroup:修复群组分割线、横向间距、未选禁用态、状态文案和卡片内容安全间距。(#1119)TSwitch:修复长状态文案被额外缩字或不可读省略的问题,保留显式尺寸和两种状态的组件字号。(#1160)TRate:修复整星小数归一化、半星及 RTL 命中、拖动清零、交互生命周期、读屏信息和长文案布局;统一辅助文案的垂直对齐、默认颜色及未显式配置的字体属性。(#1056、#1070、#1108)TStepper:修复编辑草稿后加减按钮边界状态未及时更新、数字跨平台垂直对齐、三档尺寸行高,以及未设置主题字段时的尺寸和颜色插值问题。(#1064、#1122)TUpload:修复异步或重复选择时覆盖最新文件、丢失已添加文件,以及使用过期回调和文件限制的问题;区分选择器错误与业务回调异常。(#1151、#1153)TCalendar:修复日期文字默认颜色,日期、星期和月份区域按内容适配,保留显式高度、自定义 builder 和日期选择能力。(#1118、#1160)TPickerTDateTimePicker:修复候选值被父级拒绝后的自动回滚,以及文案回调或展示配置更新导致滚轮重建、连续拖动和惯性中断的问题。(#1061、#1159)TCascader:修复受控交互、键盘操作、层级面板尺寸与主题回退,以及层级图标颜色和标题间距。(#1060、#1144)TPopup:修复标题默认出现诊断下划线的问题,保留显式文字装饰。(#1062)TPopover:修复角落气泡及箭头的 12px 边缘间距、切换触发器后首次点击只关闭旧气泡,以及动态主题切换时可空样式被错误插值为透明色或零值的问题。(#1099、#1129、#1143)TActionSheet:修复列表自适应高度、带描述项高度、空描述占位和长列表滚动;统一宫格图标槽位、描述间距、分页指示点、取消区及分隔线。(#1030、#1123)TDialog:修复长内容缺少可见滚动条和关闭图标实际边距不正确的问题。(#1124)TToast:修复允许背景交互时可见蒙层仍拦截点击的问题。(#1154)TMessage:修复图标与文字间距及默认左右外边距,跑马灯宽度和结束位置适配显式字体、字距与系统文字缩放,避免结束后残留文字。(#1035、#1127、#1157)TNoticeBar:修复跑马灯滚动距离及首帧宽度计算;前缀与正文间距统一跟随spacer8,避免自定义图标缺少间距,并修复主题过渡时尺寸归零或颜色变透明的问题。(#1032、#1128)TLoading:修复customIcon在icon为空时的显示优先级,使其持续旋转并响应动画时长更新;修正 activity 指示器默认颜色。(#1031、#1126)TFab:修复拖拽返回起点附近的误触,磁吸改为可取消的平滑动画,新拖拽或布局变化可终止旧动画。(#1040)TSwipeCell:修复外层文字样式错误覆盖操作项默认反色文字的问题。(#1131)TPullDownRefresh:修复暗色模式下刷新状态文案层级过亮的问题。(#1145)TTabsBar:修复自定义标签使用 Column/Expanded 时的高度约束异常,保持内置标签居中及默认胶囊高度。(#1160)TTabBar:修复一次手势触发重复选中回调、指示器动画模式切换及连续切换时的位置跳变,并校正胶囊圆角和弱选中徽标定位;修复局部文字及菜单主题覆盖、面板背景和可空主题字段插值问题。(#1085、#1144)TSideBar:修复徽标偏离文字右上角,以及字体放大时远端选中项无法准确滚动显露的问题,不增加额外选择回调;修复主题过渡时回退样式被半透明颜色或零内边距临时覆盖的问题。(#1135、#1137、#1160)TIndexes:修复主题切换时固定默认尺寸在动画中间态跳变的问题。(#1137)TNavBar:明确标题 Widget 自带样式优先于默认标题样式,修复主题切换时间距、边框和阴影跳变。(#1082、#1136)TSteps:修复局部文字主题覆盖失效和横向纯展示节点状态不一致的问题。(#1084)TBadge:修复中文、跨平台及文本缩放下的垂直对齐、默认位置和尺寸偏差,以及 bubble 被 Material 胶囊形状错误裁剪的问题。(#1070、#1071、#1106、#1107、#1141)TAvatar / TAvatarGroup:修复头像组形状裁剪、双向层叠、非法尺寸边界、成员尺寸、徽标圆点规格及主题动画插值问题。(#1090、#1141)TTag:修复配色和方角在动态主题切换时的中间帧跳变或意外半透明。(#1146)TCell:修复辅助信息默认字号、右侧插槽对齐,以及局部文字 Theme 覆盖部分字段时丢失默认字号、行高和字重的问题。(#1026、#1146)TCollapse:修复标题默认字重被上层主题意外加粗的问题。(#1143)TImageViewer:图片加载失败时显示错误占位,优化关闭动效、全屏背景、页码及顶部操作按钮的尺寸和交互状态。(#1091)TSwiper:修复默认圆角、卡片露出、fraction 胶囊、控制按钮及外置分页布局;修复显式按钮样式合并、状态回退与主题过渡,保留自定义图标及图层的调用方主题。(#1095、#1157)TProgress:修复按钮形态轨道和渐变绘制,以及自定义 Material 主色错误改写状态语义色,以及环形内圆在主题切换时跳变或意外半透明的问题。(#1092、#1146)TResult:修复主题切换时图标尺寸不稳定和部分文字样式覆盖丢失默认属性的问题;自定义插图保留原始比例,内置状态提供可读语义。(#1093)TSkeleton:统一占位色、16dp 行间距、图片圆角和 2 秒闪烁动效,改善预设与加载过程的视觉一致性。(#1094)TSlider / TRangeSlider:修复轨道、滑块、数值标签及禁用态配色,数值提示常驻显示,垂直标签保持正向;修复 Flutter 3.47 下连续/离散滑块的提示兼容问题。(#1010、#1063)TTreeSelect:补齐选中根节点左侧指示条。(#1144)TTimeCounter:修复动态启停、方向切换、终点回调和毫秒格式处理异常,统一三档尺寸及方形、圆形和单位倒计时展示。(#1096)TDropdownMenu:修复多列宽度不一致、蒙层透明度丢失、仿射滤镜越界拉伸时菜单与面板分离,以及禁用项背景和单选项错误文字高亮问题;统一菜单触发项与筛选面板的默认视觉。(#1034、#1125、#1144)- 组件文字布局:修复 Tag、Switch、选择卡片、ActionSheet、Progress、Refresh 和 Upload 等组件在默认尺寸下的文字裁切,保留显式尺寸与原生交互。(#1160)
- Flutter 版本兼容:修复 DropdownMenu、CupertinoSwitch 和 Swiper 的跨版本 API 兼容问题,兼顾 Flutter 3.32 与较新版本的行为。(#1010)
感谢所有参与开发、反馈和贡献的社区伙伴!