df_router 0.5.8
df_router: ^0.5.8 copied to clipboard
A lightweight router designed for ease of use and efficient state management.
Summary #
A lightweight Flutter router with state management. Live demo.
Quick Start #
import 'package:df_router/df_router.dart';
import 'package:flutter/material.dart';
void main() => runApp(const MyApp());
// 1. Define routes.
final class HomeRoute extends RouteState {
HomeRoute() : super.parse('/home');
}
final class ChatRoute extends RouteState {
final String chatId;
ChatRoute({required this.chatId})
: super.parse('/chat', queryParameters: {'chatId': chatId});
ChatRoute.from(RouteState other)
: chatId = other.uri.queryParameters['chatId'] ?? '',
super(other.uri);
}
// 2. Setup RouteManager.
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
builder: (context, child) {
return RouteManager(
fallbackRouteState: HomeRoute.new,
builders: [
RouteBuilder(
routeState: HomeRoute(),
builder: (context, state) => const HomeScreen(),
),
RouteBuilder(
routeState: ChatRoute(chatId: ''),
builder: (context, state) => ChatScreen(route: ChatRoute.from(state)),
),
],
);
},
);
}
}
// 3. Navigate.
RouteController.of(context).push(ChatRoute(chatId: '123'));
RouteController.of(context).goBackward();
Features #
- Declarative route definitions
- Query parameter support
- Typed route data via
extra - Widget caching with
shouldPreserveandshouldPrebuild - Custom transitions (
MaterialEffect,CupertinoEffect, etc.)
🔍 For more information, refer to the API reference.
💬 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 #
- 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.
