useSetSignal<T> function

SetSignal<T> useSetSignal<T>(
  1. Set<T> value, {
  2. List<Object?> keys = const <Object>[],
  3. SetSignalOptions<T>? options,
})

Creates a new SetSignal and subscribes to it.

A SetSignal provides a reactive wrapper around a standard Dart Set. It tracks mutations (such as .add(), .remove(), .clear()) and automatically triggers rebuilds of the host HookWidget.

:::tip Useful for managing collections of unique items, like active filters, selected item IDs, or tagged items in a multi-select interface. :::

Parameters

  • value: The initial set elements.
  • options: The options for the signal.
  • keys: A list of objects to watch. If any key changes, the set signal is re-created.

Example

import 'package:flutter/material.dart';
import 'package:flutter_hooks/flutter_hooks.dart';
import 'package:signals_hooks/signals_hooks.dart';

class CategoryFilterWidget extends HookWidget {
  const CategoryFilterWidget({super.key});

  @override
  Widget build(BuildContext context) {
    final selectedCategories = useSetSignal<String>({});

    void toggleCategory(String cat) {
      if (selectedCategories.contains(cat)) {
        selectedCategories.remove(cat);
      } else {
        selectedCategories.add(cat);
      }
    }

    return Row(
      children: ['Tech', 'News', 'Lifestyle'].map((cat) {
        final isSelected = selectedCategories.contains(cat);
        return FilterChip(
          label: Text(cat),
          selected: isSelected,
          onSelected: (_) => toggleCategory(cat),
        );
      }).toList(),
    );
  }
}

Implementation

SetSignal<T> useSetSignal<T>(
  Set<T> value, {
  List<Object?> keys = const <Object>[],
  SetSignalOptions<T>? options,
}) {
  final s = useMemoized(() => setSignal(value, options: options), keys);
  return useExistingSignal(s, keys: keys);
}