一键导入
load-more
为分页列表添加统一的 LoadMoreFooter 组件(加载更多按钮、loading、没有更多了)。在列表底部分页、加载更多、hasMore、分页 footer 场景使用。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
为分页列表添加统一的 LoadMoreFooter 组件(加载更多按钮、loading、没有更多了)。在列表底部分页、加载更多、hasMore、分页 footer 场景使用。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
Use when dashboard metric sections or compact stats should share the CPU compact card surface. Trigger for media capacity, recent import trends, storage summaries, and other dashboard cards that should use DashboardMetricCard instead of custom glass or gradient wrappers.
Use when Flutter pages should reuse the Dashboard scaffold shell, adaptive background, user background image overlay, or transparent app bar treatment. Trigger for More, Search, tab pages, and dashboard-like pages whose local background gradients should be replaced by the shared DashboardScaffold.
Build pages with 搜索/筛选/排序 的“floating bar”(姐狗味)交互:筛选按钮 + fake input + sortBy,放在 floatingActionButton 且使用 FloatingActionButtonLocation.centerDocked。参考 SearchMediaResultPage 的结构与视觉实现。
Implements settings-style form pages using SettingsFormManager, SettingsFieldConfig, and SettingsFormRowBuilder. Use when adding or refactoring a page backed by env key/value fields, system settings forms, directory-like single-object editors, or when the user asks to use the project’s shared form logic for a form UI.
Generates MoviePilot mobile plugin form adapters (vue mode). Use when adding a new plugin adapter, creating a controller for a plugin (e.g. P115StrmHelper, ProxmoxVEBackup), or when the user asks to generate or scaffold plugin adapter code.
Guides how to adapt `lib/modules/dynamic_form` so plugin dashboards or configuration forms render correctly. Use when a request involves `/plugin/dynamic-form`, `DynamicFormPage`, new block types, converter tweaks, or controller bindings for a plugin.
基于 SOC 职业分类
| name | load-more |
| description | 为分页列表添加统一的 LoadMoreFooter 组件(加载更多按钮、loading、没有更多了)。在列表底部分页、加载更多、hasMore、分页 footer 场景使用。 |
lib/widgets/load_more_footer.dart → LoadMoreFooter
has_more / hasMore 为 true 时显示「加载更多」import 'package:moviepilot_mobile/widgets/load_more_footer.dart';
// 列表有内容时放在列表底部
LoadMoreFooter(
hasMore: controller.hasMore.value,
isLoading: controller.isLoadingMore.value,
total: controller.total.value, // 可选,显示「加载更多 · 共 N」
onLoadMore: controller.loadMore,
)
| 参数 | 说明 |
|---|---|
hasMore | 是否还有下一页 |
onLoadMore | 点击回调;loading 时自动禁用 |
isLoading | 分页请求进行中 |
hasItems | 列表为空时不渲染 footer,默认 true |
total | 可选总数,拼进按钮文案 |
padding | 默认 EdgeInsets.fromLTRB(0, 12, 0, 4) |
label / endLabel | 自定义文案 |
loadMore() / loadMoreXxx():仅在 hasMore && !loading 时发起请求isLoadingMore、mediaSearching && items.isNotEmpty),避免与全页 loading 混淆total 来自 API 的 total 字段expand_more_rounded + 加粗 labelCupertinoActivityIndicator(radius: 9)lib/modules/dynamic_form/widgets/VueStyle/subtitle_manual_upload/subtitle_manual_upload_widgets.dart
mediaSearching && medias.isNotEmptymatchHistoryLoading替换 OutlinedButton.icon / 裸 CupertinoButton 加载更多:
// Before
if (hasMore)
OutlinedButton.icon(
onPressed: controller.loadMore,
icon: const Icon(Icons.expand_more),
label: Text('加载更多 · 共 $total'),
),
// After
if (items.isNotEmpty)
LoadMoreFooter(
hasMore: hasMore,
total: total,
isLoading: isLoadingMore,
onLoadMore: controller.loadMore,
),
列表为空时不放 footer;有内容且无更多时 footer 自动显示「没有更多了」。