Flutter context provider to provide state with reducer combined as map of type and the reducer.
along with the useSelector hook and useDispatch hook
this package contains of
- ContextProvider Widget
- useSelector function
- useDispatch function
- Reducer abstract class
Use it with following prop
Map<Type extends Reducer, Reducer> reducer
and Widget child
\
ContextProvider(reducer: myReducer, child: MyWidget());
the Type
is implemented class from Reducer
abstract class provided.
Use this inside your widget to get the reducer/state data from the state.
final T myState = useSelector<T extends Reducer>(context)
where T is implementation of the Reducer
abstract class.
You can pass another parameter if you decide to listen to the state changes.
final T myState = useSelector<T extends Reducer>(context, listen: false)
it's true by default.
final Function dispatch = useDispatch(context);
which dispatch
function takes arguments of Map<String, dynamic>
that had type
key in the action.
you can pass another parameter if you want to listen to changes.
final Function dispatch = useDispatch(context, listen: true);
it's false
by default.
Here's where you implement the state shape/what the state holds in the instance of the reducer.\
import 'package:context_provider/context_provider.dart';
class ProductReducer extends Reducer {
Map<int, Map<String, dynamic>> _product = {};
get product => this._product;
@override
void dispatch(Map<String, dynamic> action) async {
switch (action["type"]) {
case SOME_ACTION:
// do something here
super.notifyListeners(); // notify widgets that listens to this reducer state
break;
case INIT:
// do something else here
break;
default:
break;
}
}
}
You want to @override
the dispatch method inside the class and implement your own reducer to handle actions that'll be handled by the reducer instance.
@override
void dispatch(Map<String, dynamic> action) async {
switch (action["type"]) {
case "DO_SOMETHING":
// do something with this
break;
default:
break;
}
}
methods that were available from this class is following\
- notifyListeners
Which notifyListeners
is used whenever you want to notify the consumer of your state to re-render.