Inspired by Apple’s NotificationCenter. Passes information around to registered observers.

Build status Pub package License: MIT

Installing

Add the following line to your pubspec.yaml file.

notification_dispatcher: ^0.1.0

Usage

import 'package:notification_dispatcher/notification_dispatcher.dart';

class YourClass {
  int count = 0;

  void init() {
    NotificationDispatcher.instance.addObserver(
      this,
      name: 'observerName',
      callback: (_) => count++,
    );
  }

  void dispose() {
    NotificationDispatcher.instance.removeObserver(YourClass);
  }
}

void main() {
  final yourClass = YourClass()..init();
  NotificationDispatcher.instance.post(name: 'observerName');
  print(yourClass.count); // 1
  yourClass.dispose();
}

Flutter Example

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

  @override
  State<App> createState() => _AppState();
}

class _AppState extends State<App> {
  int count = 0;

  @override
  void initState() {
    super.initState();
    NotificationDispatcher.instance.addObserver(
      this,
      name: 'observerName',
      callback: (_) => setState(() => count++),
    );
  }

  @override
  void dispose() {
    NotificationDispatcher.instance.removeObserver(this);
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              Text('$count'),
              const SizedBox(height: 16),
              ElevatedButton(
                onPressed: () =>
                    NotificationDispatcher.instance.post(name: 'observerName'),
                child: const Text('Increment'),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

GitHub

View Github