Time Off Widget

Il widget CardContent è progettato per mostrare contenuti in una card personalizzabile. Accetta come parametro un oggetto CardViewModel che consente di configurare diversi aspetti del layout, del contenuto e del comportamento della card.

Costruttore

Il costruttore di CardContent è definito come segue:

CardContent({
    required CardViewModel cardViewModel,
});

Parametri:

  • cardViewModel: un’istanza di CardViewModel che specifica le configurazioni della card, tra cui il contenuto principale, l’intestazione, la sezione inferiore e l’overlay.

Questa tipologia è simile alla Card Extended, la differenza è nell’utilizzo in maniera diversa delle varie configurazioni disponibili.

Varianti di utilizzo

Variante 1

Questa variante serve per mostrare una card relativa ad una richiesta ferie.

../../../_images/time-off1.png
CardContent(
        cardViewModel: CardViewModel(
          config: CardConfig(layoutBuilder: EvaCardExtendedLayoutBuilder(leftContentPadding: 0), onTap: (CardViewModel item) {}),
          contentConfig: CardContentConfig(
              customWidget: Column(
            children: [
              buildHeaderWithAvatarAndText(
                colorScheme: colorScheme,
                title: IconTextViewModel(text: "Rosario Brischetto"),
                description: IconTextViewModel(text: "Mobile Developer"),
              ),
              Container(
                margin: const EdgeInsets.only(top: 10, right: 20),
                child: Row(
                  crossAxisAlignment: CrossAxisAlignment.start,
                  mainAxisAlignment: MainAxisAlignment.start,
                  children: [
                    buildLabel(colorScheme: colorScheme),
                    buildPairIconTextRowList(colorScheme: colorScheme, pairIconTextList: [
                      PairIconTextViewModel(iconTextTitle: IconTextViewModel(text: "Tipo"), iconTextDescription: IconTextViewModel(text: "Ferie")),
                      PairIconTextViewModel(iconTextTitle: IconTextViewModel(text: "Durata"), iconTextDescription: IconTextViewModel(text: "2 giorni")),
                      PairIconTextViewModel(
                          iconTextTitle: IconTextViewModel(text: "Inizio"), iconTextDescription: IconTextViewModel(text: "12/09/2023\n09:00")),
                      PairIconTextViewModel(
                          iconTextTitle: IconTextViewModel(text: "Fine"), iconTextDescription: IconTextViewModel(text: "22/09/2023\n18:00"))
                    ]),
                  ],
                ),
              ),
            ],
          )),
          bottomConfig: CardBottomConfig(
              buttons: CardBottomButtons(buttons: [
            ButtonViewModel(label: 'Rifiuta', type: ButtonType.outlined, action: () {}),
            ButtonViewModel(label: 'Approva', type: ButtonType.standard, action: () {}),
            ButtonViewModel(label: 'Messaggio', type: ButtonType.outlined, action: () {})
          ])),
        ),
      )

Variante 2

Questa variante serve per mostrare una card che mostra una ferie.

../../../_images/time-off2.png
CardContent(
      cardViewModel: CardViewModel(
          config: CardConfig(layoutBuilder: EvaCardExtendedLayoutBuilder(leftContentPadding: 0, rightContentPadding: 0), onTap: (CardViewModel item) {}),
          contentConfig: CardContentConfig(
            customWidget: Padding(
              padding: const EdgeInsets.only(left: 10, right: 15, bottom: 3),
              child: Row(
                crossAxisAlignment: CrossAxisAlignment.start,
                mainAxisAlignment: MainAxisAlignment.start,
                children: [
                  buildOverlayItem(
                      colorScheme,
                      OverlayItemConfig(
                        isChecked: true,
                        orientation: EvaCardOverlayItemContentDoubleOrientation.horizontal,
                        overlayItemSize: OverlayItemSize.normal,
                        startDate: DateTime(2024, 2, 3),
                        endDate: DateTime(2024, 2, 5),
                      ))!,
                  buildPairIconTextRowList(
                    colorScheme: colorScheme,
                    pairIconTextList: [
                      PairIconTextViewModel(
                          iconTextTitle: IconTextViewModel(text: "Tipo", textTextStyle: demoColorScheme?.timeOffListCardDataTitleStyle),
                          iconTextDescription: IconTextViewModel(text: "Ferie", textTextStyle: demoColorScheme?.timeOffListCardDataContentStyle)),
                      PairIconTextViewModel(
                          iconTextTitle: IconTextViewModel(text: "Inizio", textTextStyle: demoColorScheme?.timeOffListCardDataTitleStyle),
                          iconTextDescription: IconTextViewModel(text: "12/09/2023\n09:00", textTextStyle: demoColorScheme?.timeOffListCardDataContentStyle)),
                      PairIconTextViewModel(
                          iconTextTitle: IconTextViewModel(text: "Fine", textTextStyle: demoColorScheme?.timeOffListCardDataTitleStyle),
                          iconTextDescription: IconTextViewModel(text: "22/09/2023\n18:00", textTextStyle: demoColorScheme?.timeOffListCardDataContentStyle))
                    ],
                  ),
                ],
              ),
            ),
          )),
    )

Variante 3

Questa variante serve per mostrare solo il widget con singola data.

../../../_images/time-off3.png
CardContent(
      cardViewModel: CardViewModel(
          config: CardConfig(layoutBuilder: EvaCardExtendedLayoutBuilder(leftContentPadding: 0, rightContentPadding: 0), onTap: (CardViewModel item) {}),
          contentConfig: CardContentConfig(
            customWidget: Padding(
              padding: const EdgeInsets.only(left: 10, right: 10, bottom: 3),
              child: buildOverlayItem(
                  colorScheme,
                  OverlayItemConfig(
                    isChecked: true,
                    orientation: EvaCardOverlayItemContentDoubleOrientation.horizontal,
                    overlayItemSize: OverlayItemSize.normal,
                    startDate: DateTime(2024, 2, 5),
                    endDate: DateTime(2024, 2, 5),
                  ))!,
            ),
          )),
    )

Variante 4

Questa variante serve per mostrare solo il widget con due date.

../../../_images/time-off4.png
CardContent(
      cardViewModel: CardViewModel(
          config: CardConfig(layoutBuilder: EvaCardExtendedLayoutBuilder(leftContentPadding: 0, rightContentPadding: 0), onTap: (CardViewModel item) {}),
          contentConfig: CardContentConfig(
            customWidget: Padding(
              padding: const EdgeInsets.only(left: 10, right: 10, bottom: 3),
              child: buildOverlayItem(
                  colorScheme,
                  OverlayItemConfig(
                    isChecked: true,
                    orientation: EvaCardOverlayItemContentDoubleOrientation.horizontal,
                    overlayItemSize: OverlayItemSize.normal,
                    startDate: DateTime(2024, 2, 3),
                    endDate: DateTime(2024, 2, 5),
                  ))!,
            ),
          )),
    )