auto_disposal

auto_disposal is a small Flutter utility mixin that helps State classes clean up common resources automatically in dispose().

It reduces repetitive disposal code and keeps widget lifecycle cleanup in one place.

What It Supports

AutoDisposalMixin can register and dispose/cancel these types:

  • StreamSubscription
  • AnimationController
  • FocusNode
  • TextEditingController
  • ScrollController
  • Ticker
  • OverlayEntry (remove + dispose)
  • Timer
  • StreamController
  • ChangeNotifier

It also supports custom cleanup with autoDisposeCallback(...).

Usage

import 'dart:async';

import 'package:auto_disposal/auto_disposal.dart';
import 'package:flutter/material.dart';

class MyHomePage extends StatefulWidget {
  const MyHomePage({super.key});

  @override
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage>
    with AutoDisposalMixin<MyHomePage> {
  late final TextEditingController controller =
      autoDispose(TextEditingController());
  late final StreamController<int> streamController =
      autoDispose(StreamController<int>());

  @override
  void initState() {
    super.initState();
    autoDisposeCallback(() {
      // Any custom cleanup logic.
    });
  }

  @override
  Widget build(BuildContext context) {
    return TextField(controller: controller);
  }
}

Notes

  • Registered callbacks are executed in reverse order during dispose().
  • Async cleanup callbacks are supported.
  • See the complete example in example/lib/main.dart.