I have a main app component that uses login_form component, when the login form is submitted, I want to redirect the page to home, using the router.
/main_app/main_app.dart
@CustomTag('main-app')
class MainApp extends PolymerElement {
@observable String route;
final Router router = new Router();
MainApp.created() : super.created();
ready() {
print('Main App: ready()');
router.root
..addRoute(name: 'home', path: '/', enter: showHome, defaultRoute: true)
..addRoute(name: 'login', path: '/#!/login', enter: showLogin);
router.listen();
}
void showHome(RouteEvent event) {
print("Main App: showHome()");
route = event.route.name;
}
void showLogin(RouteEvent event) {
print("Main App: showLogin()");
route = event.route.name;
}
}
/login_form/login_form.dart
@CustomTag('login-form')
class LoginForm extends PolymerElement {
@observable String username;
@observable String password;
LoginForm.created() : super.created();
void submit(Event event, Object detail, Node sender) {
// Form submit
// Access router here
// ie. router.go('home', {});
}
}
I have found solutions such as using singleton like this
static final Router _sharedRouter = new Router();
static Router get sharedRouter => _router;
then
MainApp.sharedRouter.go('home', {}}
Is there a better way to do this?