buildPendant method

Widget? buildPendant(
  1. List<DecoratorPendant<T>> list,
  2. DecoratorPendantPosition positioned,
  3. DecoratorBoxStatus<T> status, {
  4. Axis direction = Axis.horizontal,
})

Implementation

Widget? buildPendant(List<DecoratorPendant<T>> list, DecoratorPendantPosition positioned, DecoratorBoxStatus<T> status,
    {Axis direction = Axis.horizontal}) {
  final listPendant =
      list.where((element) => element.positioned == positioned);
  if (listPendant.isEmpty) return null;
  Widget buildVisibilityPendant(DecoratorPendant<T> pendant) {
    if (pendant.builder != null) {
      return Visibility(
          maintainAnimation: pendant.maintainSize,
          maintainState: pendant.maintainSize,
          maintainSize: pendant.maintainSize,
          child: pendant.builder!(status));
    }

    bool isEditingVisible = true;
    bool isHasFocusVisible = true;
    bool isValueVisible = true;

    if (pendant.needEditing != null) {
      isEditingVisible = pendant.needEditing == status.isEditing;
    }
    if (pendant.needFocus != null) {
      isHasFocusVisible = pendant.needFocus == status.hasFocus;
    }
    if (pendant.needValue != null) {
      isValueVisible = pendant.needValue!(status.value);
    }
    return Visibility(
        visible: isEditingVisible && isHasFocusVisible && isValueVisible,
        maintainAnimation: pendant.maintainSize,
        maintainState: pendant.maintainSize,
        maintainSize: pendant.maintainSize,
        child: pendant.child!);
  }

  if (listPendant.length == 1) {
    return buildVisibilityPendant(listPendant.first);
  }
  return Flex(
      mainAxisSize: MainAxisSize.min,
      direction: direction,
      children: listPendant
          .map((pendant) => buildVisibilityPendant(pendant))
          .toList());
}