Skip to main content

only-barrel-imports

added in: 3.2.0 error

Enforces the use of barrel imports for external packages instead of importing individual files from the package.

A "barrel" import is a single import that exposes the main functionality of a package, typically following the pattern package:package_name/package_name.dart. This rule helps maintain clean and consistent imports by discouraging deep imports into package internals.

Config

rules:
only-barrel-imports:
severity: style,
barrels: ["package:flutter/flutter.dart", "package:equatable/equatable.dart"]

Config option barrels

Type: List<String>

Default: []

List of allowed barrel imports. When specified, the rule will only flag imports that don't use these predefined barrel patterns.

Example

❌ Bad

// Importing individual files from external packages
import 'package:flutter/src/widgets/framework.dart'; // ❌ Should use package:flutter/flutter.dart
import 'package:flutter/src/material/app.dart'; // ❌ Should use package:flutter/flutter.dart
import 'package:equatable/src/equatable_mixin.dart'; // ❌ Should use package:equatable/equatable.dart
import 'package:http/src/client.dart'; // ❌ Should use package:http/http.dart

✅ Good

// Using barrel imports for external packages
import 'package:flutter/flutter.dart';
import 'package:flutter/material.dart'; // Also acceptable for Flutter
import 'package:equatable/equatable.dart';
import 'package:http/http.dart';

// Internal project imports are always allowed
import '../models/user.dart';
import 'package:my_project/src/utils/helpers.dart';