df_router 0.2.0
df_router: ^0.2.0 copied to clipboard
Just another router, with a focus on ease of use and effective state management.
Dart & Flutter Packages by dev-cetera.com & contributors.
Summary #
Just another router, with a focus on ease of use and effective state management. This package is still in early development, but it is simple and should be safe to use in production.
For a full feature set, please refer to the API reference.
Usage Example #
Define RouteManager
somewhere in your app, typically at the root of your widget tree. This is where you will define your routes and their behaviors.
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
color: Colors.white,
builder:
(context, child) => RouteManager(
fallbackRoute: '/home',
// Define how the pages should transition. You can use these
// or create your own by extending `TransitionMixin`.
transitionBuilder: (context, params) {
// For iOS.
return HorizontalSlideFadeTransition(
// Prev is a capture of the previous page.
prev: params.prev,
controller: params.controller,
duration: const Duration(milliseconds: 300),
child: params.child,
);
// For Android.
// return VerticalSlideFadeTransition(
// prev: params.prev,
// controller: params.controller,
// duration: const Duration(milliseconds: 300),
// child: params.child,
// );
},
// Define your routes here.
routes: [
RouteBuilder(
basePath: '/home',
// Does not dispose the route when navigating away.
shouldPreserve: false,
builder: (context, prev, pathQuery) {
return HomeScreen(pathQuery: pathQuery);
},
),
RouteBuilder(
basePath: '/messages',
shouldPreserve: true,
builder: (context, prev, pathQuery) {
return MessagesScreen(pathQuery: pathQuery);
},
),
RouteBuilder(
basePath: '/chat',
shouldPreserve: false,
// Builds the widget even if the route is not on the stack.
shouldPrebuild: true,
builder: (context, prev, pathQuery) {
return ChatScreen(pathQuery: pathQuery);
},
),
RouteBuilder(
basePath: '/detail',
shouldPreserve: false,
builder: (context, prev, pathQuery) {
return HomeDetailScreen(pathQuery: pathQuery);
},
),
],
),
);
}
}
Navigate to a route or go back to the previous route:
// Push a new route with some parameters.
RouteManager.of(context).push('/messages?id=123&name=John');
// Push a new route with the defined transition animation.
RouteManager.of(context).push('/home', shouldAnimate: true);
// Push to the previous route.
RouteManager.of(context).pushBack();
Contributing and Discussions #
This is an open-source project, and we warmly welcome contributions from everyone, regardless of experience level. Whether you're a seasoned developer or just starting out, contributing to this project is a fantastic way to learn, share your knowledge, and make a meaningful impact on the community.
Ways you can contribute #
- Buy me a coffee: If you'd like to support the project financially, consider buying me a coffee. Your support helps cover the costs of development and keeps the project growing.
- Find us on Discord: Feel free to ask questions and engage with the community here: https://discord.gg/gEQ8y2nfyX.
- Share your ideas: Every perspective matters, and your ideas can spark innovation.
- Help others: Engage with other users by offering advice, solutions, or troubleshooting assistance.
- Report bugs: Help us identify and fix issues to make the project more robust.
- Suggest improvements or new features: Your ideas can help shape the future of the project.
- Help clarify documentation: Good documentation is key to accessibility. You can make it easier for others to get started by improving or expanding our documentation.
- Write articles: Share your knowledge by writing tutorials, guides, or blog posts about your experiences with the project. It's a great way to contribute and help others learn.
No matter how you choose to contribute, your involvement is greatly appreciated and valued!
We drink a lot of coffee... #
If you're enjoying this package and find it valuable, consider showing your appreciation with a small donation. Every bit helps in supporting future development. You can donate here: https://www.buymeacoffee.com/dev_cetera
License #
This project is released under the MIT License. See LICENSE for more information.