SubStream<T> constructor

SubStream<T>({
  1. required SubValueCreate<Stream<T>> create,
  2. SubValueKeys? keys,
  3. SubValueUpdate<Stream<T>>? update,
  4. T? initialData,
  5. bool preserveState = true,
  6. ValueChanged<T>? listener,
  7. required SubValueBuild<AsyncSnapshot<T>> builder,
})

Creates and subscribes to a Stream, then exposes its current state as an AsyncSnapshot.

  • listener is called with every event the stream emits.
  • preserveState determines if the current value should be preserved when changing the Stream instance.

When preserveState is true (the default) update jank is reduced when switching streams, but this may result in inconsistent state when using multiple or nested streams.

Implementation

SubStream({
  required super.create,
  super.keys,
  super.update,
  T? initialData,
  bool preserveState = true,
  ValueChanged<T>? listener,
  required SubValueBuild<AsyncSnapshot<T>> builder,
}) : super(
        builder: (context, stream) => SubValue<Stream<T>>(
          create: () => stream.asBroadcastStream(
            onCancel: (subscription) => subscription.cancel(),
          ),
          keys: [stream],
          builder: (context, stream) => SubSubscriber<T>(
            stream: stream,
            listener: listener,
            child: StreamBuilder<T>(
              initialData: initialData,
              stream: stream,
              builder: preservedSnapshotBuilder(
                preserveState: preserveState,
                initialData: initialData,
                builder: builder,
              ),
            ),
          ),
        ),
      );