Skip to content

Instantly share code, notes, and snippets.

@xsahil03x
Forked from CodyDunlap/app_module.dart
Created August 21, 2019 19:40
Show Gist options
  • Save xsahil03x/41aaa89c783831955133d69a33600c6d to your computer and use it in GitHub Desktop.
Save xsahil03x/41aaa89c783831955133d69a33600c6d to your computer and use it in GitHub Desktop.
Injecting services into Widget's using package:inject
void main() async {
var container = await AppComponent.create(ServicesModule(), ViewModelModule());
runApp(container.app);
}
@provide
class MyApp extends StatelessWidget {
final Router _router;
MyApp(this._router);
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
initialRoute: '/',
onGenerateRoute: _router.generateRoute
);
}
}
@provide
class Router {
final Provider<HomeView> _homePage;
final Provider<LoginView> _loginPage;
final Provider<SettingsView> _settingsPage;
Router(
this._homePage,
this._loginPage,
this._settingsPage,
);
Route<dynamic> generateRoute(RouteSettings settings) {
switch (settings.name) {
case '/':
return MaterialPageRoute(builder: (_) => _homePage());
case '/login':
return MaterialPageRoute(builder: (_) => _loginPage());
case '/settings':
return MaterialPageRoute(builder: (_) => _settingsPage());
default:
return MaterialPageRoute(
builder: (_) => Scaffold(
body: Center(
child: Text('No route defined for ${settings.name}')),
));
}
}
}
@module
class ServicesModule {
@provide
@singleton
SomeService provideSomeService() => SomeService();
}
class SettingsView extends StatefulWidget {
SettingsView({Key key, this.someService}) : super(key: key);
final SomeService someService;
@override
_SettingsViewState createState() => _SettingsViewState();
}
class _SettingsViewState extends State<SettingsView> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("Settings"),
),
body: Center(
child: Text("Settings"),
),
);
}
}
@module
class ViewModule {
@provide
MyWidgetView provideMyWidgetView(SomeService someService) => MyWidgetView({someService: someService});
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment