From gsmlg-app
Flutter DuskMoon UI design system — theme, adaptive widgets, settings, feedback, and BLoC theme persistence. Use when building Flutter apps with duskmoon_ui, duskmoon_theme, duskmoon_widgets, duskmoon_settings, duskmoon_feedback, or duskmoon_theme_bloc packages.
npx claudepluginhub gsmlg-dev/code-agent --plugin gsmlg-appThis skill uses the workspace's default tool permissions.
Complete component library for Flutter apps with codegen-driven theming, adaptive (Material/Cupertino) widgets, platform-aware settings UI, and feedback helpers.
Searches, retrieves, and installs Agent Skills from prompts.chat registry using MCP tools like search_skills and get_skill. Activates for finding skills, browsing catalogs, or extending Claude.
Searches prompts.chat for AI prompt templates by keyword or category, retrieves by ID with variable handling, and improves prompts via AI. Use for discovering or enhancing prompts.
Guides MCP server integration in Claude Code plugins via .mcp.json or plugin.json configs for stdio, SSE, HTTP types, enabling external services as tools.
Complete component library for Flutter apps with codegen-driven theming, adaptive (Material/Cupertino) widgets, platform-aware settings UI, and feedback helpers.
Add duskmoon_ui to get theme + widgets + settings + feedback in one import:
# pubspec.yaml
dependencies:
duskmoon_ui: ^1.0.0
import 'package:duskmoon_ui/duskmoon_ui.dart';
dependencies:
duskmoon_theme: ^1.0.0 # Theme only
duskmoon_widgets: ^1.0.0 # Adaptive widgets
duskmoon_settings: ^1.0.0 # Settings UI
duskmoon_feedback: ^1.0.0 # Dialogs, toasts, snackbars
duskmoon_theme_bloc: ^1.0.0 # Opt-in BLoC persistence (NOT in umbrella)
Detailed documentation is split by package:
import 'package:flutter/material.dart';
import 'package:duskmoon_ui/duskmoon_ui.dart';
void main() => runApp(const MyApp());
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
theme: DmThemeData.sunshine(),
darkTheme: DmThemeData.moonlight(),
themeMode: ThemeMode.system,
home: const HomePage(),
);
}
}
class HomePage extends StatelessWidget {
const HomePage({super.key});
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: DmAppBar(title: const Text('DuskMoon App')),
body: Center(
child: DmButton(
onPressed: () => showDmSuccessToast(
context: context,
message: 'Hello from DuskMoon!',
),
child: const Text('Tap me'),
),
),
);
}
}
duskmoon_theme <- Pure theme, zero external deps
+-- duskmoon_theme_bloc <- Opt-in BLoC for theme persistence (NOT in umbrella)
+-- duskmoon_widgets <- 18 adaptive widgets (Material/Cupertino)
+-- duskmoon_settings <- Settings UI (Material/Cupertino/Fluent)
+-- duskmoon_feedback <- Dialogs, snackbars, toasts, bottom sheets
|
duskmoon_ui <- Umbrella: re-exports theme + widgets + settings + feedback
Dm prefixabstract final with static methods.g.dart suffix in src/generated/duskmoon_theme_bloc is intentionally excluded from umbrella re-export