<aside> โš ๏ธ Attention every dependency when placed in a bind it must be typed for correct operation Ex: Bind.singleton**<HomeController>**((i) => HomeController())

</aside>

1. INSTALLATION

flutter pub add go_router_modular

2. STRUCTURE

  ๐Ÿ“ src
     ๐Ÿ“ modules
        ๐Ÿ“„ home_controller.dart
        ๐Ÿ“„ย home_page.dart
        ๐Ÿ“„ย home_module.dart
     ๐Ÿ“„app_module.dart
     ๐Ÿ“„app_widget.dart
 ๐Ÿ“„ main.dart

MAIN - example

๐Ÿ“„main.dart

import 'package:example/src/app_module.dart';
import 'package:example/src/app_widget.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:go_router_modular/go_router_modular.dart';
import 'package:flutter_web_plugins/url_strategy.dart';

final injector = Injector(); // instance global injectors

final router = GoRouter( // configure routes
  initialLocation: '/',
  routes: AppModule().configureRoutes(injector),
);

void main() {
  WidgetsFlutterBinding.ensureInitialized();
  
  if (kIsWeb) usePathUrlStrategy();
  
  runApp(AppWidget(router: router));
}

APP_WIDGET - example

๐Ÿ“„app_widget.dart

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

class AppWidget extends StatelessWidget {
  final GoRouter router;

  const AppWidget({required this.router, super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp.router( // add material app router
      routerConfig: router, // configure go_router
      title: 'Modular GoRoute Example',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
    );
  }
}

APP_MODULE - example

๐Ÿ“„app_module.dart

import 'package:example/src/modules/home/home_module.dart';
import 'package:example/src/modules/user/aplication/user_store.dart';
import 'package:example/src/modules/user/user_module.dart';
import 'package:go_router_modular/go_router_modular.dart';

class AppModule extends Module {
  @override
  List<Bind<Object>> get binds => [
        Bind.singleton<AuthController>((i) => AuthController()), // define binds global in app_module
      ];
  @override
  List<ModuleRoute> get moduleRoutes => [ // define modules
        ModuleRoute("/", module: HomeModule()),
      ];
}

//-----------------------Home-module-example----------------------------------

import 'package:example/src/modules/home/presenters/home_page.dart';
import 'package:go_router_modular/go_router_modular.dart';

class HomeModule extends Module {
  @override
  List<Bind<Object>> get binds => [
         Bind.singleton<HomeController>((i) => HomeController()), // define binds the module
      ];

  @override
  List<ChildRoute> get routes => [
        ChildRoute('/', name: "home", builder: (context, state, i) => const HomePage()), // define routes
        ChildRoute('/config', name: "config", builder: (context, state, i) => const ConfigPage()),
      ];
}