buildWithSPI method

  1. @override
Widget buildWithSPI(
  1. AFUIStandardChoiceDialogSPI spi
)
override

Builds a Widget using the data extracted from the state.

Implementation

@override
Widget buildWithSPI(AFUIStandardChoiceDialogSPI spi) {
  final context = spi.context;
  final t = spi.t;

  final rows = t.column();

  final icon = t.iconStandard(context.p.icon, size: 30.0);
  final titleCols = t.row();
  if(icon != null) {
    titleCols.add(icon);
  }
  final title = context.p.title;
  final body = context.p.body;

  titleCols.add(Expanded(child: t.childMargin(
    margin: t.margin.h.s3,
    child: title.toRichText(
      maxLines: 11,
      softWrap: true,
    )
  )));

  rows.add(Row(children: titleCols));
  if(body != null) {
    rows.add(t.childMargin(
      margin: const EdgeInsets.fromLTRB(38, 8, 8, 8),
      child: body.toRichText(maxLines: 10,
        softWrap: true)
    ));
  }

  final actions = t.row();
  final buttonTitles = context.p.buttonTitles;
  for(var i = 0; i < buttonTitles.length; i++) {
    final buttonTitle = buttonTitles[i];
    if(i < buttonTitles.length - 1) {
      actions.add(t.childMargin(
        margin: t.margin.h.s3,
        child: t.childButtonFlatText(
          text: buttonTitle,
          onPressed:  () {
            spi.onCloseDialog(i);
          },
      )));
    } else {
      actions.add(t.childMargin(
        margin: t.margin.h.s3,
        child: t.childButtonPrimaryText(
        text: buttonTitle,
        onPressed:  () {
          spi.onCloseDialog(i);
        },
      )));
    }
  }

  rows.add(t.childMargin(
    margin: t.margin.t.s3,
    child: Row(
      mainAxisAlignment: MainAxisAlignment.end,
      children: actions
  )));

  return Dialog(
    backgroundColor: t.colorSurface,
    child: Container(
      margin: t.margin.a.s5,
      child: Column(
        crossAxisAlignment: CrossAxisAlignment.start,
        mainAxisSize: MainAxisSize.min,
        children: rows
      )
    )
  );
}