useMapSignal<K, V> function

MapSignal<K, V> useMapSignal<K, V>(
  1. Map<K, V> value, {
  2. List<Object?> keys = const <Object>[],
  3. MapSignalOptions<K, V>? options,
})

Creates a new MapSignal and subscribes to it.

A MapSignal provides a reactive wrapper around a standard Dart Map. It tracks in-place mutations (such as entry addition, value updates, or key removals) and automatically triggers rebuilds of the host HookWidget.

:::tip Excellent for storing state dictionaries, form configurations, cached records, or key-value structures that require fine-grained reactivity. :::

Parameters

  • value: The initial map entries.
  • options: The options for the signal.
  • keys: A list of objects to watch. If any key changes, the map 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 DynamicFormWidget extends HookWidget {
  const DynamicFormWidget({super.key});

  @override
  Widget build(BuildContext context) {
    final formData = useMapSignal<String, String>({});

    return Column(
      children: [
        TextField(
          decoration: const InputDecoration(labelText: 'Email'),
          onChanged: (val) => formData['email'] = val,
        ),
        TextField(
          decoration: const InputDecoration(labelText: 'Password'),
          onChanged: (val) => formData['password'] = val,
        ),
        Text('Live Form Data: ${formData.value}'),
      ],
    );
  }
}

Implementation

MapSignal<K, V> useMapSignal<K, V>(
  Map<K, V> value, {
  List<Object?> keys = const <Object>[],
  MapSignalOptions<K, V>? options,
}) {
  final s = useMemoized(() => mapSignal(value, options: options), keys);
  return useExistingSignal(s, keys: keys);
}