Skip to main content

mux 0.1.0-dev.1 copy "mux: ^0.1.0-dev.1" to clipboard
mux: ^0.1.0-dev.1 copied to clipboard

Request-keyed state channel with a retained per-key cache. Pure Dart.

example/main.dart

import 'package:mux/mux.dart';

sealed class AppRequest<T> extends Request<T> {
  const AppRequest();
}

final class FetchUser extends AppRequest<String> {
  const FetchUser(this.id);

  final int id;

  @override
  Object get key => (FetchUser, id);
}

final class UserService extends MuxService<AppRequest<Object?>> {
  @override
  Future<void> handle(AppRequest<Object?> request, Responder respond) async {
    switch (request) {
      case FetchUser r:
        respond.loading(r);
        await Future<void>.delayed(const Duration(milliseconds: 100));
        respond.data(r, 'user ${r.id}');
    }
  }
}

Future<void> main() async {
  final channel = MuxChannel<AppRequest<Object?>>()..bind(UserService().handle);

  final lease = channel.store.subscribe(const FetchUser(1));
  lease.addListener(
    () => print(switch (lease.state) {
      Idle() => 'idle',
      Loading() => 'loading',
      Data(:final value) => 'data: $value',
      Failure(:final error) => 'failed: $error',
    }),
  );

  channel.send(const FetchUser(1)); // prints "loading", then "data: user 1"
  await Future<void>.delayed(const Duration(milliseconds: 200));

  lease.release();
  await channel.close();
}
1
likes
160
points
190
downloads

Documentation

API reference

Publisher

unverified uploader

Weekly Downloads

Request-keyed state channel with a retained per-key cache. Pure Dart.

Repository (GitHub)
View/report issues

License

MIT (license)

More

Packages that depend on mux