buildWithSPI method
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
)
)
);
}