Skip to content

Commit

Permalink
Modify safety-view, safety-adapter
Browse files Browse the repository at this point in the history
  • Loading branch information
zjuwjf committed May 30, 2019
1 parent c927d69 commit 64c0327
Show file tree
Hide file tree
Showing 3 changed files with 65 additions and 50 deletions.
19 changes: 13 additions & 6 deletions example/lib/app.dart
Original file line number Diff line number Diff line change
Expand Up @@ -7,28 +7,35 @@ import 'todo_edit_page/page.dart';
import 'todo_list_page/page.dart';

//create global page helper
Page<T, dynamic> connectExtraStore<T extends GlobalBaseState<T>>(
Page<T, dynamic> pageConfiguration<T extends GlobalBaseState<T>>(
Page<T, dynamic> page) {
return page

///connect with app-store
..connectExtraStore(GlobalStore.store, (T pagestate, GlobalState appState) {
return pagestate.themeColor == appState.themeColor
? pagestate
: (pagestate.clone()..themeColor = appState.themeColor);
: ((pagestate.clone())..themeColor = appState.themeColor);
})

///updateMiddleware
..updateMiddleware(
view: (List<ViewMiddleware<T>> viewMiddleware) {
viewMiddleware.add(safetyView());
viewMiddleware.add(safetyView<T>());
},
adapter: (List<AdapterMiddleware<T>> adapterMiddleware) {
adapterMiddleware.add(safetyAdapter<T>());
},
// adapter:
);
;
}

Widget createApp() {
final AbstractRoutes routes = HybridRoutes(routes: <AbstractRoutes>[
PageRoutes(
pages: <String, Page<Object, dynamic>>{
'todo_list': connectExtraStore(ToDoListPage()),
'todo_edit': connectExtraStore(TodoEditPage())
'todo_list': pageConfiguration(ToDoListPage()),
'todo_edit': pageConfiguration(TodoEditPage()),
},
),
]);
Expand Down
67 changes: 36 additions & 31 deletions lib/src/redux_middleware/adapter_middleware/safety_adapter.dart
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import 'package:flutter/widgets.dart';

import '../../../fish_redux.dart';
import '../../redux/redux.dart';
import '../../redux_component/redux_component.dart';

Expand All @@ -11,37 +12,41 @@ AdapterMiddleware<T> safetyAdapter<T>({
}) {
return (AbstractAdapter<dynamic> adapter, MixedStore<T> store) {
return (AdapterBuilder<dynamic> viewBuilder) {
return (dynamic state, Dispatch dispatch, ViewService viewService) {
try {
final ListAdapter result = viewBuilder(state, dispatch, viewService);
return ListAdapter((BuildContext buildContext, int index) {
try {
return result.itemBuilder(buildContext, index);
} catch (e, stackTrace) {
return onError?.call(
e,
stackTrace,
adapter: adapter,
store: store,
type: 1,
) ??
Container(width: 0, height: 0);
}
}, result.itemCount);
} catch (e, stackTrace) {
final Widget errorWidget = onError?.call(
e,
stackTrace,
adapter: adapter,
store: store,
type: 0,
);
return errorWidget == null
? const ListAdapter(null, 0)
: ListAdapter(
(BuildContext buildContext, int index) => errorWidget, 1);
}
};
return isDebug()
? viewBuilder
: (dynamic state, Dispatch dispatch, ViewService viewService) {
try {
final ListAdapter result =
viewBuilder(state, dispatch, viewService);
return ListAdapter((BuildContext buildContext, int index) {
try {
return result.itemBuilder(buildContext, index);
} catch (e, stackTrace) {
return onError?.call(
e,
stackTrace,
adapter: adapter,
store: store,
type: 1,
) ??
Container(width: 0, height: 0);
}
}, result.itemCount);
} catch (e, stackTrace) {
final Widget errorWidget = onError?.call(
e,
stackTrace,
adapter: adapter,
store: store,
type: 0,
);
return errorWidget == null
? const ListAdapter(null, 0)
: ListAdapter(
(BuildContext buildContext, int index) => errorWidget,
1);
}
};
};
};
}
29 changes: 16 additions & 13 deletions lib/src/redux_middleware/view_middleware/safety_view.dart
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import 'package:flutter/widgets.dart';

import '../../../fish_redux.dart';
import '../../redux/redux.dart';
import '../../redux_component/redux_component.dart';

Expand All @@ -9,19 +10,21 @@ ViewMiddleware<T> safetyView<T>(
onError}) {
return (AbstractComponent<dynamic> component, MixedStore<T> store) {
return (ViewBuilder<dynamic> viewBuilder) {
return (dynamic state, Dispatch dispatch, ViewService viewService) {
try {
return viewBuilder(state, dispatch, viewService);
} catch (e, stackTrace) {
return onError?.call(
e,
stackTrace,
component: component,
store: store,
) ??
Container(width: 0, height: 0);
}
};
return isDebug()
? viewBuilder
: (dynamic state, Dispatch dispatch, ViewService viewService) {
try {
return viewBuilder(state, dispatch, viewService);
} catch (e, stackTrace) {
return onError?.call(
e,
stackTrace,
component: component,
store: store,
) ??
Container(width: 0, height: 0);
}
};
};
};
}

0 comments on commit 64c0327

Please sign in to comment.