Rules / Correctness / unnecessary-flutter-imports

unnecessary-flutter-imports

lint/correctness/unnecessary-flutter-imports
recommendedflutter
Source: Falcon

Disallow Flutter framework imports that the file does not use.

Flags an import of package:flutter/... or dart:async when the file contains no reference to any Flutter or async symbol. Such an import contributes nothing but noise and a misleading dependency signal, usually a leftover after the code that needed it was deleted. Remove it. Detection is heuristic: usage is inferred from a curated list of framework identifiers — widgets, BuildContext, Future/Stream, foundation helpers such as kDebugMode and ChangeNotifier, and the async/await keywords — rather than from resolved imports.

Invalid

example.dartdart
import 'package:flutter/material.dart';
import 'package:flutter/foundation.dart';
import 'dart:async';
import 'package:flutter/services.dart';
import 'package:flutter/widgets.dart';

void main() {
  print('Hello World');
}

class MyApp {
  void doSomething() {
    print('No Flutter symbols used');
  }
}
Unnecessary Flutter import. Remove unused imports.
1import 'package:flutter/material.dart';
Unnecessary Flutter import. Remove unused imports.
1import 'package:flutter/material.dart';
2import 'package:flutter/foundation.dart';
Unnecessary Flutter import. Remove unused imports.
2import 'package:flutter/foundation.dart';
3import 'dart:async';
Unnecessary Flutter import. Remove unused imports.
3import 'dart:async';
4import 'package:flutter/services.dart';
Unnecessary Flutter import. Remove unused imports.
4import 'package:flutter/services.dart';
5import 'package:flutter/widgets.dart';

Valid

example.dartdart
import 'package:flutter/material.dart';
import 'package:flutter/foundation.dart';
import 'dart:async';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp();

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'My App',
      home: Scaffold(
        appBar: AppBar(title: const Text('Home')),
        body: const Center(
          child: Text('Hello'),
        ),
      ),
    );
  }
}

Future<void> asyncExample() async {
  await Future.delayed(const Duration(seconds: 1));
  debugPrint('Done');
}

// Uses Stream from dart:async
Stream<int> createStream() {
  return Stream.fromIterable([1, 2, 3]);
}

// Uses widgets
Widget createButton() {
  return ElevatedButton(
    onPressed: () {},
    child: const Text('Click me'),
  );
}

// Uses Color from Flutter
void styleContainer() {
  final container = Container(
    color: Color.fromARGB(255, 100, 150, 200),
  );
}

How to configure

Set the severity of unnecessary-flutter-imports in your falcon.json:

falcon.jsonjson
{
  "linter": {
    "rules": {
      "correctness": {
        "unnecessary-flutter-imports": "error"
      }
    }
  }
}