Skip to content

Upgrading quiver 2 to 3

Breaking2.1.5 → 3.2.2Breaking9Platform2Deprecated5Changed2Fixed3Other3

BreakingUpgrade verdict

9 breaking changes and 2 platform requirement changes.

  • TreeIterator no longer counts as a BidirectionalIterator, so code that relies on that interface will break. The movePrevious method is still available directly on TreeIterator.
  • A helper for the old checked mode is gone because Dart no longer has checked mode.
  • An async loop helper is removed; use the standard Dart future loop instead.
  • The IO helper library is no longer included.
Top 5 of 16 that need code or config changes

Dart SDK requirement changed in 3.2.2: >=2.0.0-dev.61 <3.0.0 → >=2.17.0 <4.0.0.

Breaking9
Makes TreeIterator no longer implement the deprecated BidirectionalIterator; movePrevious still exists on TreeIterator.
TreeIteratorBidirectionalIteratormovePrevious
Removes deprecated assertCheckedMode, since checked mode no longer exists in Dart 2.0.
assertCheckedMode
Removes deprecated doWhileAsync; callers should migrate to Future.doWhile().
doWhileAsyncFuture.doWhile()
Removes the deprecated IO library.
Removes the deprecated mirrors library.
BiMap no longer throws ArgumentError for null keys or values when K or V is nullable; values must still be unique.
BiMapArgumentError
forEachAsync now returns Future<void> instead of Future<Null>.
forEachAsyncFuture<void>Future<Null>
TreeSet.first and TreeSet.last now throw StateError when the set is empty, per the Set API contract.
TreeSet.firstTreeSet.lastStateError
TreeSet iterators throw if Iterator.current is read before moveNext or after it returns false, with null safety enabled.
TreeSetIterator.currentmoveNext
Platform2
Requires Dart 2.17.
Requires Dart SDK 2.12.0 or later.
Deprecated5
Re-deprecates Optional and adds more nuance to its documentation.
Optional
Deprecates Optional; existing users should migrate to non-nullable types, and the type will be removed in Quiver 4.0.0.
Optional
Adds documentation to Optional advising against new uses and recommending migration to nullable types where non-null by default is enabled.
Optional
Deprecates checkNotNull in favor of ArgumentError.checkNotNull; removal planned for 4.0.0.
checkNotNullArgumentError.checkNotNull
Deprecates firstNonNull in favor of null-coalescing plus ArgumentError.checkNotNull; removal planned for 4.0.0.
firstNonNullArgumentError.checkNotNull

