disposable_container 0.1.0 copy "disposable_container: ^0.1.0" to clipboard
disposable_container: ^0.1.0 copied to clipboard

A flutter package that manages dispose callbacks and subscriptions cancellations.

example/lib/main.dart

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

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

class App extends StatelessWidget {
  const App({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        body: Center(
          child: Builder(
            builder: (context) {
              return ElevatedButton(
                onPressed: () {
                  Navigator.push(
                    context,
                    MaterialPageRoute(
                        builder: (_) => const DisposableContainerScreen()),
                  );
                },
                child: const Text('Push screen with disposable container'),
              );
            },
          ),
        ),
      ),
    );
  }
}

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

  @override
  State<DisposableContainerScreen> createState() =>
      _DisposableContainerScreenState();
}

class _DisposableContainerScreenState extends State<DisposableContainerScreen>
    with
        // Use [WidgetDisposableContainerMixin] that exposes a `disposableContainer` getter
        WidgetDisposableContainerMixin {
  final TextEditingController _textEditingController =
      TextEditingController(text: 'Initial text');

  // Use [autoDisposeWith] extension to dispose with a diposableContainer
  late final FocusNode focusNode =
      FocusNode().autoDisposeWith(disposableContainer);

  int _counter = 0;

  @override
  void initState() {
    super.initState();

    disposableContainer.addDisposable(_textEditingController.dispose);

    Stream.periodic(const Duration(seconds: 1))
        .listen((event) => _incrementCounter())
        // or use disposableContainer.addSubscription(Stream.listen(..))
        .autoCancelWith(disposableContainer);

    disposableContainer
        .addDisposable(() => debugPrint('I am being disposed.. bye!'));
  }

  void _incrementCounter() {
    debugPrint('Incrementing counter to ${_counter + 1}');
    setState(() {
      _counter += 1;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(),
      body: Column(
        mainAxisSize: MainAxisSize.min,
        children: [
          TextField(
            controller: _textEditingController,
          ),
          const SizedBox(height: 12),
          Text('$_counter'),
        ],
      ),
    );
  }
}
3
likes
160
pub points
5%
popularity

Publisher

verified publisherptsakoulis.com

A flutter package that manages dispose callbacks and subscriptions cancellations.

Repository (GitHub)
View/report issues

Documentation

API reference

License

MIT (LICENSE)

Dependencies

flutter

More

Packages that depend on disposable_container