typed_event_notifier

Creator: coderz1093

Last updated:

0 purchases

typed_event_notifier Image
typed_event_notifier Images
Add to Cart

Description:

typed event notifier

The TypedEventNotifier library allows notifying listeners with an object.
listeners can be subscribed to only a special type or group of objects.
Installation #
Add on pubspec.yml:
dependencies:
typed_event_notifier: ... // latest package version
copied to clipboard
Usage #
See example in /example folder
import 'package:typed_event_notifier/typed_event_notifier.dart';


/// Class [ExampleNotifier].
///
/// The example of notifier.
/// It can send notifications to listeners with an object
/// and notify listeners if they are registered for this object type
/// or extended objects.
class ExampleNotifier extends TypedEventNotifier<Event> {
/// Create [ExampleNotifier] instance.
ExampleNotifier();

/// Will notify listeners with [CurrentPageChangedEvent] event.
void currentPage(int index) {
_currentPage = index;
notifyListeners(CurrentPageChangedEvent(currentPage: currentPage));
}

/// Will notify listeners with [PagesLoadedEvent] event.
set loadedPages(Set<int> set) {
_loadedPages.addAll(set);
notifyListeners(PagesLoadedEvent(pages: set));
}
}


//The part of example of listener on `current page changed` event only.
class _CurrentPageOnlyListenerState extends State<CurrentPageOnlyListener> {
String message = 'CurrentPageOnly: empty';

// Will receive events only with CurrentPageChangedEvent type.
void currentPageChanged(CurrentPageChangedEvent event) {
setState(() {
message = 'CurrentPageOnly: now current page is ${event.currentPage}';
});
}

@override
void initState() {
widget.notifier.addListener(currentPageChanged);
super.initState();
}

@override
void dispose() {
widget.notifier.removeListener(currentPageChanged);
super.dispose();
}

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

}

// The part of example of listener on any event.
class _AnyListenerState extends State<AnyListener> {
String message = 'Any: empty';

// Will receive events with CurrentPageChangedEvent and PagesLoadedEvent type.
void any(Event event) {
if (event is CurrentPageChangedEvent) {
setState(() {
message = 'Any: now current page is ${event.currentPage}';
});
}
if (event is PagesLoadedEvent) {
setState(() {
message = 'Any: new loaded pages is ${event.pages}';
});
}
}

@override
void initState() {
widget.notifier.addListener(any);
super.initState();
}

@override
void dispose() {
widget.notifier.removeListener(any);
super.dispose();
}

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

// The events for example, which will be sent through the notifier.
// They have abstract base class (used as parent type),
// and extends from it events.
// for example two types with different content.
/// Class [Event].
abstract class Event {
/// Create [Event] instance.
Event();
}

/// Class [CurrentPageChangedEvent].
class CurrentPageChangedEvent extends Event {
/// Index of current page.
final int currentPage;

/// Create [CurrentPageChangedEvent] instance.
CurrentPageChangedEvent({
required this.currentPage,
}) : super();
}

/// Class [PagesLoadedEvent].
class PagesLoadedEvent extends Event {
/// Indexes of loaded pages.
final Set<int> pages;

/// Create [PagesLoadedEvent] instance.
PagesLoadedEvent({
required this.pages,
}) : super();
}
copied to clipboard

License

For personal and professional use. You cannot resell or redistribute these repositories in their original state.

Files In This Product:

Customer Reviews

There are no reviews.