Skip to content

Commit

Permalink
Modify example
Browse files Browse the repository at this point in the history
  • Loading branch information
zjuwjf committed Apr 3, 2019
1 parent 225cea0 commit 1c0a999
Show file tree
Hide file tree
Showing 8 changed files with 61 additions and 43 deletions.
30 changes: 30 additions & 0 deletions example/lib/app.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
import 'package:flutter/material.dart';

import 'package:fish_redux/fish_redux.dart';
import 'todo_edit_page/page.dart';
import 'todo_list_page/page.dart';

Widget createApp() {
final AbstractRoutes routes = HybridRoutes(routes: <AbstractRoutes>[
PageRoutes(
pages: <String, Page<Object, dynamic>>{
'todo_list': ToDoListPage(),
'todo_edit': TodoEditPage(),
},
),
]);

return MaterialApp(
title: 'Fluro',
debugShowCheckedModeBanner: false,
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: routes.buildPage('todo_list', null),
onGenerateRoute: (RouteSettings settings) {
return MaterialPageRoute<Object>(builder: (BuildContext context) {
return routes.buildPage(settings.name, settings.arguments);
});
},
);
}
16 changes: 2 additions & 14 deletions example/lib/main.dart
Original file line number Diff line number Diff line change
@@ -1,16 +1,4 @@
import 'package:flutter/material.dart';
import 'app.dart';

import 'todo_list_page/page.dart';

void main() => runApp(MyApp());

