prefer-use-callback

Path
lint/performance/prefer-use-callback
Default
Off, opt in
Origin
Falcon
Rule
417 of 512
flutter_hooks

Prefer useCallback for synchronous memoized function literals. Only resolved flutter_hooks calls with a zero-argument, single-expression builder are checked; asynchronous and side-effectful builders are preserved.

Invalid

example.dartdart
import 'package:flutter_hooks/flutter_hooks.dart';
import 'package:flutter_hooks/flutter_hooks.dart' as hooks;

void example() {
  useMemoized(() => () {});
  hooks.useMemoized(() => (int value) => value + 1);
  useMemoized(() { return () {}; });
  useMemoized<void Function()>(() => () {});
  useMemoized(() => (() {}), [1]);
}
Prefer `useCallback` instead of `useMemoized` for function expressions.
4void example() {
5 useMemoized(() => () {});
Prefer `useCallback` instead of `useMemoized` for function expressions.
5 useMemoized(() => () {});
6 hooks.useMemoized(() => (int value) => value + 1);
Prefer `useCallback` instead of `useMemoized` for function expressions.
6 hooks.useMemoized(() => (int value) => value + 1);
7 useMemoized(() { return () {}; });
Prefer `useCallback` instead of `useMemoized` for function expressions.
7 useMemoized(() { return () {}; });
8 useMemoized<void Function()>(() => () {});
Prefer `useCallback` instead of `useMemoized` for function expressions.
8 useMemoized<void Function()>(() => () {});
9 useMemoized(() => (() {}), [1]);

Valid

example.dartdart
import 'package:flutter_hooks/flutter_hooks.dart';
import 'package:flutter_hooks/flutter_hooks.dart' as hooks;

void example() {
  useCallback(() {});
  useMemoized(() => 42);
  useMemoized(() async => () {});
  useMemoized(() { print('creation'); return () {}; });
  useMemoized(() => existing);
  void local(dynamic useMemoized) { useMemoized(() => () {}); }
  void prefix(dynamic hooks) { hooks.useMemoized(() => () {}); }
}
void existing() {}
class Local {
  dynamic useMemoized(dynamic callback) => callback();
  void build() { useMemoized(() => () {}); }
}

Configure prefer-use-callback

Set its severity in falcon.json. See the configuration guide.

falcon.jsonjson
{
  "linter": {
    "rules": {
      "performance": {
        "prefer-use-callback": "error"
      }
    }
  }
}

Or silence one occurrence with a suppression comment; the reason is required.

example.dartdart
// falcon-ignore lint/performance/prefer-use-callback: <reason>
  • prefer-use-memoflutter_hooks

    Prefer memoizing freshly allocated collection values used as hook keys.

  • prefer-using-list-viewflutter

    Suggests considering ListView for a SingleChildScrollView containing a plain Flutter Column with at least two unconditional children in a list literal.

  • sized-box-for-whitespacesized_box_for_whitespacerecommendedflutter

    Flags a Container used only to add fixed width/height whitespace.

  • unnecessary-to-list-in-spreadsunnecessary_to_list_in_spreadsrecommended

    Flags a .toList() call on the operand of a spread, e.g.

  • use-is-even-rather-than-modulouse_is_even_rather_than_modulo

    Prefers isEven/isOdd to comparing x % 2 with 0 or 1.

  • use-string-buffersuse_string_buffersrecommended

    Prefers a StringBuffer to growing a String with + inside a loop.

  • avoid-border-allflutter

    Avoids Flutter's non-const Border.all factory.

  • avoid-shrink-wrap-in-listsflutter

    Avoids shrink-wrapped Flutter lists nested in rows, columns, or other lists.