mirror of
https://github.com/flutter/flutter
synced 2024-10-05 15:59:49 +00:00
Allow Listenable.merge()
to use any iterable (#143675)
This is a very small change that fixes #143664.
This commit is contained in:
parent
c82ca469a3
commit
7b5ec588d1
|
@ -62,11 +62,11 @@ abstract class Listenable {
|
|||
/// Return a [Listenable] that triggers when any of the given [Listenable]s
|
||||
/// themselves trigger.
|
||||
///
|
||||
/// The list must not be changed after this method has been called. Doing so
|
||||
/// will lead to memory leaks or exceptions.
|
||||
/// Once the factory is called, items must not be added or removed from the iterable.
|
||||
/// Doing so will lead to memory leaks or exceptions.
|
||||
///
|
||||
/// The list may contain nulls; they are ignored.
|
||||
factory Listenable.merge(List<Listenable?> listenables) = _MergingListenable;
|
||||
/// The iterable may contain nulls; they are ignored.
|
||||
factory Listenable.merge(Iterable<Listenable?> listenables) = _MergingListenable;
|
||||
|
||||
/// Register a closure to be called when the object notifies its listeners.
|
||||
void addListener(VoidCallback listener);
|
||||
|
@ -491,7 +491,7 @@ mixin class ChangeNotifier implements Listenable {
|
|||
class _MergingListenable extends Listenable {
|
||||
_MergingListenable(this._children);
|
||||
|
||||
final List<Listenable?> _children;
|
||||
final Iterable<Listenable?> _children;
|
||||
|
||||
@override
|
||||
void addListener(VoidCallback listener) {
|
||||
|
|
|
@ -314,6 +314,21 @@ void main() {
|
|||
log.clear();
|
||||
});
|
||||
|
||||
test('Merging change notifiers supports any iterable', () {
|
||||
final TestNotifier source1 = TestNotifier();
|
||||
final TestNotifier source2 = TestNotifier();
|
||||
final List<String> log = <String>[];
|
||||
|
||||
final Listenable merged = Listenable.merge(<Listenable?>{source1, source2});
|
||||
void listener() => log.add('listener');
|
||||
|
||||
merged.addListener(listener);
|
||||
source1.notify();
|
||||
source2.notify();
|
||||
expect(log, <String>['listener', 'listener']);
|
||||
log.clear();
|
||||
});
|
||||
|
||||
test('Merging change notifiers ignores null', () {
|
||||
final TestNotifier source1 = TestNotifier();
|
||||
final TestNotifier source2 = TestNotifier();
|
||||
|
|
Loading…
Reference in a new issue