{"id":15008708,"url":"https://github.com/flutterings/flutter_redux_navigation","last_synced_at":"2025-07-02T03:34:44.327Z","repository":{"id":33897023,"uuid":"163309457","full_name":"flutterings/flutter_redux_navigation","owner":"flutterings","description":"Navigation Middleware for Flutter's redux library.","archived":false,"fork":false,"pushed_at":"2023-11-24T21:16:54.000Z","size":107,"stargazers_count":44,"open_issues_count":2,"forks_count":10,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-04-09T16:44:59.679Z","etag":null,"topics":["dart","dartlang","flutter","navigation","redux","router"],"latest_commit_sha":null,"homepage":"","language":"Dart","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/flutterings.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2018-12-27T15:24:18.000Z","updated_at":"2025-02-17T15:00:28.000Z","dependencies_parsed_at":"2023-12-16T08:43:42.950Z","dependency_job_id":"19c7b8c4-56e3-4615-9018-6055546ad50a","html_url":"https://github.com/flutterings/flutter_redux_navigation","commit_stats":{"total_commits":76,"total_committers":5,"mean_commits":15.2,"dds":0.09210526315789469,"last_synced_commit":"44d1d079530e7c1affc8f873fc6c950d619d53bb"},"previous_names":[],"tags_count":17,"template":false,"template_full_name":null,"purl":"pkg:github/flutterings/flutter_redux_navigation","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/flutterings%2Fflutter_redux_navigation","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/flutterings%2Fflutter_redux_navigation/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/flutterings%2Fflutter_redux_navigation/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/flutterings%2Fflutter_redux_navigation/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/flutterings","download_url":"https://codeload.github.com/flutterings/flutter_redux_navigation/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/flutterings%2Fflutter_redux_navigation/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":263070642,"owners_count":23409153,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["dart","dartlang","flutter","navigation","redux","router"],"created_at":"2024-09-24T19:20:09.965Z","updated_at":"2025-07-02T03:34:44.296Z","avatar_url":"https://github.com/flutterings.png","language":"Dart","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![Build Status](https://travis-ci.org/flutterings/flutter_redux_navigation.svg?branch=master)](https://travis-ci.org/flutterings/flutter_redux_navigation)\n[![codecov](https://codecov.io/gh/flutterings/flutter_redux_navigation/branch/master/graph/badge.svg)](https://codecov.io/gh/flutterings/flutter_redux_navigation)\n\n# Flutter Navigation for redux\n\nNavigation Middleware for Flutter's redux library.\n\nBasic classes that enables page navigation through by utilizing [Redux](https://pub.dartlang.org/packages/redux) Store middleware facility.\n\nThis package is built to work with [Redux.dart](https://pub.dartlang.org/packages/redux) 4.0.0+.\n\n## Redux Middleware\n\n  * `NavigationMiddleware\u003cT\u003e` - The Middleware that reacts to `NavigateToAction`s.\n\n## Examples\n\nTake a look in the [examples](example) directory.\n\n## How to setup navigation\n\n```dart\nimport 'package:flutter/material.dart';\nimport 'package:redux/redux.dart';\n\nclass AppState {\n  final String name;\n  \n  const AppState(this.name);\n  \n  factory AppState.initial() =\u003e AppState(null);\n  factory AppState.changeName(String name) =\u003e AppState(name);\n}\n\nclass AppNameChangedAction {\n  final String name;\n\n  AppNameChangedAction(this.name);\n}\n\nAppState _onAppNameChanged(AppState state, AppNameChangedAction action) =\u003e\n    state.changeName(action.name);\n\nfinal appReducer = combineReducers\u003cAppState\u003e([\n  TypedReducer\u003cAppState, AppNameChangedAction\u003e(_onAppNameChanged),\n]);\n\n\nfinal store = new Store\u003cAppState\u003e(combineReducers\u003cAppState\u003e([appReducer]),\n    initialState: AppState.initial(),\n    middleware: [\n      NavigationMiddleware\u003cAppState\u003e(),\n    ]);\n\nclass MyApp extends StatelessWidget {\n  @override\n  Widget build(BuildContext context) {\n    return StoreProvider\u003cAppState\u003e(\n        store: store,\n        child: MaterialApp(\n          title: 'My App',\n          navigatorKey: NavigatorHolder.navigatorKey,\n        )\n    );\n  }\n}\n\nvoid main() =\u003e runApp(MyApp());\n```\n\n## How to navigate\n\nLet's say you wish to navigate from a `LoginPage` to some dashboard page, you only need to dispatch a `NavigateToAction.replace` action with the appropriate path, which is registered to the dashboard page.\n\n```dart\nimport 'package:flutter/material.dart';\nimport 'package:flutter_redux/flutter_redux.dart';\n\nclass LoginPage extends StatefulWidget {\n  @override\n  State\u003cStatefulWidget\u003e createState() =\u003e LoginPageState();\n}\n\nclass LoginPageState extends State\u003cLoginPage\u003e {\n  @override\n  Widget build(BuildContext context) {\n    return StoreConnector\u003cAppState, AuthBloc\u003e(\n      converter: (store) {\n        return store;\n      },\n      builder: (BuildContext context, Store\u003cAppState\u003e store) {\n        return Scaffold(body: Builder(\n          builder: (BuildContext context) {\n            return Column(\n              mainAxisAlignment: MainAxisAlignment.center,\n              children: \u003cWidget\u003e[\n                RaisedButton(\n                onPressed: () {\n                  store.dispatch(NavigateToAction.replace('/dashboard'));\n                },\n                child: Text('Login'),\n              )\n              ],\n            );\n          },\n        ));\n      },\n    );\n  }\n}\n```\n\n## How to use pre and post navigation hooks\n\nLet's use the same example as before, but now let's assume that you want to start a loader whilst navigating to the dashboard and stop it once you have navigated. \n\n```dart\nimport 'package:flutter/material.dart';\nimport 'package:flutter_redux/flutter_redux.dart';\n\nclass LoginPage extends StatefulWidget {\n  @override\n  State\u003cStatefulWidget\u003e createState() =\u003e LoginPageState();\n}\n\nclass LoginPageState extends State\u003cLoginPage\u003e {\n  @override\n  Widget build(BuildContext context) {\n    return StoreConnector\u003cAppState, AuthBloc\u003e(\n      converter: (store) {\n        return store;\n      },\n      builder: (BuildContext context, Store\u003cAppState\u003e store) {\n        return Scaffold(body: Builder(\n          builder: (BuildContext context) {\n            return Column(\n              mainAxisAlignment: MainAxisAlignment.center,\n              children: \u003cWidget\u003e[\n                RaisedButton(\n                onPressed: () {\n                  store.dispatch(\n                    NavigateToAction.replace(\n                      '/dashboard',\n                      preNavigation: () =\u003e store.dispatch(StartLoadingAction()),\n                      postNavigation: () =\u003e store.dispatch(StopLoadingAction()),\n                    ),\n                  );\n                },\n                child: Text('Login'),\n              )\n              ],\n            );\n          },\n        ));\n      },\n    );\n  }\n}\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fflutterings%2Fflutter_redux_navigation","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fflutterings%2Fflutter_redux_navigation","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fflutterings%2Fflutter_redux_navigation/lists"}