Rules / Performance / prefer-const-border-radius

prefer-const-border-radius

lint/performance/prefer-const-border-radius
recommendedflutter
Same as prefer-const-border-radius · Dart Code Metrics

Flags BorderRadius.only(...) whose four corner radii are all equal.

When every corner uses the same Radius.circular(n), BorderRadius.circular(n) is shorter and const-constructible, so Flutter can canonicalize and reuse the value instead of rebuilding it. The rule fires only when all four corners (topLeft, topRight, bottomLeft, bottomRight) are present and their Radius.circular(...) values are textually equal.

Invalid

example.dartdart
// Test cases for prefer-const-border-radius rule
// Flags BorderRadius.only(...) where all radii are equal

void testAllRadiiEqual() {
  final border1 = BorderRadius.only(
    topLeft: Radius.circular(8),
    topRight: Radius.circular(8),
    bottomLeft: Radius.circular(8),
    bottomRight: Radius.circular(8),
  );

  final border2 = BorderRadius.only(
    topLeft: Radius.circular(16),
    topRight: Radius.circular(16),
    bottomLeft: Radius.circular(16),
    bottomRight: Radius.circular(16),
  );
}

void testInlineAllRadiiEqual() {
  final border = BorderRadius.only(topLeft: Radius.circular(10), topRight: Radius.circular(10), bottomLeft: Radius.circular(10), bottomRight: Radius.circular(10));
}

class MyWidget {
  final border = BorderRadius.only(
    topLeft: Radius.circular(12),
    topRight: Radius.circular(12),
    bottomLeft: Radius.circular(12),
    bottomRight: Radius.circular(12),
  );
}

void testSmallRadius() {
  final border = BorderRadius.only(topLeft: Radius.circular(4), topRight: Radius.circular(4), bottomLeft: Radius.circular(4), bottomRight: Radius.circular(4));
}
BorderRadius.only() with all equal radii should use BorderRadius.circular().
9 bottomRight: Radius.circular(8),
10 );
BorderRadius.only() with all equal radii should use BorderRadius.circular().
16 bottomRight: Radius.circular(16),
17 );
BorderRadius.only() with all equal radii should use BorderRadius.circular().
20void testInlineAllRadiiEqual() {
21 final border = BorderRadius.only(topLeft: Radius.circular(10), topRight: Radius.circular(10), bottomLeft: Radius.circular(10), bottomRight: Radius.circular(10));
BorderRadius.only() with all equal radii should use BorderRadius.circular().
24class MyWidget {
25 final border = BorderRadius.only(
BorderRadius.only() with all equal radii should use BorderRadius.circular().
33void testSmallRadius() {
34 final border = BorderRadius.only(topLeft: Radius.circular(4), topRight: Radius.circular(4), bottomLeft: Radius.circular(4), bottomRight: Radius.circular(4));

Valid

example.dartdart
// Good examples for prefer-const-border-radius rule
// Using BorderRadius.circular() when appropriate

void testBorderRadiusCircular() {
  final border1 = BorderRadius.circular(8);
  final border2 = BorderRadius.circular(16);
  final border3 = BorderRadius.circular(12);
}

void testBorderRadiusOnlyWithDifferentRadii() {
  final border = BorderRadius.only(
    topLeft: Radius.circular(8),
    topRight: Radius.circular(16),
    bottomLeft: Radius.circular(8),
    bottomRight: Radius.circular(4),
  );
}

void testBorderRadiusByAll() {
  final border = BorderRadius.all(Radius.circular(8));
}

class MyWidget {
  final border1 = BorderRadius.circular(10);
  final border2 = BorderRadius.only(
    topLeft: Radius.circular(8),
    topRight: Radius.circular(12),
  );
  final border3 = BorderRadius.all(Radius.circular(16));
}

How to configure

Set the severity of prefer-const-border-radius in your falcon.json:

falcon.jsonjson
{
  "linter": {
    "rules": {
      "performance": {
        "prefer-const-border-radius": "error"
      }
    }
  }
}