avoid-shrink-wrap-in-lists
- Group
- Performance
- Path
lint/performance/avoid-shrink-wrap-in-lists- Default
- Off, opt in
- Origin
- Falcon
- Domain
- flutter
- Rule
- 139 of 512
Avoids shrink-wrapped Flutter lists nested in rows, columns, or other lists.
Shrink wrapping repeatedly measures the list's contents; prefer slivers instead.
Only resolved Flutter ListView constructors with a literal true shrinkWrap
argument inside a Flutter Row, Column, or ListView child argument are flagged.
Unknown flags, false values, unrelated classes, and standalone lists are ignored.
Invalid
import 'package:flutter/material.dart';
import 'package:flutter/material.dart' as m;
Widget column() => Column(children: [
ListView(shrinkWrap: true),
]);
Widget row() => Row(children: [
new ListView(shrinkWrap: true),
]);
Widget prefixed() => m.Column(children: [
m.ListView(shrinkWrap: (true)),
]);
Widget nested() => ListView(children: [
ListView.builder(shrinkWrap: true, itemBuilder: (context, index) => Text('item')),
]);
Widget wrapped() => Column(children: [
Expanded(child: ListView(shrinkWrap: true)),
]);Widget column() => Column(children: [ ListView(shrinkWrap: true),Widget row() => Row(children: [ new ListView(shrinkWrap: true),Widget prefixed() => m.Column(children: [ m.ListView(shrinkWrap: (true)),Widget nested() => ListView(children: [ ListView.builder(shrinkWrap: true, itemBuilder: (context, index) => Text('item')),Widget wrapped() => Column(children: [ Expanded(child: ListView(shrinkWrap: true)),Valid
import 'package:flutter/material.dart';
import 'package:flutter/material.dart' as m;
Widget standalone() => ListView(shrinkWrap: true);
Widget falseFlag() => Column(children: [ListView(shrinkWrap: false)]);
Widget unknownFlag(bool flag) => Column(children: [ListView(shrinkWrap: flag)]);
Widget noFlag() => Row(children: [ListView()]);
Widget unrelatedParent() => Center(child: ListView(shrinkWrap: true));
Widget localShadow(dynamic ListView) => Column(children: [ListView(shrinkWrap: true)]);
Widget prefixShadow(dynamic m) => Column(children: [m.ListView(shrinkWrap: true)]);
Widget deferred() => Column(children: [Builder(builder: (context) => ListView(shrinkWrap: true))]);Configure avoid-shrink-wrap-in-lists
Set its severity in falcon.json. See the configuration guide.
{
"linter": {
"rules": {
"performance": {
"avoid-shrink-wrap-in-lists": "error"
}
}
}
}Or silence one occurrence with a suppression comment; the reason is required.
// falcon-ignore lint/performance/avoid-shrink-wrap-in-lists: <reason>More performance rules
- avoid-slow-async-io
avoid_slow_async_ioAvoid the slow asynchronous
dart:iofile-system queries. - avoid-slow-collection-methods
Reports filtered iterable searches that have a direct search-method alternative.
- avoid-unnecessary-collections
Avoid singleton collection literals where SDK APIs accept a single value.
- avoid-unnecessary-consumer-widgetsriverpod
Flags Riverpod consumer widgets whose build reference is unused.
- avoid-unnecessary-futures
Prefer synchronous declarations when an async Future only returns scalars.
- avoid-unnecessary-gesture-detectorflutter
Flags handler-free Flutter
GestureDetectorsand tap-only wrappers around enabled Flutter buttons. - avoid-unnecessary-hook-widgetsflutter_hooks
Flags confirmed hook widgets and
HookBuildercallbacks that do not use hooks. - move-variable-closer-to-its-usage
Move final/const scalar literals into their only branch, or after an if.