当前位置: 首页 > news >正文

Slot API 设计模式

整体架构分析

一个典型的组合式UI架构,使用了Slot API 设计模式。图表示意:

MediaItemLayout (核心布局容器) ├── 参数: │ ├── leading: () -> Unit // 左侧内容 │ ├── center: () -> Unit // 中间内容 │ └── trailing: () -> Unit // 右侧内容(可选) │ ├── 内部结构: │ ├── Row (水平布局) │ │ ├── leading() // 左侧 │ │ ├── center() // 中间(有weight=1) │ │ └── trailing() // 右侧 │ └── HorizontalDivider // 分割线 │ └── 两种具体实现: ├── MediaItemNormal // 普通样式:封面 + 标题/副标题 └── MediaItemWithIndex // 带序号样式:序号 + 封面 + 标题/副标题 + 时长

详细解析

1.核心布局组件:MediaItemLayout

@ComposablefunMediaItemLayout(modifier:Modifier=Modifier,leading:@Composable()->Unit,// 左侧插槽center:@Composable()->Unit,// 中间插槽trailing:(@Composable()->Unit)?=null,// 右侧插槽(可选)showDivider:Boolean=true)

这是一个布局容器组件,特点:

  • Slot API 设计:通过函数参数接收内容
  • 可复用性强:同样的布局可以展示不同内容
  • 灵活配置:可以选择是否显示分割线、是否显示右侧内容

2.两种具体实现

A.MediaItemNormal- 普通媒体项
[ 封面图片 ] [ 标题 ] [ 副标题 ]

用于:播放列表、专辑列表等不需要序号的地方

B.MediaItemWithIndex- 带序号媒体项
[ 01 ] [ 封面图片 ] [ 标题 ] [ 3:45 ] [ 副标题 ]

用于:歌曲列表、播客列表等需要显示序号和时长的场景

3.子组件分工

组件功能备注
IndexBox显示序号/播放动画选中时显示音乐波动画
CoverBox显示封面图片可显示播放动画
TitleSubtitleColumn标题和副标题垂直排列,支持省略
DurationText显示时长格式化时间显示

数据流

MediaItemUiModel (数据模型) ├── imageSrc → CoverBox ├── title → TitleSubtitleColumn ├── subTitle → TitleSubtitleColumn ├── index → IndexBox (仅MediaItemWithIndex) └── duration → DurationText (仅MediaItemWithIndex)

设计模式优势

1.开闭原则

  • 新增样式只需创建新的组合函数
  • 不需要修改MediaItemLayout

2.单一职责

  • 每个组件只做一件事
  • MediaItemLayout只负责布局
  • CoverBox只负责封面显示
  • TitleSubtitleColumn只负责文字显示

3.Slot API 优势

// 可以轻松创建新的变体@ComposablefunMediaItemWithAction(uiModel:MediaItemUiModel,onActionClick:()->Unit){MediaItemLayout(leading={CoverBox(...)},center={TitleSubtitleColumn(...)},trailing={IconButton(onClick=onActionClick){Icon(Icons.Default.MoreVert,"更多")}})}

使用示例

// 普通样式MediaItemNormal(uiModel=MediaItemUiModel(imageSrc="album_cover_url",title="Song Title",subTitle="Artist Name"),isSelected=false,isPlaying=false)// 带序号样式MediaItemWithIndex(uiModel=MediaItemUiModel(imageSrc="album_cover_url",title="Song Title",subTitle="Artist Name",index=5,// 显示 "06"duration=225000// 显示 "3:45"),isSelected=true,// 显示播放动画isPlaying=true// 动画播放状态)

总结

这个文件展示了优秀的Compose架构设计

  1. MediaItemLayout是核心:作为布局容器,定义了整体的三栏结构
  2. Slot API 提供灵活性:通过函数参数接收内容,支持多种变体
  3. 函数组合实现复用:小组件可以独立使用,也可以组合成复杂组件
  4. 数据驱动UIMediaItemUiModel包含所有显示数据
  5. 状态驱动交互:通过isSelectedisPlaying控制UI状态

这种设计让代码:

  • ✅ 易于维护:每个组件职责清晰
  • ✅ 易于扩展:添加新样式很简单
  • ✅ 易于测试:组件可以独立测试
  • ✅ 易于理解:逻辑分层清晰
http://www.jsqmd.com/news/329821/

相关文章:

  • 计算机Java毕设实战-基于SSM实现的在线购物商城系统基于SSM的商城管理系统【完整源码+LW+部署说明+演示视频,全bao一条龙等】
  • 计算机毕业设计springboot可视化游戏社区论坛 基于SpringBoot的游戏玩家社区与资讯聚合平台 面向游戏爱好者的交互式攻略分享与论坛系统
  • 解决AI画图的最后一公里-Next AI Draw.io MCP实践
  • Java毕设项目推荐-基于SpringBoot的高校教室资源管理平台的设计与实现高校多媒体教室管理系统预约、审核、归还、统计【附源码+文档,调试定制服务】
  • 【课程设计/毕业设计】基于springboot的中文社区交流平台信息交流、资源共享和互动讨论【附源码、数据库、万字文档】
  • 2026.2 做题记录
  • 小白前端速成:用HTML+CSS做出超酷边框流动特效(附实战细节)
  • 【课程设计/毕业设计】基于SSM的商城管理系统基于SSM框架的网上购物商城及电商后台管理系统【附源码、数据库、万字文档】
  • Java毕设选题推荐:基于SSM的在线商城系统基于SSM的商城管理系统商品浏览、商品购买、购物车、商品下单、支付【附源码、mysql、文档、调试+代码讲解+全bao等】
  • 【C++STL】List详解 - 教程
  • 【DVMSVM诊断网络】基于离散韦格纳分布DWVD结合MCNN-SVM多尺度卷积神经网络和支持向量机的故障诊断研究附Matlab代码
  • 【智能算法应用】基于融合Q-learning-鲸鱼优化算法求解清洁机器人多点路径规划问题附Matlab代码
  • 小学生0基础学大语言模型应用(第 16 课 《列表魔法箱:一次装很多数据》)
  • test 20260201
  • 【DVMLSTM诊断网络】基于离散韦格纳分布DWVD结合MCNN-LSTM多尺度卷积神经网络和长短期记忆网络的故障诊断附Matlab代码
  • 2026硬硅酸钙石保温板推荐榜:源头厂家品质之选,高密度硅酸钙板/硅酸钙保温管,硬硅酸钙石保温板厂商排行榜单
  • Java毕设选题推荐:基于springboot的中文学习社区论坛交流平台中文社区交流平台【附源码、mysql、文档、调试+代码讲解+全bao等】
  • 计算机毕业设计springboot博物馆藏品管理系统 基于SpringBoot的博物馆文物数字化管理平台 智慧文博资产信息管理系统
  • Java毕设项目:基于SSM的商城管理系统(源码+文档,讲解、调试运行,定制等)
  • 02_dify-plugin-daemon使用源码本地启动
  • 2026年优秀的上海外滩广告公司哪家好,地铁广告/上海外滩广告/上海白玉兰广场广告,户外led大屏广告公司承包商哪家好
  • Java计算机毕设之基于ssm的网上购物商城管理系统设计实现基于SSM的商城管理系统(完整前后端代码+说明文档+LW,调试定制等)
  • 计算机毕业设计springboot校园闲置物品交易平台 高校二手资源流通与共享平台 基于SpringBoot的校园物品置换与交易系统
  • 香港美妆加盟优选榜:2026年口碑与实力并存,市场美妆加盟精选优质厂家
  • Java计算机毕设之基于springboot的中文社区交流平台提供学习资源、交流平台和技术干货的中文社区(完整前后端代码+说明文档+LW,调试定制等)
  • Flutter 三端应用实战:OpenHarmony “极简文本字符计数器”——量化表达的尺度
  • 计算机毕业设计springboot用户打车软件系统 基于SpringBoot的智能网约车服务平台的设计与实现 SpringBoot框架下城市出行预约叫车系统开发
  • 2026年黑龙江营销推广公司推荐:年度综合评测与用户口碑实证分析
  • OpenStack网络命名空间和虚拟机IP获取的关联性分析 - wanghongwei
  • 【计算机毕业设计案例】基于springboot的技术交流论坛中文社区交流平台(程序+文档+讲解+定制)