SuperAPI AI 工具集

Skill 广场

找到适合任务的 Agent Skill,阅读介绍并复制安装命令。

更新于 11-15 00:13

编程与开发

41,121 个结果

delta-absent-not-infinite

该技能页面讨论在界面中渲染“变化值”时的一条编码准则:当没有上一期基线、或基线为空/为零时,变化值应当显示为“不存在”,而不是 +100%、无穷大或饱和整数。文档以 Kotlin 的 percentDelta 函数为例,要求在状态层丢弃空的上一期快照、在数值层对 before <= 0 返回 null,并保持可空类型直至 UI 分支渲染。页面还列举了若干陷阱:空基线下的 +100% 噪声、用破折号或 0 冒充缺失、Int 饱和、toInt() 截断导致小幅下降显示为 +0%、单色显示依赖符号区分涨跌、比较区间长度不一致、缺失基线时未移除图例与说明等,并给出 grep 与 awk 验证命令。

编程与开发9 次安装

derive-the-flag-dont-store-and-correct-it

该技能揭示 Kotlin/Jetpack Compose 中一类常见隐患:把本可由已有状态直接推导出的布尔值,另存为 remember/rememberSaveable 的 mutableStateOf,再用 LaunchedEffect 写回。文章说明这种做法为何严格劣于直接读取源状态:初始猜测值会在效果运行前先渲染一帧,造成闪显;仅修改种子值对已保存旧值的进程(旋转、后台回收后恢复)无效;同一派生标志还可能在多个 composable 中各自复制一份。技能给出正解——改用 remember + derivedStateOf 直接从源状态推导,从而不存在与源不一致的可能;并提供排查步骤:用 grep 定位 rememberSaveable 布尔声明及其邻近的 LaunchedEffect 赋值配对,结合冷启动观察首帧、旋转或后台恢复做热状态验证。

编程与开发9 次安装

desktop-deep-link-plumbing

本技能介绍如何在 JVM 桌面应用中端到端接通自定义 URL scheme 深链接,覆盖四个关键环节:操作系统注册、启动参数过滤、单实例转发以及将 URL 送达等待中的应用状态。内容按平台说明注册机制(macOS 的 CFBundleURLTypes、Windows 的 HKCU 注册表键、Linux 的 .desktop 与 update-desktop-database),并给出常见陷阱与验证命令,帮助排查“重定向不生效”这类静默失败问题。

编程与开发9 次安装

distinct-by-key-reset-cancel-per-item

该技能针对“每个条目一条流水线”的 Kotlin 协程模式:以条目 id 作为 distinctUntilChangedBy 的键,在切换到下一个条目之前取消上一个条目仍在进行中的工作,并采用“先重置、再填充”的顺序更新界面状态。技能说明了 collectLatest 与逐条目子任务句柄的配合方式、写入时 id 校验的必要性、可空键与错误键带来的陷阱,以及如何通过快速切换条目来验证取消与重置是否真正生效。

编程与开发9 次安装

dont-pre-animate-a-self-animating-property

这是一条来自 maxrave-dev/kotlin-footguns 的 Kotlin/Compose 开发经验条目,主题是:不要为组件自身已经负责动画的属性预先做动画。某些组件(如 Material3 中带内部 AnimationSpec 的组件)会自己驱动属性动画,此时应传入原始目标值(如 0f/1f 的硬切换),而不是传入 animateFloatAsState 等外部补间产生的平滑值。外部补间每秒产生约六十个略有差异的目标值,而组件的更新守卫会丢弃动画进行中到达的目标,导致只有第一个目标生效,属性卡在接近起点的位置(例如音频暂停后波纹仍停在接近满幅处)。文中给出了识别信号(参数文档说明该值会被动画、组件不暴露 animationSpec)、正确做法(传入组件要求的 () -> Float lambda、用布尔条件组合端点、基于 lambda 自身参数做门控)、无效做法(缩短自己的 tween、对自有 Animatable 用 snapTo)以及验证方法(用 javap 枚举 material3 中持有私有 AnimationSpec 的组件、用 grep 列出动画参数绑定、手动连续触发过渡)。

编程与开发9 次安装

dual-mode-persist-blocking-or-async

这是 Kotlin 协程实践中关于“双模式持久化”的技能条目:同一段挂起(suspend)保存逻辑,既能以阻塞方式执行,也能异步执行。阻塞模式用在销毁或释放路径上,因为此时协程作用域即将被取消,写操作必须同步完成;异步模式用在常规周期性保存上,不能阻塞调用方。条目重点说明了 fire-and-forget 在 teardown 阶段静默丢失写入的风险、默认参数带来的安全隐患、参数命名遮蔽协程构建器的问题,以及拆分保存体导致守卫条件漂移的陷阱。

编程与开发9 次安装

dual-source-queue-sync

