Quick Start
Set up a modular Flutter app in three steps.
1. Install
flutter pub add go_router_modular2. Configure
lib/main.dart
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await Modular.configure(
appModule: AppModule(),
initialRoute: '/',
debugLogDiagnostics: true, // Log module injection events
debugLogDiagnosticsGoRouter: true, // Log GoRouter navigation events
debugLogEventBus: true, // Log EventModule events
);
runApp(AppWidget());
}Set all
debug*flags tofalsein production builds.
lib/src/app_widget.dart
class AppWidget extends StatelessWidget {
@override
Widget build(BuildContext context) {
return ModularApp.router(title: 'My App');
}
}3. Create Modules
lib/src/app_module.dart
class AppModule extends Module {
@override
List<ModularRoute> get routes => [
ModuleRoute('/', module: HomeModule()),
];
}lib/src/modules/home/home_module.dart
class HomeModule extends Module {
@override
FutureBinds binds(Injector i) { // Optional
i.addSingleton<HomeController>((i) => HomeController());
}
@override
List<ModularRoute> get routes => [
ChildRoute('/', child: (context, state) => HomePage()),
];
}That's it. Your modular app is ready.
Project Structure
A typical modular project looks like this:
lib/
main.dart
src/
app_module.dart
app_widget.dart
modules/
home/
home_module.dart
pages/
home_page.dart
products/
products_module.dart
pages/
products_page.dartEach module is a self-contained unit with its own routes, dependencies, and pages.
Next Steps
- Routes & Modules — Learn about route types and module nesting
- Dependency Injection — Register and resolve dependencies
- Page Transitions — Add animations between pages
- Shell Routes — Build tab-based layouts