Flutter Riverpod State Management
andrewyng/context-hub
Guides Flutter state management with Riverpod: choosing provider types, wiring ConsumerWidgets, handling async state and lifecycle, and overriding providers in tests.
Reference for the signals_flutter package: reactive signals, computed values, effects, async signals and collection signals bound to Flutter widgets.
$ npx skills add rodydavis/signals.dart --skill signals-flutter -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install rodydavis/signals.dart signals-flutter --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/rodydavis/signals.dart.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/signals-flutter .claude/skills/signals-flutter && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "signals-flutter" agent skill from https://github.com/rodydavis/signals.dart/tree/main/skills/signals-flutter into .claude/skills/signals-flutter/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "signals-flutter", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/rodydavis/signals.dart/tree/main/skills/signals-flutterType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add rodydavis/signals.dart --skill signals-flutter -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install rodydavis/signals.dart signals-flutter --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/rodydavis/signals.dart.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/signals-flutter .agents/skills/signals-flutter && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "signals-flutter" agent skill from https://github.com/rodydavis/signals.dart/tree/main/skills/signals-flutter into .agents/skills/signals-flutter/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "signals-flutter", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add rodydavis/signals.dart --skill signals-flutter -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install rodydavis/signals.dart signals-flutter --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/rodydavis/signals.dart.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/signals-flutter .cursor/skills/signals-flutter && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "signals-flutter" agent skill from https://github.com/rodydavis/signals.dart/tree/main/skills/signals-flutter into .cursor/skills/signals-flutter/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "signals-flutter", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/rodydavis/signals.dart.git --path skills/signals-flutter--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add rodydavis/signals.dart --skill signals-flutter -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install rodydavis/signals.dart signals-flutter --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/rodydavis/signals.dart.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/signals-flutter .gemini/skills/signals-flutter && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "signals-flutter" agent skill from https://github.com/rodydavis/signals.dart/tree/main/skills/signals-flutter into .gemini/skills/signals-flutter/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "signals-flutter", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install rodydavis/signals.dart signals-flutterInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add rodydavis/signals.dart --skill signals-flutter -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/rodydavis/signals.dart.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/signals-flutter .github/skills/signals-flutter && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "signals-flutter" agent skill from https://github.com/rodydavis/signals.dart/tree/main/skills/signals-flutter into .github/skills/signals-flutter/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "signals-flutter", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add rodydavis/signals.dart --skill signals-flutter -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install rodydavis/signals.dart signals-flutter --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/rodydavis/signals.dart.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/signals-flutter .opencode/skills/signals-flutter && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "signals-flutter" agent skill from https://github.com/rodydavis/signals.dart/tree/main/skills/signals-flutter into .opencode/skills/signals-flutter/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "signals-flutter", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
signals-flutterReference for the signals_flutter package: reactive signals, computed values, effects, async signals and collection signals bound to Flutter widgets.
The skill covers using the signals_flutter package for Flutter UI bindings, with element-level reactive tracking and efficient updates under frequent rendering. Its documentation is split by area: core primitives (signal, computed, effect, readonly, batch), asynchronous signals and reactive collections.
Core pages describe writable state, lazy memoized derived values, synchronous effects with teardown, and batched mutation that avoids recompute churn. Async pages cover future, stream and unified async signals, composable async computations with race-condition protection, and an aggregator that merges several async signals. Collection pages cover list, set, map, iterable and queue signals with element-level reactivity.
5 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 81d64e8. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
No scripts in the folder and no shell commands in SKILL.md (its code samples are dart).
From the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Signals for Flutter loads about 1.9k tokens when it runs. Until then it costs about 23 tokens; SKILL.md has 575 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from rodydavis/signals.dart at commit 81d64e8, republished under its Apache-2.0 licence (© rodydavis). 575 words, ~1,891 tokens.
.claude/skills/signals-flutter/SKILL.md (or your agent's skills folder). This skill also uses 34 other files; get the full folder from GitHub.This skill covers optimizing Flutter UI bindings, element-level reactive tracking, and high-frequency rendering utilizing the signals_flutter package.
| Related File | Description |
|---|---|
| signal.md | Standard writeable reactive state primitive containing value accessors, mutation mechanics, and basic custom options. |
| computed.md | Lazy, memoized read-only derived state signal tracking reactive dependencies dynamically. |
| effect.md | Synchronous observer managing active subscription loops, dynamic dependency updates, and lifecycle teardown. |
| readonly.md | Read-only signal views ensuring unidirectional data access flows. |
| batch.md | Transactional state mutation blocks optimizing reactive computations and preventing rendering/recompute churn. |
| Related File | Description |
|---|---|
| future_signal.md | Single-evaluation asynchronous future state representation resolving the double-evaluation issue. |
| stream_signal.md | Dynamic, lifecycle-safe, self-disposing stream listener mapping to async loading/data/error states. |
| async_signal.md | Unifying async state container mapping loading, success data, and failure error states cleanly. |
| computed_async.md | Composable asynchronous operations built over reactive signals with active race condition protection. |
| computed_from.md | State aggregator signal merging multiple async signals into a single unified result. |
| Related File | Description |
|---|---|
| list_signal.md | Optimized list wrapper proxying standard operations to support element-level reactivity. |
| set_signal.md | Custom set wrapper ignoring duplicates and notifying on unique mutations. |
| map_signal.md | Granular map wrapper supporting isolated dictionary element lookup triggers. |
| iterable_signal.md | Iterable wrapper mapping custom lazy traversals to dynamic subscription layers. |
| queue_signal.md | Double-ended queue wrapper supporting optimized reactive pipeline structures. |
| Related File | Description |
|---|---|
| linked_signal.md | Writable computed signals supporting manual override resets and custom equivalence checks. |
| tracked_signal.md | State history wrapper enabling clean out-of-the-box undo/redo mechanisms. |
| timer_signal.md | Periodically emitting stopwatch signal with built-in pause, resume, and reset. |
| connect.md | Dynamic event connector feeding multiple external data pipelines into single targets. |
| Related File | Description |
|---|---|
| signal_builder.md | Localized subtree rebuilding widget utilizing the named builder callback signature. |
| signal_widget.md | Component-level reactive stateless/stateful widgets resolving SignalsMixin deprecations. |
| signal_effect.md | Layout-safe side effect orchestrator mapping trigger events (e.g. snackbars, dialogs, routes) cleanly. |
| signal_custom_paint.md | Ultra-high performance GPU render box bypass painting canvas operations at 120 FPS. |
| Related File | Description |
|---|---|
| watch.md | [DEPRECATED] Legacy context-level watch extension (prefer SignalBuilder or SignalWidget). |
The signals library exposes five core functions which are the building blocks to model any reactive business logic.
signal(initialValue)Creates a new mutable signal container. You read a signal's value or subscribe to updates by accessing .value.
final counter = signal(0);
print(counter.value); // 0
counter.value = 1; // Mutates value and schedules dependent updates.peek()Reads a signal's current value without subscribing to its mutations.
final counter = signal(0);
final logCount = signal(0);
effect(() {
print(counter.value);
// Read using peek to avoid subscribing/triggering loop
logCount.value = logCount.peek() + 1;
});untracked(fn)Executes a callback that reads signals without subscribing to any of them.
final counter = signal(0);
final count = signal(0);
effect(() {
print(counter.value);
count.value = untracked(() => count.value + 1);
});computed(fn)Combines the values of multiple signals into a lazy, memoized derived signal.
final first = signal('John');
final last = signal('Doe');
final fullName = computed(() => '${first.value} ${last.value}');
print(fullName.value); // John Doeeffect(fn)Orchestrates immediate synchronous side effects by running a callback and subscribing to any signals read within it.
final name = signal('Jane');
final dispose = effect(() => print('Hello $name'));
dispose(); // Clean up subscriptionbatch(fn)Groups multiple signal writes into a single transaction, executing all dependent computed evaluations and effects exactly once at the end.
final a = signal(0);
final b = signal(0);
batch(() {
a.value = 1;
b.value = 2;
});SignalBuilder (Preferred)Provides localized, context-isolated widget rebuilding. Wrap only the smallest possible widgets in SignalBuilder to keep rendering extremely high-performance.
SignalBuilder(
builder: (context) => Text('Count: ${counter.value}'),
)SignalWidget / SignalStatefulWidget)In v7, SignalsMixin and BuildContext.watch(context) are deprecated (and will trigger warnings via custom lint rules). Instead of mixins or context extension watches, inherit from SignalWidget or SignalStatefulWidget for automatic, highly optimized reactive tracking inside standard widget trees:
// Reactive Stateless Widget
class MyWidget extends SignalWidget {
const MyWidget({super.key});
@override
Widget build(BuildContext context) {
return Text('Count: ${counter.value}');
}
}SignalCustomPaint)For ultra-high-frequency drawing driven by signals, bypass Flutter's heavy widget layout/rebuild lifecycle entirely.
SignalCustomPaint and SignalPainterWidget write directly to the GPU via markNeedsPaint() calls inside custom proxy render boxes:
SignalCustomPaint(
painter: MySignalPainter(progressSignal),
child: Container(),
)SignalEffect)Use SignalEffect / SignalListener to trigger asynchronous side-effects (e.g., showing snackbars, navigation, showing modals) cleanly inside the widget lifecycle.
SignalEffect(
callback: (context) {
if (errorMessage.value != null) {
showDialog(context: context, builder: (_) => Alert(errorMessage.value!));
}
},
child: ChildWidget(),
)© rodydavis, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 34 other files in skills/signals-flutter of rodydavis/signals.dart.
Open the folder on GitHubat commit 81d64e8
Signals for Flutter next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Signals for Flutter this skillrodydavis/signals.dart | 819 | — | ~1.9k | Automated safety check: Pass | Apache-2.0 | |
| Flutter Riverpod State Managementandrewyng/context-hub | 14k | — | ~1.1k | Automated safety check: Pass | MIT | |
| BlocVeryGoodOpenSource/vgv-ai-flutter-plugin | 170 | — | ~2k | Automated safety check: Pass | MIT | |
| Flutter Dart Code Reviewaffaan-m/ECC | 276k | 2 repos | ~5.8k | Automated safety check: Notes | MIT | |
| Flutter Bloc and Cubitandrewyng/context-hub | 14k | — | ~998 | Automated safety check: Pass | MIT | |
| Flutter ExpertFNOSP/FlyNarwhal | 496 | 2 repos | ~758 | Automated safety check: Pass | MIT |
andrewyng/context-hub
Guides Flutter state management with Riverpod: choosing provider types, wiring ConsumerWidgets, handling async state and lifecycle, and overriding providers in tests.
VeryGoodOpenSource/vgv-ai-flutter-plugin
Best practices for Bloc state management in Flutter/Dart, covering Cubit versus Bloc, event and state naming, sealed classes with Equatable, the Page/View split with BlocProvider, BlocBuilder…
affaan-m/ECC
Library-agnostic Flutter/Dart code review checklist covering widget best practices, state management patterns (BLoC, Riverpod, Provider, GetX, MobX, Signals), Dart idioms, performance…
andrewyng/context-hub
Helps choose between Bloc and Cubit in Flutter and sets defaults for packages, lifecycle, widget binding and tests.
FNOSP/FlyNarwhal
A skill your agent uses when building cross-platform applications with Flutter 3+ and Dart.
rohitg00/awesome-claude-code-toolkit
Mobile development patterns for React Native and Flutter including navigation, state management, and responsive design
rodydavis/signals.dart
Teaches the agent Jaspr's Flutter-like component model and typed HTML elements, with strict rules on build methods and helper syntax.
rodydavis/signals.dart
Guides styling of Jaspr web components with the type-safe Styles API in Dart, covering @css annotations, inline styles and global stylesheets.
rodydavis/signals.dart
Rules for calling JavaScript from Jaspr web apps in Dart: which interop libraries to import in server, static and client modes, and how to wrap functions, objects and libraries.
rodydavis/signals.dart
Sets the rules for static or server mode Jaspr apps in Dart, covering dual entrypoints, the client annotation and data hydration.
rodydavis/signals.dart
Upgrades every package under ./examples to the repository's latest signals version, runs pub upgrade on third-party dependencies, and fixes the resulting analysis problems.
rodydavis/signals.dart
Use when you need to convert / rewrite existing HTML (from a file or url) into Jaspr code.
Categories
Reference for the signals_flutter package: reactive signals, computed values, effects, async signals and collection signals bound to Flutter widgets. The skill covers using the signals_flutter package for Flutter UI bindings, with element-level reactive tracking and efficient updates under frequent rendering. Its documentation is split by area: core primitives (signal, computed, effect, readonly, batch), asynchronous signals and reactive collections.
Signals for Flutter fits situations like: adding reactive state to a Flutter app with signals; rebuilding only the widgets that read a changed signal; wrapping futures or streams as loading, data and error states; making lists, maps or sets reactive in Flutter.
Run `npx skills add rodydavis/signals.dart --skill signals-flutter -a claude-code`. Or copy the skill folder (skills/signals-flutter in rodydavis/signals.dart) into .claude/skills/signals-flutter in your project. Claude Code loads it when a task matches its description.
Run `npx skills add rodydavis/signals.dart --skill signals-flutter -a codex`. Or copy the skill folder (skills/signals-flutter in rodydavis/signals.dart) into .agents/skills/signals-flutter in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add rodydavis/signals.dart --skill signals-flutter -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/signals-flutter, .gemini/skills/signals-flutter, .github/skills/signals-flutter and .opencode/skills/signals-flutter in your project.
SKILL.md names no scripts, command-line tools or credentials: Signals for Flutter is instructions for the agent only. Our summary lists: A Flutter project with the signals_flutter package.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Signals for Flutter is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 1.9k tokens (SKILL.md is roughly 7.6k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Signals for Flutter: Flutter Riverpod State Management (andrewyng/context-hub, 14k stars), Bloc (VeryGoodOpenSource/vgv-ai-flutter-plugin, 170 stars), Flutter Dart Code Review (affaan-m/ECC, 276k stars) and Flutter Bloc and Cubit (andrewyng/context-hub, 14k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
rodydavis (a GitHub user) maintains it in rodydavis/signals.dart, which has 819 GitHub stars. The repository holds 15 skills in this directory. The repository was last updated on September 14, 2026.
Source: rodydavis/signals.dart on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.