manager 0.4.1 copy "manager: ^0.4.1" to clipboard
manager: ^0.4.1 copied to clipboard

A dart package for predictable synchronous and asynchronous state management.

example/manager_example.dart

import 'package:manager/manager.dart';

class AsynDecrementTask extends AsynchronousTask<int> {
  final CounterManager manager;

  AsynDecrementTask({required this.manager});

  @override
  String get id => 'counter_async_task';

  @override
  Future<int> run() async {
    await Future.delayed(const Duration(seconds: 2));
    return manager.state - 1;
  }
}

class SyncIncrementTask extends SynchronousTask<int> {
  final CounterManager manager;

  SyncIncrementTask({required this.manager});

  @override
  String get id => 'counter_sync_task';

  @override
  int run() => manager.state + 1;
}

class SuccesCounterObserver extends ManagerObserver {
  int _internalSuccessCount = 0;

  int get successEventsCount => _internalSuccessCount;

  @override
  void onEvent(Manager manager, TaskEvent event) {
    ManagerObserver.doIfManagerIs<CounterManager>(manager, (_) {
      ManagerObserver.doIfEventIs<TaskSuccessEvent>(event, (_) {
        _internalSuccessCount++;
      });
    });
  }
}

class EventQueueDisplayObserver extends ManagerObserver {
  final eventQueue = <Type>[];

  @override
  void onEvent(Manager manager, TaskEvent event) {
    ManagerObserver.doIfManagerIs<CounterManager>(manager, (_) {
      eventQueue.add(event.runtimeType);
    });
  }
}

class CounterManager extends Manager<int> with ObservableManagerMixin {
  CounterManager(super.initialValue);
}

void main() async {
  // Creating a manager
  final manager = CounterManager(0);

  // Adding the observer to count all success events
  final successCountObserver = SuccesCounterObserver();
  manager.addObserver(successCountObserver);

  // Adding the observer to print a list of orders
  final eventQueueObserver = EventQueueDisplayObserver();
  manager.addObserver(eventQueueObserver);

  // Syncronous tasks change manager's state immediately and TaskSuccessEvent is added to the manager
  manager.run(SyncIncrementTask(manager: manager));
  // adds 1, prints 1
  print(manager.state);
  // prints [TaskEventSuccess<int>]
  print(eventQueueObserver.eventQueue);
  // While Running an AsynchronousTask will
  // If you multiple async tasks with the same id - the previous ones will be dismissed
  manager.run(AsynDecrementTask(manager: manager));
  manager.run(AsynDecrementTask(manager: manager));
  manager.run(AsynDecrementTask(manager: manager));
  // prints [TaskSuccessEvent<int>, TaskLoadingEvent<int>, TaskLoadingEvent<int>, TaskLoadingEvent<int>]
  print(eventQueueObserver.eventQueue);
  await Future.delayed(const Duration(seconds: 2));
  // prints [TaskSuccessEvent<int>, TaskLoadingEvent<int>, TaskLoadingEvent<int>, TaskLoadingEvent<int>, TaskSuccessEvent<int>]
  print(eventQueueObserver.eventQueue);
  // prints 2
  print(successCountObserver.successEventsCount);
}
2
likes
160
pub points
17%
popularity

Publisher

unverified uploader

A dart package for predictable synchronous and asynchronous state management.

Repository (GitHub)
View/report issues

Documentation

API reference

License

MIT (LICENSE)

Dependencies

async, meta, rxdart

More

Packages that depend on manager