ListSignal<E> class
A reactive Signal that holds a List and implements the List interface.
ListSignal lets you listen to changes on a list reactively and mutate it directly using
standard list operations (like add, addAll, remove, operators [] and []=, etc.).
Any mutations automatically trigger reactive updates to all active listeners (e.g., inside an
effect or computed).
Additionally, ListSignal defines convenient operators:
<<injects/adds all items from an iterable into the list.&forks/concatenates the list with an iterable into a new ListSignal.|pipes/concatenates the list with another signal holding an iterable into a new ListSignal.
Example Usage
import 'package:signals/signals.dart';
void main() {
final numbers = listSignal<int>([1, 2, 3]);
effect(() {
print('List content: $numbers, Length: ${numbers.length}');
}); // Prints: "List content: [1, 2, 3], Length: 3"
// Standard mutation (triggers updates)
numbers.add(4); // Prints: "List content: [1, 2, 3, 4], Length: 4"
// Update via index operator (triggers updates)
numbers[0] = 10; // Prints: "List content: [10, 2, 3, 4], Length: 4"
// Injection operator (triggers updates)
numbers << [5, 6]; // Prints: "List content: [10, 2, 3, 4, 5, 6], Length: 6"
}
:::tip
Mutating the collection directly calls the reactive set() routine under the hood automatically. You
do not need to assign numbers.value = ... manually!
:::
- Inheritance
- Implemented types
-
- List<
E>
- List<
- Mixed-in types
-
- IterableSignalMixin<
E, List< E> > - ListSignalMixin<
E, List< E> >
- IterableSignalMixin<
- Available extensions
Constructors
-
ListSignal(List<
E> value, {ListSignalOptions<E> ? options, @Deprecated('Use options: ListSignalOptions(autoDispose: ...) instead') bool? autoDispose, @Deprecated('Use options: ListSignalOptions(name: ...) instead') String? debugLabel}) -
Creates a ListSignal with the given
value.
Properties
-
$
→ Signal<
Iterable< E> > -
Available on Iterable<
Return a signal from a Iterable valueE> , provided by the SignalIterableExtensions extensionno setter -
$
→ Signal<
List< E> > -
Available on List<
Return a signal from a List valueE> , provided by the SignalListExtensions extensionno setter - autoDispose ↔ bool
-
Throws and error if read after dispose and can be
disposed on last unsubscribe.
getter/setter pairinherited
- debugLabel → String?
-
Debug label for Debug Mode
Debug label for Debug Mode
no setterinherited
- disposed ↔ bool
-
Check if the effect is disposed
getter/setter pairinherited
-
equalityCheck
→ SignalEquality<
List< E> > -
Optional method to check if to values are the same
no setterinherited
- first ← E
-
Available on Signal<
List< , provided by the ListSignalExtension extensionE> >no getter - first ↔ E
-
The first element.
getter/setter pairinherited
- firstOrNull → T?
-
Available on Iterable<
The first element of this iterator, orT> , provided by the IterableExtensions extensionnullif the iterable is empty.no setter - globalId → int
-
finalinherited
- hashCode → int
-
The hash code for this object.
no setteroverride
-
indexed
→ Iterable<
(int, T)> -
Available on Iterable<
Pairs of elements of the indices and elements of this iterable.T> , provided by the IterableExtensions extensionno setter -
internalValue
→ List<
E> -
@internal
Internal getter for the raw value without subscription tracking.
no setterinherited
- isEmpty → bool
-
Whether this collection has no elements.
no setterinherited
- isInitialized → bool
-
Check if a signal value is set (does not subscribe)
no setterinherited
- isNotEmpty → bool
-
Whether this collection has at least one element.
no setterinherited
-
iterator
→ Iterator<
E> -
A new
Iteratorthat allows iterating the elements of thisIterable.no setterinherited - last → E
-
Available on ReadonlySignal<
List< , provided by the ReadonlyListSignalExtension extensionE> >no setter - last ↔ E
-
The last element.
getter/setter pairinherited
- last ← E
-
Available on Signal<
List< , provided by the ListSignalExtension extensionE> >no getter - lastOrNull → T?
-
Available on Iterable<
The last element of this iterable, orT> , provided by the IterableExtensions extensionnullif the iterable is empty.no setter - length ↔ int
-
The number of elements in this Iterable.
getter/setter pairinherited
- length ← int
-
Available on Signal<
List< , provided by the ListSignalExtension extensionE> >no getter - name → String?
-
finalinherited
-
nonNulls
→ Iterable<
T> -
Available on Iterable<
The non-T?> , provided by the NullableIterableExtensions extensionnullelements of this iterable.no setter -
reversed
→ Iterable<
E> -
An Iterable of the objects in this list in reverse order.
no setterinherited
-
reversed
→ Iterable<
E> -
Available on ReadonlySignal<
List< , provided by the ReadonlyListSignalExtension extensionE> >no setter - runtimeType → Type
-
A representation of the runtime type of the object.
no setterinherited
- single → E
-
Checks that this iterable has only one element, and returns that element.
no setterinherited
- singleOrNull → T?
-
Available on Iterable<
The single element of this iterator, orT> , provided by the IterableExtensions extensionnull.no setter -
toJS
→ JSArray<
T> -
Available on List<
Converts this List to a JSArray by either casting, unwrapping, or cloning the List.T> , provided by the ListToJSArray extensionno setter -
toJSIterable
→ JSIterable<
T> -
Available on Iterable<
A JSIterable wrapper that proxies to the Dart iterable API.T> , provided by the IterableToJSIterable extensionno setter -
toJSProxyOrRef
→ JSArray<
T> -
Available on List<
Converts this List to a JSArray by either casting, unwrapping, or proxying the List.T> , provided by the ListToJSArray extensionno setter - unwatched → void Function()?
-
finalinherited
-
value
↔ List<
E> -
Gets the current value of the signal.
getter/setter pairinherited
- version ↔ int
-
Version numbers should always be >= 0, because the special value -1 is used
by Nodes to signify potentially unused but recyclable nodes.
getter/setter pairinherited
-
wait
→ Future<
List< T> > -
Available on Iterable<
Waits for futures in parallel.Future< , provided by the FutureIterable extensionT> >no setter - watched → void Function()?
-
finalinherited
Methods
-
add(
E value) → void -
Adds
valueto the end of this list, extending the length by one.inherited -
add(
E value) → void -
Available on Signal<
List< , provided by the ListSignalExtension extensionE> > -
addAll(
Iterable< E> iterable) → void -
Available on Signal<
List< , provided by the ListSignalExtension extensionE> > -
addAll(
Iterable< E> iterable) → void -
Appends all objects of
iterableto the end of this list.inherited -
any(
bool test(E element)) → bool -
Checks whether any element of this iterable satisfies
test.inherited -
asMap(
) → Map< int, E> -
Available on ReadonlySignal<
List< , provided by the ReadonlyListSignalExtension extensionE> > -
asMap(
) → Map< int, E> -
An unmodifiable Map view of this list.
inherited
-
asNameMap(
) → Map< String, T> -
Available on Iterable<
Creates a map from the names of enum values to the values.T> , provided by the EnumByName extension -
byName(
String name) → T -
Available on Iterable<
Finds the enum value in this list with nameT> , provided by the EnumByName extensionname. -
call(
) → List< E> -
Return the value when invoked
inherited
-
cast<
R> () → List< R> -
Returns a view of this list as a list of
Rinstances.inherited -
cast<
R> () → List< R> -
Available on ReadonlySignal<
List< , provided by the ReadonlyListSignalExtension extensionE> > -
clear(
) → void -
Removes all objects from this list; the length of the list becomes zero.
inherited
-
clear(
) → void -
Available on Signal<
List< , provided by the ListSignalExtension extensionE> > -
contains(
Object? value) → bool -
Whether the collection contains an element equal to
element.inherited -
dispose(
) → void -
Dispose the signal
inherited
-
elementAt(
int index) → E -
Returns the
indexth element.inherited -
elementAtOrNull(
int index) → T? -
Available on Iterable<
The element at positionT> , provided by the IterableExtensions extensionindexof this iterable, ornull. -
every(
bool test(E element)) → bool -
Checks whether every element of this iterable satisfies
test.inherited -
expand<
R> (Iterable< R> toElements(E element)) → Iterable<R> -
Expands each element of this Iterable into zero or more elements.
inherited
-
expand<
R> (Iterable< R> toElements(E element)) → Iterable<R> -
Available on ReadonlySignal<
List< , provided by the ReadonlyListSignalExtension extensionE> > -
fillRange(
int start, int end, [E? fillValue]) → void -
Overwrites a range of elements with
fillValue.inherited -
fillRange(
int start, int end, [E? fillValue]) → void -
Available on Signal<
List< , provided by the ListSignalExtension extensionE> > -
firstWhere(
bool test(E element), {E orElse()?}) → E -
The first element that satisfies the given predicate
test.inherited -
firstWhere(
bool test(E element), {E orElse()?}) → E -
Available on ReadonlySignal<
List< , provided by the ReadonlyListSignalExtension extensionE> > -
fold<
R> (R initialValue, R combine(R previousValue, E element)) → R -
Reduces a collection to a single value by iteratively combining each
element of the collection with an existing value
inherited
-
fold<
R> (R initialValue, R combine(R previousValue, E element)) → R -
Available on ReadonlySignal<
List< , provided by the ReadonlyListSignalExtension extensionE> > -
followedBy(
Iterable< E> other) → Iterable<E> -
Available on ReadonlySignal<
List< , provided by the ReadonlyListSignalExtension extensionE> > -
followedBy(
Iterable< E> other) → Iterable<E> -
Creates the lazy concatenation of this iterable and
other.inherited -
forEach(
void action(E element)) → void -
Invokes
actionon each element of this iterable in iteration order.inherited -
get(
) → List< E> -
Helper method to get the current value
inherited
-
getRange(
int start, int end) → Iterable< E> -
Creates an Iterable that iterates over a range of elements.
inherited
-
getRange(
int start, int end) → Iterable< E> -
Available on ReadonlySignal<
List< , provided by the ReadonlyListSignalExtension extensionE> > -
indexOf(
E element, [int start = 0]) → int -
Available on ReadonlySignal<
List< , provided by the ReadonlyListSignalExtension extensionE> > -
indexOf(
E element, [int start = 0]) → int -
The first index of
elementin this list.inherited -
indexWhere(
bool test(E element), [int start = 0]) → int -
Available on ReadonlySignal<
List< , provided by the ReadonlyListSignalExtension extensionE> > -
indexWhere(
bool test(E element), [int start = 0]) → int -
The first index in the list that satisfies the provided
test.inherited -
insert(
int index, E element) → void -
Available on Signal<
List< , provided by the ListSignalExtension extensionE> > -
insert(
int index, E element) → void -
Inserts
elementat positionindexin this list.inherited -
insertAll(
int index, Iterable< E> iterable) → void -
Inserts all objects of
iterableat positionindexin this list.inherited -
insertAll(
int index, Iterable< E> iterable) → void -
Available on Signal<
List< , provided by the ListSignalExtension extensionE> > -
internalRefresh(
) → bool -
@internal
Refreshes the signal's value internally.
inherited
-
join(
[String separator = ""]) → String -
Converts each element to a String and concatenates the strings.
inherited
-
lastIndexOf(
E element, [int? start]) → int -
Available on ReadonlySignal<
List< , provided by the ReadonlyListSignalExtension extensionE> > -
lastIndexOf(
E element, [int? start]) → int -
The last index of
elementin this list.inherited -
lastIndexWhere(
bool test(E element), [int? start]) → int -
The last index in the list that satisfies the provided
test.inherited -
lastIndexWhere(
bool test(E element), [int? start]) → int -
Available on ReadonlySignal<
List< , provided by the ReadonlyListSignalExtension extensionE> > -
lastWhere(
bool test(E element), {E orElse()?}) → E -
The last element that satisfies the given predicate
test.inherited -
map<
R> (R toElement(E e)) → Iterable< R> -
The current elements of this iterable modified by
toElement.inherited -
noSuchMethod(
Invocation invocation) → dynamic -
Invoked when a nonexistent method or property is accessed.
inherited
-
onDispose(
void cleanup()) → void Function() -
Add a cleanup function to be called when the signal is disposed
inherited
-
overrideWith(
List< E> val) → Signal<List< E> > -
Override the current signal with a new value as if it was created with it.
inherited
-
peek(
) → List< E> -
In the rare instance that you have an effect that should write to another signal based on the previous value, but you don't want the effect to be subscribed to that signal, you can read a signals's previous value via
signal.peek().inherited -
readonly(
) → ReadonlySignal< List< E> > -
Returns a readonly signal
inherited
-
reduce(
E combine(E value, E element)) → E -
Reduces a collection to a single value by iteratively combining elements
of the collection using the provided function.
inherited
-
remove(
Object? value) → bool -
Removes the first occurrence of
valuefrom this list.inherited -
remove(
Object? value) → bool -
Available on Signal<
List< , provided by the ListSignalExtension extensionE> > -
removeAt(
int index) → E -
Removes the object at position
indexfrom this list.inherited -
removeAt(
int index) → E -
Available on Signal<
List< , provided by the ListSignalExtension extensionE> > -
removeLast(
) → E -
Available on Signal<
List< , provided by the ListSignalExtension extensionE> > -
removeLast(
) → E -
Removes and returns the last object in this list.
inherited
-
removeRange(
int start, int end) → void -
Removes a range of elements from the list.
inherited
-
removeRange(
int start, int end) → void -
Available on Signal<
List< , provided by the ListSignalExtension extensionE> > -
removeWhere(
bool test(E element)) → void -
Removes all objects from this list that satisfy
test.inherited -
removeWhere(
bool test(E element)) → void -
Available on Signal<
List< , provided by the ListSignalExtension extensionE> > -
replaceRange(
int start, int end, Iterable< E> replacements) → void -
Available on Signal<
List< , provided by the ListSignalExtension extensionE> > -
replaceRange(
int start, int end, Iterable< E> replacements) → void -
Replaces a range of elements with the elements of
replacements.inherited -
retainWhere(
bool test(E element)) → void -
Available on Signal<
List< , provided by the ListSignalExtension extensionE> > -
retainWhere(
bool test(E element)) → void -
Removes all objects from this list that fail to satisfy
test.inherited -
set(
List< E> val, {bool force = false}) → bool -
Updates the signal's value by method call.
inherited
-
setAll(
int index, Iterable< E> iterable) → void -
Overwrites elements with the objects of
iterable.inherited -
setAll(
int index, Iterable< E> iterable) → void -
Available on Signal<
List< , provided by the ListSignalExtension extensionE> > -
setRange(
int start, int end, Iterable< E> iterable, [int skipCount = 0]) → void -
Writes some elements of
iterableinto a range of this list.inherited -
setRange(
int start, int end, Iterable< E> iterable, [int skipCount = 0]) → void -
Available on Signal<
List< , provided by the ListSignalExtension extensionE> > -
shuffle(
[Random? random]) → void -
Shuffles the elements of this list randomly.
inherited
-
shuffle(
[Random? random]) → void -
Available on Signal<
List< , provided by the ListSignalExtension extensionE> > -
singleWhere(
bool test(E element), {E orElse()?}) → E -
The single element that satisfies
test.inherited -
skip(
int count) → Iterable< E> -
Creates an Iterable that provides all but the first
countelements.inherited -
skipWhile(
bool test(E value)) → Iterable< E> -
Creates an
Iterablethat skips leading elements whiletestis satisfied.inherited -
sort(
[int compare(E a, E b)?]) → void -
Sorts this list according to the order specified by the
comparefunction.inherited -
sort(
[int compare(E a, E b)?]) → void -
Available on Signal<
List< , provided by the ListSignalExtension extensionE> > -
sorted(
[int compare(E a, E b)?]) → List< E> -
Return a new array that is sorted by the
comparefunctioninherited -
sorted(
[int compare(E a, E b)?]) → List< E> -
Available on ReadonlySignal<
Return a new array that is sorted by theList< , provided by the ReadonlyListSignalExtension extensionE> >comparefunction -
sublist(
int start, [int? end]) → List< E> -
Returns a new list containing the elements between
startandend.inherited -
sublist(
int start, [int? end]) → List< E> -
Available on ReadonlySignal<
List< , provided by the ReadonlyListSignalExtension extensionE> > -
subscribe(
void fn(List< E> value)) → void Function() -
Subscribe to value changes with a dispose function
inherited
-
subscribeToNode(
Node node) → void -
@internal
Subscribes this signal to notifications from a given dependency
node.inherited -
take(
int count) → Iterable< E> -
Creates a lazy iterable of the
countfirst elements of this iterable.inherited -
takeWhile(
bool test(E value)) → Iterable< E> -
Creates a lazy iterable of the leading elements satisfying
test.inherited -
toJson(
) → dynamic -
Convert value to JSON
inherited
-
toList(
{bool growable = true}) → List< E> -
Creates a List containing the elements of this Iterable.
inherited
-
toSet(
) → Set< E> -
Creates a Set containing the same elements as this iterable.
inherited
-
toSignal(
{IterableSignalOptions< T> ? options, bool? autoDispose, String? debugLabel}) → IterableSignal<T> -
Available on Iterable<
Convert an existing Iterable to an IterableSignal.T> , provided by the SignalIterableUtils extension -
toSignal(
{ListSignalOptions< T> ? options, bool? autoDispose, String? debugLabel}) → ListSignal<T> -
Available on List<
Convert this existing List to a reactive ListSignal.T> , provided by the SignalListUtils extension -
toString(
) → String -
A string representation of this object.
inherited
-
unsubscribeFromNode(
Node node) → void -
@internal
Unsubscribes this signal from notifications from a given dependency
node.inherited -
where(
bool test(E element)) → Iterable< E> -
Creates a new lazy Iterable with all elements that satisfy the
predicate
test.inherited -
whereType<
R> () → Iterable< R> -
Creates a new lazy Iterable with all elements that have type
T.inherited
Operators
-
operator &(
Iterable< E> other) → ListSignal<E> - Fork: create a new signal which value is the concatenation of source signal and iterable parameter
-
operator +(
List< E> other) → List<E> -
Returns the concatenation of this list and
other.inherited -
operator +(
List< E> other) → List<E> -
Available on ReadonlySignal<
List< , provided by the ReadonlyListSignalExtension extensionE> > -
operator <<(
Iterable< E> other) → ListSignal<E> - Inject: Update current signal value with iterable
-
operator ==(
Object other) → bool -
The equality operator.
override
-
operator [](
int index) → E -
The object at the given
indexin the list.inherited -
operator [](
int index) → E -
Available on ReadonlySignal<
List< , provided by the ReadonlyListSignalExtension extensionE> > -
operator []=(
int index, E value) → void -
Sets the value at the given
indexin the list tovalue.inherited -
operator []=(
int index, E value) → void -
Available on Signal<
List< , provided by the ListSignalExtension extensionE> > -
operator |(
Signal< Iterable< other) → ListSignal<E> >E> - Pipe: create a new signal by sending value from source to other