Skip to main content

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

Flutter widgets for mux, a request-keyed state channel.

example/main.dart

import 'package:flutter/material.dart';
import 'package:flutter_mux/flutter_mux.dart';

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

final class FetchGreeting extends AppRequest<String> {
  const FetchGreeting();

  @override
  Object get key => FetchGreeting;
}

final class GreetingService extends MuxService<AppRequest<Object?>> {
  const GreetingService();

  @override
  Future<void> handle(AppRequest<Object?> request, Responder respond) async {
    switch (request) {
      case FetchGreeting r:
        respond.loading(r);
        await Future<void>.delayed(const Duration(seconds: 1));
        respond.data(r, 'Hello from mux');
    }
  }
}

/// Without mux_generator, create and bind the channel yourself.
MuxChannel<Request<Object?>> createChannel() => MuxChannel<Request<Object?>>()
  ..bind(
    (request, respond) => switch (request) {
      final AppRequest<Object?> r => const GreetingService().handle(r, respond),
      _ => throw StateError('Unhandled ${request.runtimeType}'),
    },
  );

void main() => runApp(
  const MuxApp(
    create: createChannel,
    child: MaterialApp(home: GreetingPage()),
  ),
);

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

  @override
  State<GreetingPage> createState() => _GreetingPageState();
}

class _GreetingPageState extends State<GreetingPage> {
  @override
  void initState() {
    super.initState();
    context.send(const FetchGreeting());
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: MuxBuilder<String>(
          request: const FetchGreeting(),
          builder: (context, state) => switch (state) {
            Idle() || Loading() => const CircularProgressIndicator(),
            Data(:final value) => Text(value),
            Failure(:final error) => Text('Failed: $error'),
          },
        ),
      ),
    );
  }
}
3
likes
160
points
208
downloads

Documentation

API reference

Publisher

unverified uploader

Weekly Downloads

Flutter widgets for mux, a request-keyed state channel.

Repository (GitHub)
View/report issues

License

MIT (license)

Dependencies

flutter, mux

More

Packages that depend on flutter_mux