mu_state 2.0.0+4 copy "mu_state: ^2.0.0+4" to clipboard
mu_state: ^2.0.0+4 copied to clipboard

Minimal Cubit-inspired state management using Flutter's built-in primitives. No external dependencies.

example/lib/main.dart

import 'package:example/home_page/home_page.dart';
import 'package:example/home_page/home_page_logic.dart';
import 'package:example/home_page/home_page_state.dart';
import 'package:example/login/login_logic.dart';
import 'package:example/repository/auth_repository.dart';
import 'package:flutter/material.dart';
import 'package:mu_state/mu_state.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    // Create repository instance
    final authRepository = AuthRepository();

    return MaterialApp(
      title: 'mu_state Example',
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
        useMaterial3: true,
      ),
      home: MuMultiProvider([
        (child) => MuProvider<LoginLogic>(
              value: LoginLogic(authRepository),
              child: child,
            ),
        (child) => MuProvider<HomePageLogic>(
              value: HomePageLogic(authRepository),
              child: child,
            ),
      ], child: const ErrorListenerWrapper()),
    );
  }
}

class ErrorListenerWrapper extends StatelessWidget {
  const ErrorListenerWrapper({super.key});

  @override
  Widget build(BuildContext context) {
    final homePageLogic = context.logic<HomePageLogic>();

    return MuListener<HomePageState>(
      logic: homePageLogic,
      listener: (context, state) {
        if (state.status == HomePageStatus.error) {
          String message = switch (state.messageType) {
            HomePageMessage.networkError => '🌐 Network error occurred',
            HomePageMessage.incrementError => '🔢 Counter error occurred',
            _ => '⚠️ An unexpected error occurred',
          };

          ScaffoldMessenger.of(context).showSnackBar(
            SnackBar(
              content: Text(message),
              backgroundColor: Colors.red,
              action: SnackBarAction(
                label: 'Dismiss',
                textColor: Colors.white,
                onPressed: () {
                  ScaffoldMessenger.of(context).hideCurrentSnackBar();
                },
              ),
            ),
          );
        }
      },
      listenWhen: (previous, current) =>
          previous.status != HomePageStatus.error &&
          current.status == HomePageStatus.error,
      child: const HomePage(),
    );
  }
}
2
likes
160
points
150
downloads

Publisher

verified publisherapptakk.com

Weekly Downloads

Minimal Cubit-inspired state management using Flutter's built-in primitives. No external dependencies.

Repository (GitHub)

Topics

#state-management #cubit #state #valuenotifier #minimal

Documentation

API reference

License

MIT (license)

Dependencies

flutter

More

Packages that depend on mu_state