puer_effect_handlers 1.0.0
puer_effect_handlers: ^1.0.0 copied to clipboard
Ready-to-use effect handlers for Puer state management library.
import 'dart:async';
import 'package:puer/puer.dart';
import 'package:puer_effect_handlers/puer_effect_handlers.dart';
/// A simple [EffectHandler] implementation for demonstration.
///
/// - Takes an integer effect as input.
/// - Emits a string message as output.
class ExampleEffectHandler implements EffectHandler<int, String> {
@override
Future<void> call(int effect, MsgEmitter<String> emit) async {
// Simple logic: Convert the integer effect to a string message.
emit('Effect processed: $effect');
}
}
Future<void> main() async {
// Create the base handler
final handler = ExampleEffectHandler();
// 1. Use the isolate transformer
final isolatedHandler = handler.isolated();
print('--- Isolated Handler ---');
await isolatedHandler(42, (msg) => print(msg));
// 2. Use the sequential transformer
final sequentialHandler = handler.sequential();
print('\n--- Sequential Handler ---');
await Future.wait([
Future(() => sequentialHandler(1, (msg) => print(msg))),
Future(() => sequentialHandler(2, (msg) => print(msg))),
Future(() => sequentialHandler(3, (msg) => print(msg))),
]);
// 3. Use the debounce transformer
final debouncedHandler = handler.debounced(const Duration(milliseconds: 300));
print('\n--- Debounced Handler ---');
debouncedHandler(10, (msg) => print(msg));
debouncedHandler(20, (msg) => print(msg)); // This will cancel the first one.
await Future.delayed(const Duration(milliseconds: 400));
// 4. Use the map transformer
final mappedHandler = handler.map<String, int>(
effectMapper: (String effect) => int.parse(effect),
messageMapper: (String message) => message.length,
);
print('\n--- Mapped Handler ---');
await mappedHandler('123456', (msg) => print(msg));
}