combine<DATA_2 extends Object, DATA_3 extends Object> method
LceState<DATA_3>
combine<DATA_2 extends Object, DATA_3 extends Object>(
- LceState<
DATA_2> other, - DATA_3? mapper(
- DATA_1? data1,
- DATA_2? data2
Combines two Lce states. Here is the result state matrix
| Receiver | other | Result |
|---|---|---|
| Loading | Loading | Loading |
| Loading | Content | Loading |
| Loading | Error | Error |
| Loading | Terminated | Terminated |
| Content | Loading | Loading |
| Content | Content | Content* |
| Content | Error | Error |
| Content | Terminated | Terminated |
| Error | Loading | Error |
| Error | Content | Error |
| Error | Error | Error |
| Error | Terminated | Terminated |
| Terminated | Loading | Terminated |
| Terminated | Content | Terminated |
| Terminated | Error | Terminated |
| Terminated | Terminated | Terminated |
- Receiver - An Lce state that has a priority in final state resolution
otherOther state to combine withmapperData mapper function. Returning null from it means data is not ready and will result in loading state even if both states has data. You may return null-value of any kind to alter resulting state.
Implementation
LceState<DATA_3> combine<DATA_2 extends Object, DATA_3 extends Object>(
LceState<DATA_2> other,
DATA_3? Function(DATA_1? data1, DATA_2? data2) mapper
) {
final data3 = mapper(data, other.data);
final isValid = null != data3 && dataIsValid && other.dataIsValid;
return when(
loading: (state) => other.whenElse(
error: (state2) => LceState.error(data3, isValid, state2.error),
terminated: () => LceState.terminated(),
onElse: (state2) => LceState.loading(data3, isValid, state.type)
),
content: (state) => other.when(
error: (state2) => LceState.error(data3, isValid, state2.error),
terminated: () => LceState.terminated(),
loading: (state2) => LceState.loading(data3, isValid, state2.type),
content: (state2) => null == data3
? const LceState.loading(null, false)
: LceState.content(data3, isValid)
),
error: (state) => other.whenElse(
terminated: () => LceState.terminated(),
onElse: (state2) => LceState.error(data3, isValid, state.error)
),
terminated: () => LceState.terminated()
);
}