# dispose_controllers

| Severity | Quick Fix | Options |
|:--------:|:---------:|:-------:|
|  Error   |    ✅     |   ❌    |

## Details

**DO** dispose `AnimationController` and all `ChangeNotifier` subclasses such as `TextEditingController`, `ScrollController` and `TabController`.

Controllers should be disposed in `Widget`'s `dispose` method to avoid memory leaks.

<Info>This lint supports custom controllers that extend `ChangeNotifier`.</Info>

```dart title="Bad"
class _MyWidgetState extends State<MyWidget> {
  final _textEditingController = TextEditingController();

  @override
  Widget build(BuildContext context) {
    return Placeholder();
  }
}
```

```dart title="Good"
class _MyWidgetState extends State<MyWidget> {
  final _textEditingController = TextEditingController();

  @override
  Widget build(BuildContext context) {
    return Placeholder();
  }

  @override
  void dispose() {
    _textEditingController.dispose();
    super.dispose();
  }
}
```

## Usage

To enable the `dispose_controllers` rule, add `dispose_controllers` under `plugins > pyramid_lint > diagnostics` in your `analysis_options.yaml` file:

```yaml
plugins:
  pyramid_lint: <version>
    diagnostics:
      dispose_controllers: true
```
