createSelector5

Selector<S, R> createSelector5<S, T1, T2, T3, T4, T5, R>(

  1. Selector<S, T1> selector1,
  2. Selector<S, T2> selector2,
  3. Selector<S, T3> selector3,
  4. Selector<S, T4> selector4,
  5. Selector<S, T5> selector5,
  6. R combiner(
    1. T1,
    2. T2,
    3. T3,
    4. T4,
    5. T5,
    ),
)

Creates a memoized selector with five input selectors.

Implementation

Selector<S, R> createSelector5<S, T1, T2, T3, T4, T5, R>(
  Selector<S, T1> selector1,
  Selector<S, T2> selector2,
  Selector<S, T3> selector3,
  Selector<S, T4> selector4,
  Selector<S, T5> selector5,
  R Function(T1, T2, T3, T4, T5) combiner,
) {
  T1? lastInput1;
  T2? lastInput2;
  T3? lastInput3;
  T4? lastInput4;
  T5? lastInput5;
  R? lastResult;
  var hasCache = false;

return (S state) { final input1 = selector1(state); final input2 = selector2(state); final input3 = selector3(state); final input4 = selector4(state); final input5 = selector5(state);

if (hasCache && identical(input1, lastInput1) && identical(input2, lastInput2) && identical(input3, lastInput3) && identical(input4, lastInput4) && identical(input5, lastInput5)) { return lastResult as R; }

lastInput1 = input1; lastInput2 = input2; lastInput3 = input3; lastInput4 = input4; lastInput5 = input5; lastResult = combiner(input1, input2, input3, input4, input5); hasCache = true;

return lastResult as R; }; }