Pular para conteúdo

logo

Modugo — Modularize, injete e navegue 🚀

🎯 Modugo é um sistema modular para Flutter, inspirado no Flutter Modular e no GoRouter Modular. Ele oferece uma forma limpa e organizada de estruturar módulos, rotas e injeção de dependências, mantendo a simplicidade e clareza.


📦 Instalação

Adicione o Modugo ao seu pubspec.yaml:

dependencies:
  modugo: ^4.2.6

Depois execute:

flutter pub get

▶️ Primeiros Passos

1. Crie seu módulo raiz

final class AppModule extends Module {
  @override
  void binds() {
    i.registerSingleton<AuthService>(AuthService());
  }

  @override
  List<IRoute> routes() => [
    route('/', child: (_, _) => const HomePage()),
    module('/profile', ProfileModule()),
  ];
}

2. Configure o Modugo no main.dart

Future<void> main() async {
  WidgetsFlutterBinding.ensureInitialized();

  await Modugo.configure(module: AppModule(), initialRoute: '/');

  runApp(const AppWidget());
}

3. Use o router no AppWidget

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

  @override
  Widget build(BuildContext context) {
    return MaterialApp.router(
      routerConfig: modugoRouter,
    );
  }
}

Por que Modugo? 🤔

O Modugo nasceu para resolver problemas comuns em apps grandes:

  • 🧩 Modularidade: Divida sua aplicação em módulos isolados e reutilizáveis.
  • 🔍 Clareza: Cada módulo define suas rotas e dependências de forma explícita.
  • Injeção de dependências simples: Baseado em GetIt, as dependências são registradas uma vez na inicialização.
  • 🛣️ Navegação robusta: Com integração ao GoRouter, gerencie rotas de forma eficiente.
  • 🔒 Guards: Proteja rotas com lógica condicional e propagação automática.
  • 📡 Eventos: Comunicação desacoplada entre módulos via sistema de eventos nativo.
  • 🎨 Transições: 7 tipos de animação de transição prontos para uso.

💡 Nota importante: Diferente de outros frameworks modulares, Modugo não faz o dispose automático das dependências. Todas as instâncias vivem até o encerramento do app.


Base tecnológica 🛠️

Área Tecnologias usadas
Navegação GoRouter
Injeção de Dependência GetIt
Modularização Módulos isolados e desacoplados

Funcionalidades ✅

  • Dependências registradas uma vez na inicialização.
  • Arquitetura desacoplada e modular.
  • Navegação simplificada com GoRouter.
  • API declarativa (DSL) para definição de rotas.
  • Guards com propagação automática para submódulos.
  • Sistema de eventos nativo para comunicação entre módulos.
  • 5 tipos de rotas: ChildRoute, ModuleRoute, ShellModuleRoute, StatefulShellModuleRoute, AliasRoute.
  • Extensions de contexto para navegação, matching e injeção.
  • AfterLayoutMixin para executar código pós-layout.
  • CompilerRoute para validação e extração de parâmetros de rotas.
  • Logging e diagnóstico integrado.

Limitações ⚠️

  • Sem dispose automático: Evita inconsistência quando múltiplas rotas compartilham o mesmo módulo.
  • Foco na estrutura e clareza, não no gerenciamento automático de memória.