Pular para conteúdo

▶️ Primeiros Passos

Este guia mostra como configurar o Modugo do zero em um projeto Flutter.


📦 Instalação

Adicione ao seu pubspec.yaml:

dependencies:
  modugo: ^4.2.6
flutter pub get

🏗️ Configuração

1. Crie o módulo raiz

O módulo raiz (AppModule) é o ponto de entrada da sua aplicação. Ele agrega todos os submódulos, dependências globais e rotas.

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

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

2. Configure no main.dart

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

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

  runApp(const AppWidget());
}

3. Crie o AppWidget

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

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

⚙️ Parâmetros de Modugo.configure()

Parâmetro Tipo Default Descrição
module Module obrigatório Módulo raiz da aplicação
initialRoute String '/' Rota inicial
pageTransition TypeTransition fade Transição padrão para todas as rotas
debugLogDiagnostics bool false Habilita logs internos do Modugo
debugLogDiagnosticsGoRouter bool false Habilita logs do GoRouter
observers List<NavigatorObserver>? null Observers de navegação
navigatorKey GlobalKey<NavigatorState>? null Chave global do navigator
redirect FutureOr<String?> Function(...) null Redirect global
errorBuilder Widget Function(...) null Página de erro customizada
onException void Function(...) null Callback de exceção
refreshListenable Listenable? null Listenable para refresh do router
redirectLimit int 2 Limite de redirects antes de erro
extraCodec Codec<Object?, Object?>? null Codec para serialização de extras
enableIOSGestureNavigation bool true Habilita o gesto de swipe-back nativo do iOS globalmente. Pode ser sobrescrito por rota via ChildRoute.iosGestureEnabled.

🔑 Acessando o Router

Existem duas formas de acessar o router configurado:

// Via getter global
modugoRouter

// Via classe Modugo
Modugo.routerConfig

Para navegação imperativa, use a chave global:

modugoNavigatorKey.currentState?.push(...);

🔑 Acessando Dependências

Três formas equivalentes:

// Via injector do módulo
final service = i.get<AuthService>();

// Via classe Modugo
final service = Modugo.i.get<AuthService>();

// Via BuildContext
final service = context.read<AuthService>();

📂 Estrutura Recomendada

/lib
  /modules
    /home
      home_page.dart
      home_module.dart
    /profile
      profile_page.dart
      profile_module.dart
    /auth
      auth_page.dart
      auth_module.dart
  app_module.dart
  app_widget.dart
main.dart

Cada módulo encapsula suas próprias rotas, dependências e páginas, mantendo o código organizado e desacoplado.