avoid-nested-futures
- Group
- Correctness
- Path
lint/correctness/avoid-nested-futures- Default
- Off, opt in
- Origin
- Falcon
- Rule
- 99 of 512
Avoid Future<Future<T>>, FutureOr<Future<T>>, and other directly
nested future wrappers. Return Future<T> (or FutureOr<T>) instead.
Checks explicit type occurrences, including expanded typedefs, using SDK declaration identities and lexical type parameters. Collections of futures are not nested wrappers; inferred-only types are deliberately not reported.
Reference: https://dcm.dev/docs/rules/common/avoid-nested-futures/
Invalid
import 'dart:async';
import 'dart:async' as async;
Future<Future<int>>? first;
FutureOr<Future<int>>? second;
FutureOr<FutureOr<int>>? third;
Future<FutureOr<String>>? fourth;
async.Future<async.Future<int>>? prefixed;
void consume(Future<Future<void>> value) {} Future<Future<int>>? first;Future<Future<int>>? first;FutureOr<Future<int>>? second;FutureOr<Future<int>>? second;FutureOr<FutureOr<int>>? third;FutureOr<FutureOr<int>>? third;Future<FutureOr<String>>? fourth;Future<FutureOr<String>>? fourth;async.Future<async.Future<int>>? prefixed;async.Future<async.Future<int>>? prefixed;void consume(Future<Future<void>> value) {}Valid
import 'dart:async';
Future<int>? one;
FutureOr<int>? maybe;
List<Future<int>>? many;
Future<List<int>>? collection;
Future<Stream<int>>? stream;
Future<int> Function()? callback;
Future? raw;Configure avoid-nested-futures
Set its severity in falcon.json. See the configuration guide.
{
"linter": {
"rules": {
"correctness": {
"avoid-nested-futures": "error"
}
}
}
}Or silence one occurrence with a suppression comment; the reason is required.
// falcon-ignore lint/correctness/avoid-nested-futures: <reason>More correctness rules
- avoid-nested-streams-and-futures
Avoid directly nesting SDK streams and futures:
Stream<Future<T>>andFuture<Stream<T>>complicate consumption. - 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.