Generated by DepDelta from published Dart source. Not mixed with prose notes.

  • removed: function doWhileAsync<T>( Iterable<T> iterable, AsyncAction<bool, T> action): Future<bool>
  • removed: function forEachAsync<T>(Iterable<T> iterable, AsyncAction<Null, T> action, {int maxTasks = …}): Future<Null>
  • removed: function reduceAsync<S, T>( Iterable<T> iterable, S initialValue, AsyncCombiner<S, T> combine): Future<S>
  • removed: typedef AsyncAction<T, E> = Future<T> Function(E e)
  • removed: typedef AsyncCombiner<T, E> = Future<T> Function(T previous, E e)
  • changed: ctor CountdownTimer(Duration duration, this.increment, {Stopwatch stopwatch}) → ctor CountdownTimer(Duration duration, this.increment, {Stopwatch? stopwatch})
  • changed: ctor Metronome.periodic(Duration interval, {Clock clock = …, DateTime anchor}) → ctor Metronome.periodic(Duration interval, {Clock clock = …, DateTime? anchor})
  • changed: field Metronome.anchor: final DateTime → field Metronome.anchor: final DateTime?
  • changed: field UnderflowError.message: final String → field UnderflowError.message: final String?
  • changed: method CountdownTimer.listen(void onData(CountdownTimer event), {Function onError, void onDone(), bool cancelOnError}): StreamSubscription<CountdownTimer> → method CountdownTimer.listen( void Function(CountdownTimer event)? onData, {Function? onError, void Function()? onDone, bool? cancelOnError}): StreamSubscription<CountdownTimer>
  • changed: method FutureStream.listen(void onData(T event), {Function onError, void onDone(), bool cancelOnError}): StreamSubscription<T> → method FutureStream.listen(void Function(T event)? onData, {Function? onError, void Function()? onDone, bool? cancelOnError}): StreamSubscription<T>
  • changed: method Metronome.listen(void onData(DateTime event), {Function onError, void onDone(), bool cancelOnError}): StreamSubscription<DateTime> → method Metronome.listen(void Function(DateTime event)? onData, {Function? onError, void Function()? onDone, bool? cancelOnError}): StreamSubscription<DateTime>
  • changed: method StreamRouter.route(bool predicate(T event)): Stream<T> → method StreamRouter.route(bool Function(T event) predicate): Stream<T>
  • changed: ctor MapCache({Map<K, V> map}) → ctor MapCache({Map<K, V>? map})
  • changed: ctor MapCache.lru({int maximumSize}) → ctor MapCache.lru({int? maximumSize})
  • changed: method Cache.get(K key, {Loader<K, V> ifAbsent}): Future<V> → method Cache.get(K key, {Loader<K, V>? ifAbsent}): Future<V?>
  • changed: method Cache.invalidate(K key): Future<Null> → method Cache.invalidate(K key): Future<void>
  • changed: method Cache.set(K key, V value): Future<Null> → method Cache.set(K key, V value): Future<void>
  • changed: method MapCache.get(K key, {Loader<K, V> ifAbsent}): Future<V> → method MapCache.get(K key, {Loader<K, V>? ifAbsent}): Future<V?>
  • changed: method MapCache.invalidate(K key): Future<Null> → method MapCache.invalidate(K key): Future<void>
  • changed: method MapCache.set(K key, V value): Future<Null> → method MapCache.set(K key, V value): Future<void>
  • removed: class AvlNode<V> extends _TreeNode<V>
  • removed: ctor AvlNode({V object})
  • removed: field LruMap.maximumSize: int
  • removed: get AvlNode.balance: int
  • removed: get AvlNode.left: AvlNode<V>
  • removed: get AvlNode.parent: AvlNode<V>
  • removed: get AvlNode.right: AvlNode<V>
  • removed: method AvlNode.toString(): String
  • removed: method AvlTreeSet.getNode(V object): AvlNode<V>
  • changed: ctor AvlTreeSet({Comparator<V> comparator}) → ctor AvlTreeSet({Comparator<V> comparator = …})
  • changed: ctor LinkedLruHashMap({int maximumSize}) → ctor LinkedLruHashMap({int? maximumSize})
  • changed: ctor ListMultimap.fromIterable(Iterable iterable, {K key(element), V value(element)}) → ctor ListMultimap.fromIterable(super.iterable, {super.key, super.value})
  • changed: ctor LruMap({int maximumSize}) → ctor LruMap({int? maximumSize})
  • changed: ctor Multimap.fromIterable(Iterable iterable, {K key(element), V value(element)}) → ctor Multimap.fromIterable(Iterable iterable, {K Function(dynamic)? key, V Function(dynamic)? value})
  • changed: ctor SetMultimap.fromIterable(Iterable iterable, {K key(element), V value(element)}) → ctor SetMultimap.fromIterable(super.iterable, {super.key, super.value})
  • changed: ctor TreeSet({Comparator<V> comparator}) → ctor TreeSet({Comparator<V> comparator = …})
  • changed: function indexOf<T>(Iterable<T> elements, bool predicate(T element)): int → function indexOf<T>(Iterable<T> elements, bool Function(T element) predicate): int
  • changed: function listsEqual(List a, List b): bool → function listsEqual(List? a, List? b): bool
  • changed: function mapsEqual(Map a, Map b): bool → function mapsEqual(Map? a, Map? b): bool
  • changed: function setsEqual(Set a, Set b): bool → function setsEqual(Set? a, Set? b): bool
  • changed: get AvlTreeSet.iterator: BidirectionalIterator<V> → get AvlTreeSet.iterator: TreeIterator<V>
  • changed: get AvlTreeSet.reverseIterator: BidirectionalIterator<V> → get AvlTreeSet.reverseIterator: TreeIterator<V>
  • changed: get DelegatingMap.entries: Iterable<Null> → get DelegatingMap.entries: Iterable<MapEntry<K, V>>
  • changed: get TreeSet.iterator: BidirectionalIterator<V> → get TreeSet.iterator: TreeIterator<V>
  • changed: get TreeSet.reverseIterator: BidirectionalIterator<V> → get TreeSet.reverseIterator: TreeIterator<V>
  • changed: method AvlTreeSet.contains(Object object): bool → method AvlTreeSet.contains(Object? object): bool
  • changed: method AvlTreeSet.containsAll(Iterable<Object> items): bool → method AvlTreeSet.containsAll(Iterable<Object?> items): bool
  • changed: method AvlTreeSet.difference(Set<Object> other): Set<V> → method AvlTreeSet.difference(Set<Object?> other): Set<V>
  • changed: method AvlTreeSet.fromIterator(V anchor, {bool reversed = …, bool inclusive = …}): BidirectionalIterator<V> → method AvlTreeSet.fromIterator(V anchor, {bool reversed = …, bool inclusive = …}): TreeIterator<V>
  • changed: method AvlTreeSet.intersection(Set<Object> other): Set<V> → method AvlTreeSet.intersection(Set<Object?> other): Set<V>
  • changed: method AvlTreeSet.lookup(Object element): V → method AvlTreeSet.lookup(Object? element): V?
  • changed: method AvlTreeSet.remove(Object item): bool → method AvlTreeSet.remove(Object? item): bool
  • changed: method AvlTreeSet.removeWhere(bool test(V element)): void → method AvlTreeSet.removeWhere(bool Function(V element) test): void
  • changed: method AvlTreeSet.retainAll(Iterable<Object> elements): void → method AvlTreeSet.retainAll(Iterable<Object?> elements): void
  • changed: method AvlTreeSet.retainWhere(bool test(V element)): void → method AvlTreeSet.retainWhere(bool Function(V element) test): void
  • changed: method DelegatingIterable.any(bool test(E element)): bool → method DelegatingIterable.any(bool Function(E element) test): bool
  • changed: method DelegatingIterable.contains(Object element): bool → method DelegatingIterable.contains(Object? element): bool
  • changed: method DelegatingIterable.every(bool test(E element)): bool → method DelegatingIterable.every(bool Function(E element) test): bool
  • changed: method DelegatingIterable.expand<T>(Iterable<T> f(E element)): Iterable<T> → method DelegatingIterable.expand<T>(Iterable<T> Function(E element) f): Iterable<T>
  • changed: method DelegatingIterable.firstWhere(bool test(E element), {E orElse()}): E → method DelegatingIterable.firstWhere(bool Function(E element) test, {E Function()? orElse}): E
  • changed: method DelegatingIterable.fold<T>(T initialValue, T combine(T previousValue, E element)): T → method DelegatingIterable.fold<T>(T initialValue, T Function(T previousValue, E element) combine): T
  • changed: method DelegatingIterable.forEach(void f(E element)): void → method DelegatingIterable.forEach(void Function(E element) f): void
  • changed: method DelegatingIterable.lastWhere(bool test(E element), {E orElse()}): E → method DelegatingIterable.lastWhere(bool Function(E element) test, {E Function()? orElse}): E
  • changed: method DelegatingIterable.map<T>(T f(E e)): Iterable<T> → method DelegatingIterable.map<T>(T Function(E e) f): Iterable<T>
  • changed: method DelegatingIterable.reduce(E combine(E value, E element)): E → method DelegatingIterable.reduce(E Function(E value, E element) combine): E
  • changed: method DelegatingIterable.singleWhere(bool test(E element), {E orElse()}): E → method DelegatingIterable.singleWhere(bool Function(E element) test, {E Function()? orElse}): E
  • changed: method DelegatingIterable.skipWhile(bool test(E value)): Iterable<E> → method DelegatingIterable.skipWhile(bool Function(E value) test): Iterable<E>
  • changed: method DelegatingIterable.takeWhile(bool test(E value)): Iterable<E> → method DelegatingIterable.takeWhile(bool Function(E value) test): Iterable<E>
  • changed: method DelegatingIterable.where(bool test(E element)): Iterable<E> → method DelegatingIterable.where(bool Function(E element) test): Iterable<E>
  • changed: method DelegatingList.fillRange(int start, int end, [E fillValue]): void → method DelegatingList.fillRange(int start, int end, [E? fillValue]): void
  • changed: method DelegatingList.indexWhere(bool test(E element), [int start = …]): int → method DelegatingList.indexWhere(bool Function(E element) test, [int start = …]): int
  • changed: method DelegatingList.lastIndexOf(E element, [int start]): int → method DelegatingList.lastIndexOf(E element, [int? start]): int
  • changed: method DelegatingList.lastIndexWhere(bool test(E element), [int start]): int → method DelegatingList.lastIndexWhere(bool Function(E element) test, [int? start]): int
  • changed: method DelegatingList.remove(Object value): bool → method DelegatingList.remove(Object? value): bool
  • changed: method DelegatingList.removeWhere(bool test(E element)): void → method DelegatingList.removeWhere(bool Function(E element) test): void
  • changed: method DelegatingList.retainWhere(bool test(E element)): void → method DelegatingList.retainWhere(bool Function(E element) test): void
  • changed: method DelegatingList.shuffle([Random random]): void → method DelegatingList.shuffle([Random? random]): void
  • changed: method DelegatingList.sort([int compare(E a, E b)]): void → method DelegatingList.sort([int Function(E a, E b)? compare]): void
  • changed: method DelegatingList.sublist(int start, [int end]): List<E> → method DelegatingList.sublist(int start, [int? end]): List<E>
  • changed: method DelegatingMap.containsKey(Object key): bool → method DelegatingMap.containsKey(Object? key): bool
  • changed: method DelegatingMap.containsValue(Object value): bool → method DelegatingMap.containsValue(Object? value): bool
  • changed: method DelegatingMap.forEach(void f(K key, V value)): void → method DelegatingMap.forEach(void Function(K key, V value) f): void
  • changed: method DelegatingMap.map<K2, V2>(Object transform(K key, V value)): Map<K2, V2> → method DelegatingMap.map<K2, V2>(Object Function(K key, V value) transform): Map<K2, V2>
  • changed: method DelegatingMap.operator [](Object key): V → method DelegatingMap.operator [](Object? key): V?
  • changed: method DelegatingMap.putIfAbsent(K key, V ifAbsent()): V → method DelegatingMap.putIfAbsent(K key, V Function() ifAbsent): V
  • changed: method DelegatingMap.remove(Object key): V → method DelegatingMap.remove(Object? key): V?
  • changed: method DelegatingMap.removeWhere(bool test(K key, V value)): void → method DelegatingMap.removeWhere(bool Function(K key, V value) test): void
  • changed: method DelegatingMap.update(K key, V update(V value), {V ifAbsent()}): V → method DelegatingMap.update(K key, V Function(V value) update, {V Function()? ifAbsent}): V
  • changed: method DelegatingMap.updateAll(V update(K key, V value)): void → method DelegatingMap.updateAll(V Function(K key, V value) update): void
  • changed: method DelegatingQueue.remove(Object object): bool → method DelegatingQueue.remove(Object? object): bool
  • changed: method DelegatingQueue.removeWhere(bool test(E element)): void → method DelegatingQueue.removeWhere(bool Function(E element) test): void
  • changed: method DelegatingQueue.retainWhere(bool test(E element)): void → method DelegatingQueue.retainWhere(bool Function(E element) test): void
  • changed: method DelegatingSet.containsAll(Iterable<Object> other): bool → method DelegatingSet.containsAll(Iterable<Object?> other): bool
  • changed: method DelegatingSet.difference(Set<Object> other): Set<E> → method DelegatingSet.difference(Set<Object?> other): Set<E>
  • changed: method DelegatingSet.intersection(Set<Object> other): Set<E> → method DelegatingSet.intersection(Set<Object?> other): Set<E>
  • changed: method DelegatingSet.lookup(Object object): E → method DelegatingSet.lookup(Object? object): E?
  • changed: method DelegatingSet.remove(Object value): bool → method DelegatingSet.remove(Object? value): bool
  • changed: method DelegatingSet.removeAll(Iterable<Object> elements): void → method DelegatingSet.removeAll(Iterable<Object?> elements): void
  • changed: method DelegatingSet.removeWhere(bool test(E element)): void → method DelegatingSet.removeWhere(bool Function(E element) test): void
  • changed: method DelegatingSet.retainAll(Iterable<Object> elements): void → method DelegatingSet.retainAll(Iterable<Object?> elements): void
  • changed: method DelegatingSet.retainWhere(bool test(E element)): void → method DelegatingSet.retainWhere(bool Function(E element) test): void
  • changed: method HashBiMap.containsKey(Object key): bool → method HashBiMap.containsKey(Object? key): bool
  • changed: method HashBiMap.containsValue(Object value): bool → method HashBiMap.containsValue(Object? value): bool
  • changed: method HashBiMap.forEach(void f(K key, V value)): void → method HashBiMap.forEach(void Function(K key, V value) f): void
  • changed: method HashBiMap.map<K2, V2>(MapEntry<K2, V2> transform(K key, V value)): Map<K2, V2> → method HashBiMap.map<K2, V2>( MapEntry<K2, V2> Function(K key, V value) transform): Map<K2, V2>
  • changed: method HashBiMap.operator [](Object key): V → method HashBiMap.operator [](Object? key): V?
  • changed: method HashBiMap.putIfAbsent(K key, V ifAbsent()): V → method HashBiMap.putIfAbsent(K key, V Function() ifAbsent): V
  • changed: method HashBiMap.remove(Object key): V → method HashBiMap.remove(Object? key): V?
  • changed: method HashBiMap.removeWhere(bool test(K key, V value)): void → method HashBiMap.removeWhere(bool Function(K key, V value) test): void
  • changed: method HashBiMap.update(K key, V update(V value), {V ifAbsent()}): V → method HashBiMap.update(K key, V Function(V value) update, {V Function()? ifAbsent}): V
  • changed: method HashBiMap.updateAll(V update(K key, V value)): void → method HashBiMap.updateAll(V Function(K key, V value) update): void
  • changed: method LinkedLruHashMap.containsKey(Object key): bool → method LinkedLruHashMap.containsKey(Object? key): bool
  • changed: method LinkedLruHashMap.containsValue(Object value): bool → method LinkedLruHashMap.containsValue(Object? value): bool
  • changed: method LinkedLruHashMap.forEach(void action(K key, V value)): void → method LinkedLruHashMap.forEach(void Function(K key, V value) action): void
  • changed: method LinkedLruHashMap.map<K2, V2>(Object transform(K key, V value)): Map<K2, V2> → method LinkedLruHashMap.map<K2, V2>(Object Function(K key, V value) transform): Map<K2, V2>
  • changed: method LinkedLruHashMap.operator [](Object key): V → method LinkedLruHashMap.operator [](Object? key): V?
  • changed: method LinkedLruHashMap.putIfAbsent(K key, V ifAbsent()): V → method LinkedLruHashMap.putIfAbsent(K key, V Function() ifAbsent): V
  • changed: method LinkedLruHashMap.remove(Object key): V → method LinkedLruHashMap.remove(Object? key): V?
  • changed: method LinkedLruHashMap.removeWhere(bool test(K key, V value)): void → method LinkedLruHashMap.removeWhere(bool Function(K key, V value) test): void
  • changed: method LinkedLruHashMap.update(K key, V update(V value), {V ifAbsent()}): V → method LinkedLruHashMap.update(K key, V Function(V value) update, {V Function()? ifAbsent}): V
  • changed: method LinkedLruHashMap.updateAll(V update(K key, V value)): void → method LinkedLruHashMap.updateAll(V Function(K key, V value) update): void
  • changed: method ListMultimap.operator [](Object key): List<V> → method ListMultimap.operator [](Object? key): List<V>
  • changed: method ListMultimap.removeAll(Object key): List<V> → method ListMultimap.removeAll(Object? key): List<V>
  • changed: method Multimap.contains(Object key, Object value): bool → method Multimap.contains(Object? key, Object? value): bool
  • changed: method Multimap.containsKey(Object key): bool → method Multimap.containsKey(Object? key): bool
  • changed: method Multimap.containsValue(Object value): bool → method Multimap.containsValue(Object? value): bool
  • changed: method Multimap.forEach(void f(K key, V value)): void → method Multimap.forEach(void Function(K key, V value) f): void
  • changed: method Multimap.forEachKey(void f(K key, Iterable<V> value)): void → method Multimap.forEachKey(void Function(K key, Iterable<V> value) f): void
  • changed: method Multimap.operator [](Object key): Iterable<V> → method Multimap.operator [](Object? key): Iterable<V>
  • changed: method Multimap.remove(Object key, V value): bool → method Multimap.remove(Object? key, V? value): bool
  • changed: method Multimap.removeAll(Object key): Iterable<V> → method Multimap.removeAll(Object? key): Iterable<V>
  • changed: method Multimap.removeWhere(bool predicate(K key, V value)): void → method Multimap.removeWhere(bool Function(K key, V value) predicate): void
  • changed: method SetMultimap.operator [](Object key): Set<V> → method SetMultimap.operator [](Object? key): Set<V>
  • changed: method SetMultimap.removeAll(Object key): Set<V> → method SetMultimap.removeAll(Object? key): Set<V>
  • changed: method TreeSet.fromIterator(V anchor, {bool reversed = …, bool inclusive = …}): BidirectionalIterator<V> → method TreeSet.fromIterator(V anchor, {bool reversed = …, bool inclusive = …}): TreeIterator<V>
  • added: class TreeIterator<V> implements Iterator<V>
  • added: ctor ListMultimap.fromMultimap(super.other)
  • added: ctor Multimap.fromMultimap(Multimap<K, V> other)
  • added: field TreeIterator.inclusive: final bool
  • added: field TreeIterator.reversed: final bool
  • added: field TreeIterator.tree: final AvlTreeSet<V>
  • added: get LruMap.maximumSize: int
  • added: get TreeIterator.current: V
  • added: method TreeIterator.Function(): bool
  • added: method TreeIterator.moveNext(): bool
  • added: method TreeIterator.movePrevious(): bool
  • added: set LruMap.maximumSize(int size)
  • changed: ctor Optional.fromNullable(T value) → ctor Optional.fromNullable(T? value)
  • changed: get Optional.orNull: T → get Optional.orNull: T?
  • changed: method Optional.ifAbsent(void ifAbsent()): void → method Optional.ifAbsent(void Function() ifAbsent): void
  • changed: method Optional.ifPresent(void ifPresent(T value)): void → method Optional.ifPresent(void Function(T value) ifPresent): void
  • changed: method Optional.operator ==(o): bool → method Optional.operator ==(Object o): bool
  • changed: method Optional.transform<S>(S transformer(T value)): Optional<S> → method Optional.transform<S>(S Function(T value) transformer): Optional<S>
  • changed: method Optional.transformNullable<S>(S transformer(T value)): Optional<S> → method Optional.transformNullable<S>(S? Function(T value) transformer): Optional<S>
  • removed: function byteStreamToString(Stream<List<int>> stream, {Encoding encoding = …}): Future<String>
  • removed: function getFullPath(path): String
  • removed: function visitDirectory(Directory dir, Future<bool> visit(FileSystemEntity f)): Future
  • removed: field GeneratingIterable.initial: final _Initial<T>
  • removed: field GeneratingIterable.next: final _Next<T>
  • changed: ctor GeneratingIterable(this.initial, this.next) → ctor GeneratingIterable(this._initial, this._next)
  • changed: field Extent.max: final T → field Extent.max: final T?
  • changed: field Extent.min: final T → field Extent.min: final T?
  • changed: function extent<T>(Iterable<T> i, [Comparator<T> compare]): Extent<T> → function extent<T>(Iterable<T> i, [Comparator<T>? compare]): Extent<T>
  • changed: function generate(initial(), next(o)): Iterable → function generate(Function() initial, Function(dynamic) next): Iterable
  • changed: function max<T>(Iterable<T> i, [Comparator<T> compare]): T → function max<T>(Iterable<T> i, [Comparator<T>? compare]): T?
  • changed: function merge<T>(Iterable<Iterable<T>> iterables, [Comparator<T> compare]): Iterable<T> → function merge<T>(Iterable<Iterable<T>> iterables, [Comparator<T>? compare]): Iterable<T>
  • changed: function min<T>(Iterable<T> i, [Comparator<T> compare]): T → function min<T>(Iterable<T> i, [Comparator<T>? compare]): T?
  • changed: function range(num startOrStop, [num stop, num step]): Iterable<num> → function range(num startOrStop, [num? stop, num? step]): Iterable<num>
  • changed: method InfiniteIterable.every(bool test(T element)): bool → method InfiniteIterable.every(bool Function(T element) test): bool
  • changed: method InfiniteIterable.fold<T1>(T1 initialValue, T1 combine(T1 previousValue, T element)): T1 → method InfiniteIterable.fold<T1>( T1 initialValue, T1 Function(T1 previousValue, T element) combine): T1
  • changed: method InfiniteIterable.forEach(void f(T element)): void → method InfiniteIterable.forEach(void Function(T element) action): void
  • changed: method InfiniteIterable.lastWhere(bool test(T value), {T orElse()}): T → method InfiniteIterable.lastWhere(bool Function(T value) test, {T Function()? orElse}): T
  • changed: method InfiniteIterable.reduce(T combine(T value, T element)): T → method InfiniteIterable.reduce(T Function(T value, T element) combine): T
  • changed: method InfiniteIterable.singleWhere(bool test(T value), {T orElse()}): T → method InfiniteIterable.singleWhere(bool Function(T value) test, {T Function()? orElse}): T
  • added: method GeneratingIterable.Function(): T
  • added: method GeneratingIterable.Function(T value): T?
  • removed: class Method
  • removed: ctor Method(this.mirror, this.symbol)
  • removed: field Method.mirror: final InstanceMirror
  • removed: field Method.symbol: final Symbol
  • removed: function classImplements(ClassMirror classMirror, ClassMirror interfaceMirror): bool
  • removed: function getDeclaration(ClassMirror classMirror, Symbol name): DeclarationMirror
  • removed: function getTypeName(Type t): Symbol
  • removed: function implements(Object o, Type type): bool
  • removed: method Method.noSuchMethod(Invocation invocation): dynamic
  • changed: function matchAny(Iterable<Pattern> include, {Iterable<Pattern> exclude}): Pattern → function matchAny(Iterable<Pattern> include, {Iterable<Pattern>? exclude}): Pattern
  • changed: method Glob.matchAsPrefix(String string, [int start = …]): Match → method Glob.matchAsPrefix(String string, [int start = …]): Match?
  • changed: method Glob.operator ==(other): bool → method Glob.operator ==(Object other): bool
  • changed: function center(String input, int width, String fill): String → function center(String? input, int width, String fill): String
  • changed: function equalsIgnoreCase(String a, String b): bool → function equalsIgnoreCase(String? a, String? b): bool
  • changed: function isBlank(String s): bool → function isBlank(String? s): bool
  • changed: function isEmpty(String s): bool → function isEmpty(String? s): bool
  • changed: function isNotBlank(String s): bool → function isNotBlank(String? s): bool
  • changed: function isNotEmpty(String s): bool → function isNotEmpty(String? s): bool
  • changed: function loop(String s, int from, [int to]): String → function loop(String s, int from, [int? to]): String
  • changed: method FakeAsync.run(callback(FakeAsync self)): dynamic → method FakeAsync.run(Function(FakeAsync self) callback): dynamic
  • changed: ctor MatchError([this.message]) → ctor MatchError([this.message = …])
  • removed: function assertCheckedMode(): void
  • changed: method FakeAsync.run(callback(FakeAsync self)): dynamic → method FakeAsync.run(Function(FakeAsync self) callback): dynamic
  • changed: ctor MatchError([this.message]) → ctor MatchError([this.message = …])
  • removed: function assertCheckedMode(): void
  • changed: ctor FakeStopwatch(int now(), this.frequency) → ctor FakeStopwatch(int Function() now, this.frequency)
  • changed: ctor FakeStopwatch(int now(), this.frequency) → ctor FakeStopwatch(int Function() now, this.frequency)
  • changed: function clampDayOfMonth({ @required int year, @required int month, @required int day, }): int → function clampDayOfMonth({ required int year, required int month, required int day, }): int