LogoSignals.dart
Copy Markdown
rodydavis/signals.dart 999999

Type: StreamSignalMixin

API reference and details for StreamSignalMixin from signals.dart.

StreamSignalMixin#

Kind: class  |  Package: package:signals_core

Class: StreamSignalMixin#

A mixin that implements the standard Stream interface for a ReadonlySignal.

This mixin allows you to treat a read-only or writable signal as a standard asynchronous Stream, where updates to the signal's value are pushed as stream events. This provides out-of-the-box compatibility with the entire asynchronous Dart SDK, such as stream transformers, await for loops, and Flutter's StreamBuilder.

Example Usage#

import 'package:signals/signals.dart';

class MyStreamSignal extends Signal<int> with StreamSignalMixin<int> {
  MyStreamSignal(super.internalValue);
}

void main() async {
  final counter = MyStreamSignal(0);

  // Standard stream subscription
  final subscription = counter.listen((val) {
    print('Stream emitted: $val');
  }); // Prints: "Stream emitted: 0" (if listened immediately)

  counter.value = 1; // Prints: "Stream emitted: 1"
  counter.value = 2; // Prints: "Stream emitted: 2"

  await subscription.cancel();
}

Flutter StreamBuilder Example#

import 'package:flutter/material.dart';
import 'package:signals/signals_flutter.dart';

class CounterSignal extends Signal<int> with StreamSignalMixin<int> {
  CounterSignal(int value) : super(value);
}

final counter = CounterSignal(0);

Widget build(BuildContext context) {
  return StreamBuilder<int>(
    stream: counter,
    builder: (context, snapshot) {
      return Text('Count: ${snapshot.data}');
    },
  );
}
Since StreamSignalMixin creates an internal broadcast StreamController, multiple listeners can subscribe simultaneously. All subscriptions are closed and resources are released automatically when the signal is disposed.

Members of StreamSignalMixin#

Member Type Signature Description
any method dart Future any(bool Function(T element) test)
asBroadcastStream method dart Stream asBroadcastStream({void Function(StreamSubscription subscription)? onListen, void Function(StreamSubscription subscription)? onCancel})
asyncExpand method dart Stream asyncExpand(Stream? Function(T event) convert)
asyncMap method dart Stream asyncMap(FutureOr Function(T event) convert)
cast method dart Stream cast()
contains method dart Future contains(Object? needle)
distinct method dart Stream distinct([bool Function(T previous, T next)? equals])
drain method dart Future drain([E? futureValue])
elementAt method dart Future elementAt(int index)
every method dart Future every(bool Function(T element) test)
expand method dart Stream expand(Iterable Function(T element) convert)
first method dart Future first
firstWhere method dart Future firstWhere(bool Function(T element) test, {T Function()? orElse})
fold method dart Future fold(S initialValue, S Function(S previous, T element) combine)
forEach method dart Future forEach(void Function(T element) action)
handleError method dart Stream handleError(Function onError, {bool Function(dynamic error)? test})
isBroadcast method dart bool isBroadcast
isEmpty method dart Future isEmpty
join method dart Future join([String separator = ""])
last method dart Future last
lastWhere method dart Future lastWhere(bool Function(T element) test, {T Function()? orElse})
length method dart Future length
listen method dart StreamSubscription listen(void Function(T event)? onData, {Function? onError, void Function()? onDone, bool? cancelOnError})
map method dart Stream map(S Function(T event) convert)
pipe method dart Future pipe(StreamConsumer streamConsumer)
reduce method dart Future reduce(T Function(T previous, T element) combine)
single method dart Future single
singleWhere method dart Future singleWhere(bool Function(T element) test, {T Function()? orElse})
skip method dart Stream skip(int count)
skipWhile method dart Stream skipWhile(bool Function(T element) test)
take method dart Stream take(int count)
takeWhile method dart Stream takeWhile(bool Function(T element) test)
timeout method dart Stream timeout(Duration timeLimit, {void Function(EventSink sink)? onTimeout})
toList method dart Future<List> toList()
toSet method dart Future<Set> toSet()
transform method dart Stream transform(StreamTransformer<T, S> streamTransformer)
where method dart Stream where(bool Function(T event) test)

References#

The StreamSignalMixin type is referenced and used in the following pages: