@@ -3,12 +3,13 @@ import 'package:built_value/built_value.dart';
33import 'action.dart' ;
44import 'typedefs.dart' ;
55
6- abstract class BuiltReducer <V extends Built <V , B >, B extends Builder <V , B >> implements Built <V , B > {
6+ abstract class BuiltReducer <State extends Built <State , StateBuilder >,
7+ StateBuilder extends Builder <State , StateBuilder >> implements Built <State , StateBuilder > {
78 /// This is a map, not a single function with switch statement as per js redux implementation.
89 /// This is so each reducer can have the action payload generic be a different non dynamic value
9- Map <String , Reducer <dynamic , V , B >> get reducer;
10+ Map <String , Reducer <dynamic , State , StateBuilder >> get reducer;
1011
11- void reduce (V state, Action <dynamic > a, B builder) {
12+ void reduce (State state, Action <dynamic > a, StateBuilder builder) {
1213 var handler = reducer[a.name];
1314 // TODO: warn if payload type doesn't match reducer
1415 if (handler != null ) handler (state, a, builder);
@@ -18,17 +19,20 @@ abstract class BuiltReducer<V extends Built<V, B>, B extends Builder<V, B>> impl
1819
1920 /// Generated by the transformer for developer convienience
2021 /// It will call reduce on any properties of your [BuiltReduer] that are also of type [BuiltReducer]
21- void reduceChildren (V state, Action <dynamic > a, B builder) {}
22+ void reduceChildren (State state, Action <dynamic > a, StateBuilder builder) {}
2223}
2324
2425/// [ReducerBuilder] allows you to build a reducer that handles many different actions
2526/// with many different payload types, while maintaining type safety.
26- /// Each [Reducer] added with add<T> must take a state of type V , an Action of type
27+ /// Each [Reducer] added with add<T> must take a state of type State , an Action of type
2728/// Action<T>, and a builder of type B
28- class ReducerBuilder <V extends BuiltReducer <V , B >, B extends Builder <V , B >> {
29- var _map = new Map <String , Reducer <dynamic , V , B >>();
29+ class ReducerBuilder <State extends BuiltReducer <State , StateBuilder >,
30+ StateBuilder extends Builder <State , StateBuilder >> {
31+ var _map = new Map <String , Reducer <dynamic , State , StateBuilder >>();
3032
31- add <T >(ActionName <T > aName, Reducer <T , V , B > reducer) => _map[aName.name] = reducer;
33+ void add <Payload >(ActionName <Payload > aName, Reducer <Payload , State , StateBuilder > reducer) {
34+ _map[aName.name] = reducer;
35+ }
3236
33- build () => _map;
37+ Map < String , Reducer < dynamic , State , StateBuilder >> build () => _map;
3438}
0 commit comments