Help us improve
Share bugs, ideas, or general feedback.
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-appHow this skill is triggered — by the user, by Claude, or both
Slash command
/gsmlg-app:flutter-duskmoonThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Complete component library for Flutter apps with codegen-driven theming, adaptive (Material/Cupertino) widgets, platform-aware settings UI, and feedback helpers.
Applies best practices for Flutter UI packages: custom Material widgets, ThemeExtension theming, consistent APIs, barrel exports, and widget tests. Use for 'create a ui package'.
Provides Flutter patterns for widget architecture, state management, Impeller renderer, and platform-adaptive design, avoiding common mistakes.
Provides Flutter/Dart guidance on architecture (BLoC, Riverpod), state management, widgets, navigation (GoRouter), data (Dio, Hive), performance, and testing for cross-platform mobile apps.
Share bugs, ideas, or general feedback.
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