- Although the framework recommends the use of functional programming, it also provides object-oriented programming support.
- ViewPart
- Need to override the 'build' function.
- The required state, dispatch, and viewService parameters have become fields of the object and can be used directly.
- It is immutable, so there should be no need to define variable fields internally.
- EffectPart
- Need to override the 'createMap' function.
- The required Context has been flattened as the fields which can be used directly.
- Fields can be defined and their visibility is limited to themselves.
- It must be used with higherEffect.
- Sample Code
class MessageView extends ViewPart<MessageState> {
@override
Widget build() {
return Column(children: [
viewService.buildComponent('profile'),
InkWell(
child: Text('$message'),
onTap: () => dispatch(const Action('onShare')),
),
]);
}
}
class MessageEffect extends EffectPart<MessageState> {
///we could put some Non-UI fields here.
@override
Map<Object, OnAction> createMap() {
return <Object, OnAction>{
Lifecycle.initState: _initState,
'onShare': _onShare,
};
}
void _initState(Action action) {
//do something on initState
}
void _onShare(Action action) async {
//do something on onShare
await Future<void>.delayed(Duration(milliseconds: 1000));
dispatch(const Action('shared'));
}
}
class MessageComponent extends Component<MessageState> {
MessageComponent(): super(
view: MessageView().asView(),
higherEffect: higherEffect(() => MessageEffect()),
);
}