该技能针对“双数据源播放队列同步”问题:播放引擎维护自有的媒体时间线(id、uri、元数据),应用侧维护更丰富的 UI 队列列表(封面、歌手、点赞状态等)。两者都表示队列,但只有引擎能作为顺序权威。方案是在引擎侧发生任何变更后,按媒体 id 从引擎时间线重新派生 UI 列表,把同步视为一次 join 而非 merge:时间线提供顺序,领域列表提供内容。文档还列举了多项陷阱,如反向派生、部分时间线时拒绝写入、空时间线需显式提前返回、按 id 匹配导致重复项坍缩、用户排序须先改引擎再改列表并重新发布索引、shuffle 下单双整数空间转换、所有回调与加载分支都需触发重派生、以及把 join 集中到 handler 而非各 composable。

编程与开发9 次安装

edit-a-shape-as-a-shape

该技能来自 maxrave-dev/kotlin-footguns,主题是“让控件具有值的形状”:当被编辑的值是一条曲线时,不要用 N 个滑块,而是绘制一条可拖拽的曲线,将其嵌入设置列表,并用原始指针循环处理手势、按手势提交一次。内容涵盖 Compose 状态草稿、rememberUpdatedState 防陈旧捕获、pointerInput 键控、Catmull-Rom 平滑与控制点钳制、回读格式化及验证方法。

编程与开发9 次安装

embed-media-engine-desktop

介绍在 JVM 桌面应用中嵌入原生 C 媒体引擎的工程实践,以 mpv 为例,围绕每个媒体项一个句柄、专用事件泵线程和单一应用线程管理句柄变更的模型,说明在 initialize 前固定输出驱动、在 initialize 后首次加载前创建渲染上下文、将属性写入限定在单一线程并加锁、让播放级设置覆盖所有活动句柄、对可选选项做特性检测、在两侧使用 C 区域格式化数字以及按序关闭并无限等待 join 等要点,并提供基于 grep 的代码验证方法。

编程与开发9 次安装

expect-actual-composable-capability

本技能介绍如何在共享 Compose 代码中以 @Composable expect 函数的形式暴露设备能力,并在具备该能力的平台上提供完整实现、在不具备的平台上提供返回中性值的桩实现。内容涵盖三种常见形态(测量、带撤销的效果、以状态读取的订阅)、常见陷阱(桩必须正确而非缺失、空实现与平台不支持的区别、中性返回值会被调用方当真、@Composable 注解必须成对出现、效果型能力必须自我撤销、测量需要缓存键、测量包含自身装饰条、平台实现中的 Activity 查找方式、版本分支与抑制注解应留在 actual 内),以及用 grep 命令验证每个 expect 在各源集都有 actual、找出桩实现、确认没有未实现分支、确认装饰条高度只有一个定义两处读取。

编程与开发9 次安装

fgs-state-ended-trap

该技能针对 Android 媒体应用在前台服务(FGS)状态下切换播放器时的竞态问题提供修复方案。当每首曲目使用独立播放器对象时,前一个播放器报告 ended 到新播放器接管之间约几十毫秒的窗口内,媒体会话查询到 ended 状态,导致前台服务注销通知并降级,部分厂商严格电源管理机型会直接冻结应用、播放中断。方案在转发播放器边界新增 @Volatile 抑制标志,仅在存在下一媒体项时于 getPlaybackState() 中将 STATE_ENDED 重映射为 STATE_BUFFERING,并在正常播放、就绪、加载失败、暂停/停止等所有退出路径清除标志。文中强调不要在事件流上过滤、不要无条件重映射、不要延长窗口,并给出 grep 验证与最严格电池优化下的手工测试方法。

编程与开发9 次安装

filter-chain-two-owners-one-writer

该技能页面面向媒体引擎开发场景,讲解当两个独立功能都需要写入同一个字符串属性(该属性保存完整的处理链)时应采用的编码模式:每个所有者各自维护一个字段,并且只有一个函数负责写入该属性。页面围绕Kotlin示例展开,说明直接写入会互相覆盖、清理路径容易被遗漏、空的处理链层级会生成前导逗号并使整条链解析失败、层级顺序影响增强是否削波、为处理链层级加标签可支持就地更新、@Volatile不能保证读-改-写原子性,以及每次新建句柄都从空链开始等问题,并给出用grep验证“只有一个调用点写入属性”的不变量和测试交错步骤的方法。

编程与开发9 次安装

flatmaplatest-resubscribe-composite-key

该技能针对 Kotlin 协程中 flatMapLatest 与 distinctUntilChanged 组合使用的踩坑模式:当“键流”(当前项,低频变化)变化时用 flatMapLatest 重新订阅下游流,再用复合键把高频流折叠为“有意义的变更”。重点讲解 distinctUntilChanged 谓词语义反转、字符串拼接加哈希构造复合键的丢失风险、键遗漏字段导致静默丢弃、collectLatest 不取消已启动工作、combine/zip 不能替代、需显式 @OptIn 实验性 API、算子顺序,以及用 grep 普查与日志埋点验证等方法。

编程与开发9 次安装

follower-item-built-from-shared-payload

