avoid-nested-streams-and-futures
- Group
- Correctness
- Path
lint/correctness/avoid-nested-streams-and-futures- Default
- Off, opt in
- Origin
- Falcon
- Rule
- 101 of 512
Avoid directly nesting SDK streams and futures: Stream<Future<T>> and
Future<Stream<T>> complicate consumption. Use asyncMap/asyncExpand, or
expose a single Stream<T> instead of a future that produces a stream.
FutureOr is also future-like. Explicit type occurrences and typedef
expansions are checked with lexical type-parameter scopes; stream-of-stream
and future-of-future types are outside this rule. Inferred-only types are
not reported.
Reference: https://dcm.dev/docs/rules/common/avoid-nested-streams-and-futures/
Invalid
import 'dart:async';
import 'dart:async' as async;
Stream<Future<int>>? first;
Future<Stream<int>>? second;
Stream<FutureOr<int>>? third;
FutureOr<Stream<String>>? fourth;
async.Stream<async.Future<int>>? prefixed;
void consume(Future<Stream<void>> value) {} Stream<Future<int>>? first;Stream<Future<int>>? first;Future<Stream<int>>? second;Future<Stream<int>>? second;Stream<FutureOr<int>>? third;Stream<FutureOr<int>>? third;FutureOr<Stream<String>>? fourth;FutureOr<Stream<String>>? fourth;async.Stream<async.Future<int>>? prefixed;async.Stream<async.Future<int>>? prefixed;void consume(Future<Stream<void>> value) {}Valid
import 'dart:async';
Stream<int>? sequence;
Future<int>? result;
FutureOr<int>? maybe;
Stream<Stream<int>>? sequences;
Future<Future<int>>? nestedFuture;
Future<List<Stream<int>>>? batches;
Stream<List<Future<int>>>? jobs;
Future<Stream<int> Function()>? callback;Configure avoid-nested-streams-and-futures
Set its severity in falcon.json. See the configuration guide.
{
"linter": {
"rules": {
"correctness": {
"avoid-nested-streams-and-futures": "error"
}
}
}
}Or silence one occurrence with a suppression comment; the reason is required.
// falcon-ignore lint/correctness/avoid-nested-streams-and-futures: <reason>More correctness rules
- avoid-read-inside-buildrecommendedprovider
Flags non-listening Provider reads directly inside Flutter widget builds.
- avoid-recursive-calls
Reports direct self-calls in functions and methods, including guarded recursion.
- avoid-recursive-widget-callsrecommendedflutter
Warns when a widget's build method constructs the same widget again.
- avoid-ref-inside-state-disposeriverpod
Rejects Riverpod widget references used during State.dispose.
- avoid-ref-read-inside-buildrecommendedriverpod
Flags one-time Riverpod reads of provider state during widget build.
- avoid-ref-watch-outside-buildrecommendedriverpod
Flags Riverpod WidgetRef.watch subscriptions outside synchronous widget build bodies.
- avoid-relative-lib-imports
avoid_relative_lib_importsrecommendedDisallow relative imports that reach into a
lib/directory. - avoid-returning-widgets
avoid-returning-widgetsflutterDisallow functions and methods that return a
Widget.