Skip to content

Commit

Permalink
1. Export viewMiddleware & adapterMiddleware
Browse files Browse the repository at this point in the history
2. Fix ViewMiddleware,EffectMiddleware,AdapterMiddleware bug inverter
3. fix connectStores bug by triggle once
  • Loading branch information
zjuwjf committed May 30, 2019
1 parent df964a8 commit 3227aa7
Show file tree
Hide file tree
Showing 9 changed files with 51 additions and 22 deletions.
8 changes: 7 additions & 1 deletion example/lib/app.dart
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,13 @@ Page<T, dynamic> connectExtraStore<T extends GlobalBaseState<T>>(
return pagestate.themeColor == appState.themeColor
? pagestate
: (pagestate.clone()..themeColor = appState.themeColor);
});
})
..updateMiddleware(
view: (List<ViewMiddleware<T>> viewMiddleware) {
viewMiddleware.add(safetyView());
},
// adapter:
);
}

Widget createApp() {
Expand Down
3 changes: 1 addition & 2 deletions example/lib/todo_edit_page/action.dart
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,12 @@ import 'package:fish_redux/fish_redux.dart';
enum ToDoEditAction { update, onDone, onChangeTheme }

class ToDoEditActionCreator {
static Action update(String name, String desc, String themeidx) {
static Action update(String name, String desc) {
return Action(
ToDoEditAction.update,
payload: <String, String>{
'name': name,
'desc': desc,
'themeidx': themeidx
},
);
}
Expand Down
8 changes: 4 additions & 4 deletions example/lib/todo_edit_page/effect.dart
Original file line number Diff line number Diff line change
Expand Up @@ -16,13 +16,13 @@ Effect<TodoEditState> buildEffect() {

void _init(Action action, Context<TodoEditState> ctx) {
ctx.state.nameEditController.addListener(() {
ctx.dispatch(ToDoEditActionCreator.update(
ctx.state.nameEditController.text, null, null));
ctx.dispatch(
ToDoEditActionCreator.update(ctx.state.nameEditController.text, null));
});

ctx.state.descEditController.addListener(() {
ctx.dispatch(ToDoEditActionCreator.update(
null, ctx.state.descEditController.text, null));
ctx.dispatch(
ToDoEditActionCreator.update(null, ctx.state.descEditController.text));
});
}

Expand Down
3 changes: 2 additions & 1 deletion example/lib/todo_edit_page/state.dart
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,8 @@ class TodoEditState implements GlobalBaseState<TodoEditState> {
..descEditController = descEditController
..focusNodeName = focusNodeName
..focusNodeDesc = focusNodeDesc
..toDo = toDo;
..toDo = toDo
..themeColor = themeColor;
}
}

Expand Down
29 changes: 24 additions & 5 deletions lib/src/redux_component/mixed_store.dart
Original file line number Diff line number Diff line change
Expand Up @@ -112,13 +112,25 @@ mixin _EffectEnhance<T> on MixedStore<T> implements EffectEnhancer<T> {
effectMiddleware?.call(logic, this)?.call(higherEffect) ?? higherEffect;
}

ViewBuilder<dynamic> _inverterView<K>(ViewBuilder<K> view) {
return (dynamic state, Dispatch dispatch, ViewService viewService) {
return view(state, dispatch, viewService);
};
}

AdapterBuilder<dynamic> _inverterAdapter<K>(AdapterBuilder<K> adapter) {
return (dynamic state, Dispatch dispatch, ViewService viewService) {
return adapter(state, dispatch, viewService);
};
}

mixin _ViewEnhance<T> on MixedStore<T> implements ViewEnhancer<T> {
ViewMiddleware<T> get viewMiddleware;

@override
ViewBuilder<K> viewEnhance<K>(
ViewBuilder<K> view, AbstractComponent<K> component) =>
viewMiddleware?.call(component, this)?.call(view) ?? view;
viewMiddleware?.call(component, this)?.call(_inverterView(view)) ?? view;
}

mixin _AdapterEnhance<T> on MixedStore<T> implements AdapterEnhancer<T> {
Expand All @@ -127,7 +139,9 @@ mixin _AdapterEnhance<T> on MixedStore<T> implements AdapterEnhancer<T> {
@override
AdapterBuilder<K> adapterEnhance<K>(
AdapterBuilder<K> adapterBuilder, AbstractAdapter<K> adapter) =>
adapterMiddleware?.call(adapter, this)?.call(adapterBuilder) ??
adapterMiddleware
?.call(adapter, this)
?.call(_inverterAdapter(adapterBuilder)) ??
adapterBuilder;
}

Expand Down Expand Up @@ -207,13 +221,18 @@ MixedStore<T> connectStores<T, K>(
Store<K> extraStore,
T Function(T, K) update,
) {
final void Function() unsubscribe = extraStore.subscribe(() {
final void Function() subscriber = () {
final T prevT = mainStore.getState();
final T nextT = update(prevT, extraStore.getState());
if (prevT != nextT && nextT != null) {
if (nextT != null && !identical(prevT, nextT)) {
mainStore.dispatch(Action(_UpdateState.Assign, payload: nextT));
}
});
};

final void Function() unsubscribe = extraStore.subscribe(subscriber);

/// should triggle once
subscriber();

final Future<dynamic> Function() superMainTD = mainStore.teardown;
mainStore.teardown = () {
Expand Down
18 changes: 9 additions & 9 deletions lib/src/redux_component/page.dart
Original file line number Diff line number Diff line change
Expand Up @@ -92,16 +92,16 @@ abstract class Page<T, P> extends Component<T> {
connectStores<T, K>(store, extraStore, update));

/// inject app-middleware
void updateProperties({
List<Middleware<T>> dispatchMiddleware,
List<ViewMiddleware<T>> viewMiddleware,
List<EffectMiddleware<T>> effectMiddleware,
List<AdapterMiddleware<T>> adapterMiddleware,
void updateMiddleware({
void Function(List<Middleware<T>>) dispatch,
void Function(List<ViewMiddleware<T>>) view,
void Function(List<EffectMiddleware<T>>) effect,
void Function(List<AdapterMiddleware<T>>) adapter,
}) {
_dispatchMiddleware.addAll(dispatchMiddleware ?? <Middleware<T>>[]);
_viewMiddleware.addAll(viewMiddleware ?? <ViewMiddleware<T>>[]);
_effectMiddleware.addAll(effectMiddleware ?? <EffectMiddleware<T>>[]);
_adapterMiddleware.addAll(adapterMiddleware ?? <AdapterMiddleware<T>>[]);
dispatch?.call(_dispatchMiddleware);
view?.call(_viewMiddleware);
effect?.call(_effectMiddleware);
adapter?.call(_adapterMiddleware);
}
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export 'safety_adapter.dart';
2 changes: 2 additions & 0 deletions lib/src/redux_middleware/redux_middleware.dart
Original file line number Diff line number Diff line change
@@ -1 +1,3 @@
export 'adapter_middleware/adapter_middleware.dart';
export 'middleware/middleware.dart';
export 'view_middleware/view_middleware.dart';
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export 'safety_view.dart';

0 comments on commit 3227aa7

Please sign in to comment.