该技能针对 Kotlin 共享会话场景,说明如何从共享会话携带的 payload 直接构建跟随者(follower)的可播放条目,而不是用本地目录重新解析。核心原则是:payload 即契约,目录解析只是猜测。内容涵盖强制指定媒体类型而非依赖启发式推断、避免在 apply collector 中做网络往返、共享 id 同时作为条目 id、源 uri 与缓存键、空字符串与缺失字段的区分、过滤空 id 并去重、每次重建前清空队列、头尾用不同调用添加,以及发布端时长单位不一致和缩略图选取不一致等陷阱,并给出 grep 验证方法。

编程与开发9 次安装

forwarding-player-hot-swap

该技能介绍如何在运行时替换 ForwardingPlayer 底层的播放器委托,同时让媒体会话与 UI 始终持有同一个稳定引用。内容涵盖委托替换的完整步骤(快照监听器、分离视频输出、移除监听器、替换委托、重新添加监听器、重新附加视频输出、校验),以及监听器绑定、反射访问委托字段、视频输出分离与重连、播放列表导航命令、播放意图路由、事件重放等常见陷阱与验证方法。

编程与开发9 次安装

fullscreen-video-gesture-overlay

这是一个 Jetpack Compose 全屏视频播放界面的手势与控件层实现参考,属于 Kotlin 开发实践笔记。它把全屏视频页拆成三个同级层:始终显示的视频画面层、左右等宽的点击/双击手势层,以及叠在最上方的控件层(chrome)。核心内容围绕单指点击切换控件显隐、双击左右半边快进或快退、自动隐藏计时器、拖动进度条时暂停自动隐藏、画中画模式下禁用手势层,以及进出全屏时恢复屏幕方向和系统栏等易错点展开,并给出可检索的校验命令。资料只提供代码片段与排错说明,未说明发布形式、安装方式或运行环境要求。

编程与开发9 次安装

generic-paged-db-accumulator

这是一个 Kotlin 通用分页读取辅助函数,用于通过 (limit, offset) 数据访问函数在有限循环中读取整张表,遇到第一个不足整页的结果即停止。它统一了各仓储层的终止规则,调用方只需一行即可取回全表数据。文档同时说明适用场景(导出、备份、一次性批量映射、迁移等确实需要全部行驻留内存的情况)、代码示例、使用方式、验证方法,以及多个陷阱:分页常量必须与短页判断一致、循环次数需设上限、offset 分页需要全序否则页面重叠、每页独立事务导致读写竞态、offset 开销随页数增长,以及结果是 List 而非 Flow 会在每次收集时重读。

编程与开发9 次安装

gradle-config-resolved-too-early

该技能针对 Gradle 构建中常见的“配置过早解析”失败进行诊断,典型报错为“cannot mutate a configuration after its child configuration was resolved”。这类错误通常由插件在 apply 阶段提前解析 runtimeClasspath 触发,导致配置被冻结,后续依赖声明失效。技能说明报错信息容易把责任指向被修改的配置,而真正的解析者难以从消息中看出。它给出的处理方向包括:按插件逐个二分排查,而非改写依赖语法;调整 plugins 块中的应用顺序;用扩展 runtimeClasspath 的兄弟配置转移解析锁定;并保留最小复现。验证时建议只跑配置阶段,并注意配置缓存命中可能掩盖问题。

编程与开发9 次安装

hidden-setting-does-not-clear-the-stored-value

这是一条关于 Kotlin/Compose 开发陷阱的说明:设置项中的某个选项在低于某个系统版本或能力门槛时被隐藏,但该选项对应的效果仍可能以损坏状态出现。原因是隐藏选择项只阻止用户从现在起选择它,并不会清除偏好存储中已有的值。资料主张把真正的防御放在渲染处:定义一个按能力命名的 expect/actual 布尔函数(如 isLyricsBlurSupported()),在每个渲染点读取偏好时一并调用,而不是信任设置页已经过滤过。资料以 Android 上 Modifier.blur 在 API 31 以下静默无效果为例,并给出排查用的 grep 验证步骤。

编程与开发9 次安装

identity-compare-immutable-setting

该技能介绍一种 Kotlin 热路径设置传递模式:把多字段设置打包成一个不可变值,通过 supplier 交给频繁读取的消费者,消费者用引用同一性(===)判断设置是否变化,从而避免逐字段比较和半更新读取。正文以音频均衡器为例,给出 producer 每次写入新建对象、consumer 用 identity 比较并重建的实现,并说明 data class 的 equals 陷阱、防御性复制、isFlat 预计算、格式变更时清空 applied 标记、每个流一个 consumer 等注意事项,附 grep 与行为测试验证方法。

编程与开发9 次安装

image-fallback-url-retry-in-composition

本技能介绍在 Compose 中为图片加载实现回退重试的做法:当记录的高分辨率图片缺失(404)时,把图片 URL 保存在 composition 状态中,在加载失败回调里将变体标记替换为源保证存在的变体,并让请求模型与磁盘缓存键读取同一份可变状态。文章重点介绍若干陷阱:图片缺失导致 onSuccess 不触发、调色板不生成而页面颜色异常;缓存键与数据源不一致;remember 需带记录键;替换需幂等以防无限重试循环;被遮挡的图片应保留组合而非条件移除;重试应放在 UI 层而非数据层,并给出 grep 验证命令与手动验证步骤。

编程与开发9 次安装