skillZs
★ LIVE SKILL TAGS ★
>>> LIVE SKILLS INDEX <<<
* OPEN SOURCE *
NO LOGIN, NO TRACKING
※ REAL INSTALL DATA ※
← back to all skills
rodydavis/signals.dart109 installs

signals-flutter

Highly optimized Flutter UI bindings and GPU rendering for reactive signals.

How do I install this agent skill?

npx skills add https://github.com/rodydavis/signals.dart --skill signals-flutter
view source ↗

Is this agent skill safe to install?

  • Gen Agent Trust Hubpass

    No security issues were detected. The skill provides legitimate documentation and architectural patterns for using the signals_flutter reactive state management package in Flutter applications.

  • Socketpass

    No alerts

  • Snykpass

    Risk: LOW · No issues

What does this agent skill do?

Flutter Reactive Signals Integration

This skill covers optimizing Flutter UI bindings, element-level reactive tracking, and high-frequency rendering utilizing the signals_flutter package.

Related Documentation & Items

Core Primitives

Related FileDescription
signal.mdStandard writeable reactive state primitive containing value accessors, mutation mechanics, and basic custom options.
computed.mdLazy, memoized read-only derived state signal tracking reactive dependencies dynamically.
effect.mdSynchronous observer managing active subscription loops, dynamic dependency updates, and lifecycle teardown.
readonly.mdRead-only signal views ensuring unidirectional data access flows.
batch.mdTransactional state mutation blocks optimizing reactive computations and preventing rendering/recompute churn.

Asynchronous Operations

Related FileDescription
future_signal.mdSingle-evaluation asynchronous future state representation resolving the double-evaluation issue.
stream_signal.mdDynamic, lifecycle-safe, self-disposing stream listener mapping to async loading/data/error states.
async_signal.mdUnifying async state container mapping loading, success data, and failure error states cleanly.
computed_async.mdComposable asynchronous operations built over reactive signals with active race condition protection.
computed_from.mdState aggregator signal merging multiple async signals into a single unified result.

Reactive Collections

Related FileDescription
list_signal.mdOptimized list wrapper proxying standard operations to support element-level reactivity.
set_signal.mdCustom set wrapper ignoring duplicates and notifying on unique mutations.
map_signal.mdGranular map wrapper supporting isolated dictionary element lookup triggers.
iterable_signal.mdIterable wrapper mapping custom lazy traversals to dynamic subscription layers.
queue_signal.mdDouble-ended queue wrapper supporting optimized reactive pipeline structures.

Utility Primitives

Related FileDescription
linked_signal.mdWritable computed signals supporting manual override resets and custom equivalence checks.
tracked_signal.mdState history wrapper enabling clean out-of-the-box undo/redo mechanisms.
timer_signal.mdPeriodically emitting stopwatch signal with built-in pause, resume, and reset.
connect.mdDynamic event connector feeding multiple external data pipelines into single targets.

Flutter Widgets

Related FileDescription
signal_builder.mdLocalized subtree rebuilding widget utilizing the named builder callback signature.
signal_widget.mdComponent-level reactive stateless/stateful widgets resolving SignalsMixin deprecations.
signal_effect.mdLayout-safe side effect orchestrator mapping trigger events (e.g. snackbars, dialogs, routes) cleanly.
signal_custom_paint.mdUltra-high performance GPU render box bypass painting canvas operations at 120 FPS.

Flutter Extensions

Related FileDescription
watch.md[DEPRECATED] Legacy context-level watch extension (prefer SignalBuilder or SignalWidget).

Core Primitives Quick Start Guide

The signals library exposes five core functions which are the building blocks to model any reactive business logic.

1. 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;
});

2. 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);
});

3. 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 Doe

4. effect(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 subscription

5. batch(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;
});

1. Widget Rebuild Optimization

A. 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}'),
)

B. Reactive Component Widgets (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}');
  }
}

2. High-Frequency Rendering (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(),
)

3. Side Effects in Widget Trees (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(),
)

Add the canonical catalog link to the repository README so users can inspect current installs and available audits. The publishing guide covers the complete discovery path.

<a href="https://skillzs.dev/skills/rodydavis/signals.dart/signals-flutter">View signals-flutter on skillZs</a>