weakFamilyPod<T extends Pod, Arg> function

T Function(Arg arg) weakFamilyPod<T extends Pod, Arg>(
  1. T create(
    1. Arg arg
    )
)

Alternate version of familyPod that holds a weak reference to each child.

Implementation

T Function(Arg arg) weakFamilyPod<T extends Pod<dynamic>, Arg>(
  T Function(Arg arg) create,
) {
  final pods = HashMap<Arg, WeakReference<T>>();

  return (arg) {
    final pod = pods[arg]?.target;
    if (pod != null) {
      return pod;
    }

    final newPod = create(arg);
    pods[arg] = WeakReference(newPod);
    return newPod;
  };
}