go_router_express 2.0.1
go_router_express: ^2.0.1 copied to clipboard
An Express.js-like wrapper for go_router that provides a familiar routing API for Flutter applications.
go_router_express #
An Express.js-like wrapper for go_router.
Usage #
final app = GoRouterExpress();
app.get('/', (req, res) {
res.page(const HomePage());
});
app.get('/users/:id', (req, res) {
final id = req.intParam('id');
res.page(UserPage(id: id!));
});
void main() {
runApp(MaterialApp.router(routerConfig: app.router));
}
Middleware #
class AuthMiddleware extends WidgetMiddleware {
@override
Widget build(WidgetRequest req, WidgetResponse res, Widget Function() next) {
if (req.query('token') == null) {
return const Text('Unauthorized');
}
return next();
}
}
// Per-route middleware
app.get('/admin', (req, res) {
res.page(const AdminPage());
}, middlewares: [AuthMiddleware()]);
// Global middleware — applies to all routes
app.use([LoggingMiddleware()]);
Route Groups #
app.group('/api', (api) {
api.get('/users', (req, res) { ... }); // matches /api/users
api.get('/posts', (req, res) { ... }); // matches /api/posts
});
Shell Routes #
Shared layouts using go_router's ShellRoute:
app.shell(
(context, state, child) => Scaffold(
appBar: AppBar(title: const Text('Dashboard')),
body: child,
),
(shell) {
shell.get('/home', (req, res) => res.page(const HomePage()));
shell.get('/settings', (req, res) => res.page(const SettingsPage()));
},
);
Typed Parameters #
app.get('/users/:id', (req, res) {
final id = req.intParam('id'); // int?
final price = req.doubleParam('price'); // double?
});
app.get('/search', (req, res) {
final page = req.intQuery('page'); // int?
final active = req.boolQuery('active'); // bool?
});
Redirects #
// Simple redirect
app.redirect('/old-page', '/new-page');
// Redirect in handler
app.get('/gate', (req, res) {
res.redirect('/target');
});
Named Routes #
app.get('/users/:id', (req, res) {
res.page(UserPage(id: req.params('id')!));
}, name: 'user');
Navigation #
go_router is re-exported, so all go_router extensions are available:
context.go('/details');
context.push('/details');
context.pop();
Issues #
For bug reports and feature requests, please visit: GitHub issues
License #
MIT