prefer-transform-over-container

Group
Style
Path
lint/style/prefer-transform-over-container
Default
Off, opt in
Origin
Falcon
Domain
flutter
Rule
412 of 512
flutter

Prefers Transform over a Container used only for transform.

The unnamed Flutter constructor must have a provably non-null child and a provably non-null transform argument, with only an optional key. transformAlignment is also allowed and maps to Transform.alignment. Other arguments, nullable or unresolved values, and shadowed constructors are ignored. The dedicated widget makes the layout intent explicit. Contexts explicitly requiring Container are excluded.

Invalid

example.dartdart
import 'package:flutter/material.dart';
import 'package:flutter/material.dart' as ui;

typedef LayoutContainer = Container;

void examples(Widget child, Matrix4 value) {
  Container(transform: value, child: child);
  new Container(transform: value, child: child);
  ui.Container(child: child, transform: value);
  new ui.Container(key: const Key("box"), transform: value, child: child);
  LayoutContainer(transform: value, child: child);
  Container(key: const Key("ordered"), child: child, transform: (value));
  Container(transform: value, transformAlignment: Alignment.center, child: child);
}
Prefer `Transform` over a `Container` used only for transform.
6void examples(Widget child, Matrix4 value) {
7 Container(transform: value, child: child);
Prefer `Transform` over a `Container` used only for transform.
7 Container(transform: value, child: child);
8 new Container(transform: value, child: child);
Prefer `Transform` over a `Container` used only for transform.
8 new Container(transform: value, child: child);
9 ui.Container(child: child, transform: value);
Prefer `Transform` over a `Container` used only for transform.
9 ui.Container(child: child, transform: value);
10 new ui.Container(key: const Key("box"), transform: value, child: child);
Prefer `Transform` over a `Container` used only for transform.
10 new ui.Container(key: const Key("box"), transform: value, child: child);
11 LayoutContainer(transform: value, child: child);
Prefer `Transform` over a `Container` used only for transform.
11 LayoutContainer(transform: value, child: child);
12 Container(key: const Key("ordered"), child: child, transform: (value));
Prefer `Transform` over a `Container` used only for transform.
12 Container(key: const Key("ordered"), child: child, transform: (value));
13 Container(transform: value, transformAlignment: Alignment.center, child: child);

Valid

example.dartdart
import 'package:flutter/material.dart';
import 'package:flutter/material.dart' as ui;

typedef LayoutContainer = Container;

void keepContainer(Widget child, Matrix4 value, Matrix4? nullable, Widget? nullableChild, dynamic unknown) {
  Container(transform: value);
  Container(child: child);
  Container(transform: null, child: child);
  Container(transform: nullable, child: child);
  Container(transform: unknown, child: child);
  Container(transform: value, child: null);
  Container(transform: value, child: nullableChild);
  Container(transform: value, width: 12, child: child);
  Container(transform: value, decoration: const BoxDecoration(), child: child);
  Container(transform: value, color: Colors.red, child: child);
}

Object parameterShadow(dynamic Container, Widget child, Matrix4 value) =>
    Container(transform: value, child: child);

Object prefixShadow(dynamic ui, Widget child, Matrix4 value) =>
    ui.Container(transform: value, child: child);

Object aliasShadow(dynamic LayoutContainer, Widget child, Matrix4 value) =>
    LayoutContainer(transform: value, child: child);

void localShadow(dynamic factory, Widget child, Matrix4 value) {
  final Container = factory;
  Container(transform: value, child: child);
}

Configure prefer-transform-over-container

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

falcon.jsonjson
{
  "linter": {
    "rules": {
      "style": {
        "prefer-transform-over-container": "error"
      }
    }
  }
}

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

example.dartdart
// falcon-ignore lint/style/prefer-transform-over-container: <reason>