class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
@override
Widget build(BuildContext context) =>
MaterialApp(home: ToDoListPage().buildPage(<String, dynamic>{}));
}
void main() => runApp(createApp());
6 changes: 2 additions & 4 deletions example/lib/todo_list_page/effect.dart
Original file line number Diff line number Diff line change
Expand Up @@ -41,10 +41,8 @@ void _init(Action action, Context<PageState> ctx) {

void _onAdd(Action action, Context<PageState> ctx) {
Navigator.of(ctx.context)
.push<ToDoState>(MaterialPageRoute<ToDoState>(
builder: (BuildContext buildCtx) =>
edit_page.TodoEditPage().buildPage(null)))
.then((ToDoState toDo) {
.pushNamed('todo_edit', arguments: null)
.then((dynamic toDo) {
if (toDo != null &&
(toDo.title?.isNotEmpty == true || toDo.desc?.isNotEmpty == true)) {
ctx.dispatch(list_action.ToDoListActionCreator.add(toDo));
Expand Down
9 changes: 5 additions & 4 deletions example/lib/todo_list_page/todo_component/effect.dart
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,11 @@ Effect<ToDoState> buildEffect() {
void _onEdit(Action action, Context<ToDoState> ctx) {
if (action.payload == ctx.state.uniqueId) {
Navigator.of(ctx.context)
.push<ToDoState>(MaterialPageRoute<ToDoState>(
builder: (BuildContext buildCtx) =>
edit_page.TodoEditPage().buildPage(ctx.state)))
.then((ToDoState toDo) {
// .push<ToDoState>(MaterialPageRoute<ToDoState>(
// builder: (BuildContext buildCtx) =>
// edit_page.TodoEditPage().buildPage(ctx.state)))
.pushNamed('todo_edit', arguments: ctx.state)
.then((dynamic toDo) {
if (toDo != null) {
ctx.dispatch(ToDoActionCreator.editAction(toDo));
}
Expand Down
1 change: 0 additions & 1 deletion example/pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@ dependencies:
path: ../
flutter:
sdk: flutter

path_provider: ^0.4.1

dev_dependencies:
Expand Down
1 change: 1 addition & 0 deletions lib/fish_redux.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,5 @@ export 'src/redux/redux.dart';
export 'src/redux_adapter/redux_adapter.dart';
export 'src/redux_component/redux_component.dart';
export 'src/redux_connector/redux_connector.dart';
export 'src/redux_routes/redux_routes.dart';
export 'src/utils/utils.dart';
1 change: 1 addition & 0 deletions lib/src/redux_routes/redux_routes.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export 'routes.dart';
40 changes: 20 additions & 20 deletions lib/src/redux_routes/routes.dart
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import '../utils/utils.dart';

/// Define a basic behavior of routes.
abstract class AbstractRoutes {
Widget buildPage(String path, Map<String, dynamic> map);
Widget buildPage(String path, dynamic arguments);
}

/// Use RouteAction.route in reducer.
Expand All @@ -15,8 +15,8 @@ abstract class AbstractRoutes {
/// });
///
/// T _route(T state, Action action) {
/// final Map<String, dynamic> options = action.payload;
/// /// handle the options
/// final dynamic arguments = action.payload;
/// /// handle the arguments
/// }
///
/// Never use RouteAction._route. It is hidden.
Expand All @@ -26,9 +26,9 @@ enum RouteAction {
}

class _RouteActionCreator {
static Action _route(String path, Map<String, dynamic> map) => Action(
static Action _route(String path, dynamic arguments) => Action(
RouteAction._route,
payload: Tuple2<String, Map<String, dynamic>>(path, map),
payload: Tuple2<String, dynamic>(path, arguments),
);
}

Expand All @@ -52,10 +52,10 @@ class AppRoutes<T> implements AbstractRoutes {
);

@override
Widget buildPage(String path, Map<String, dynamic> map) {
Widget buildPage(String path, dynamic arguments) {
final Dependent<T> dependent = pages[path];
if (dependent != null) {
_store.dispatch(_RouteActionCreator._route(path, map));
_store.dispatch(_RouteActionCreator._route(path, arguments));
}
return dependent?.buildComponent(_store, _store.getState);
}
Expand All @@ -75,7 +75,7 @@ class AppRoutes<T> implements AbstractRoutes {
return (T state, Action action) {
/// Forward RouteAction._route action to the matching subReducer with same payload.
if (action.type == RouteAction._route) {
final Tuple2<String, Map<String, dynamic>> payload = action.payload;
final Tuple2<String, dynamic> payload = action.payload;
final String path = payload.i0;
final SubReducer<T> subReducer = subReducerMap[path];
assert(subReducer != null);
Expand All @@ -92,23 +92,23 @@ class AppRoutes<T> implements AbstractRoutes {

/// Each page has a unique store.
class PageRoutes implements AbstractRoutes {
final Map<String, Page<Object, Map<String, dynamic>>> pages;
final Map<String, Page<Object, dynamic>> pages;

PageRoutes({
@required this.pages,
}) : assert(pages != null, 'Expected the pages to be non-null value.');

@override
Widget buildPage(String path, Map<String, dynamic> map) =>
pages[path]?.buildPage(map);
Widget buildPage(String path, dynamic arguments) =>
pages[path]?.buildPage(arguments);
}

/// How to define ?
/// MainRoutes extends HybridRoutes {
/// MainRoutes():super(
/// routes: [
/// PageRoutes(
/// pages: <String, Page<Object, Map<String, dynamic>>>{
/// pages: <String, Page<Object, dynamic>>{
/// 'home': HomePage(),
/// 'detail': DetailPage(),
/// },
Expand All @@ -128,17 +128,17 @@ class PageRoutes implements AbstractRoutes {
/// How to use ?
/// const Routes mainRoutes = MainRoutes();
/// mainRoutes.buildPage('home', {});
abstract class HybridRoutes implements AbstractRoutes {
class HybridRoutes implements AbstractRoutes {
final List<AbstractRoutes> routes;

const HybridRoutes({
@required this.routes,
}) : assert(routes != null);

@override
Widget buildPage(String path, Map<String, dynamic> map) {
Widget buildPage(String path, dynamic arguments) {
for (AbstractRoutes aRoutes in routes) {
final Widget result = aRoutes.buildPage(path, map);
final Widget result = aRoutes.buildPage(path, arguments);
if (result != null) {
return result;
}
Expand All @@ -152,7 +152,7 @@ abstract class HybridRoutes implements AbstractRoutes {
/// MainRoutes():super(
/// routes: [
/// PageRoutes(
/// pages: <String, Page<Object, Map<String, dynamic>>>{
/// pages: <String, Page<Object, dynamic>>{
/// 'home': HomePage(),
/// 'detail': DetailPage(),
/// },
Expand All @@ -168,7 +168,7 @@ abstract class HybridRoutes implements AbstractRoutes {
/// ]
/// );
///
/// Widget onRouteNotFound(String path, Map<String, dynamic> map) {
/// Widget onRouteNotFound(String path, dynamic map) {
/// return Text('route of $path not found.');
/// }
/// }
Expand All @@ -178,8 +178,8 @@ abstract class HybridRoutes implements AbstractRoutes {
/// mainRoutes.buildPage('test', {});
mixin OnRouteNotFoundMixin on AbstractRoutes {
@override
Widget buildPage(String path, Map<String, dynamic> map) =>
super.buildPage(path, map) ?? onRouteNotFound(path, map);
Widget buildPage(String path, dynamic arguments) =>
super.buildPage(path, arguments) ?? onRouteNotFound(path, arguments);

Widget onRouteNotFound(String path, Map<String, dynamic> map);
Widget onRouteNotFound(String path, dynamic arguments);
}

0 comments on commit 1c0a999

Please sign in to comment.