J'utilise cette méthode pour afficher un AlertDialog:
_onSubmit(message) {
if (message.isNotEmpty) {
showDialog(
context: context,
barrierDismissible: false,
builder: (BuildContext context) {
return AlertDialog(
title: Center(child: Text('Alert')),
content: Row(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children : <Widget>[
Expanded(
child: Text(
message,
textAlign: TextAlign.center,
style: TextStyle(
color: Colors.red,
),
),
)
],
),
actions: <Widget>[
FlatButton(
child: Text('Cancel'),
onPressed: () {
Navigator.of(context).pop();
}),
FlatButton(
child: Text('Ok'),
onPressed: () {
_inputTextController.clear();
Navigator.of(context).pop();
})
],
);
},
);
}
}
Tout fonctionne, mais les boutons sont alignés à droite, comme indiqué sur l'image ci-dessous:
Je souhaite styliser certains boutons, par exemple l'un au début, l'autre fin… .. J'ai effectué une recherche dans la documentation, mais je n'ai trouvé que la façon de les créer «Boutons superposés» ..__ ?
Personnaliser le widget
Modifiez le widget lui-même: Sous la variable AlertDialog
, il y a un widget ButtonBar où vous pouvez utiliser alignment: MainAxisAlignment.spaceBetween
pour aligner les boutons correctement. Voir cette réponse pour un exemple de widget AlertDialog personnalisé.
Rangée de boutons
Vous pouvez également supprimer les boutons sous actions
et ajouter une propre Row
personnalisée avec RaisedButtons , qui ressemble à ceci:
Row (
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[
RaisedButton(), // button 1
RaisedButton(), // button 2
]
)
Dans votre cas, vous pouvez ajouter un Column autour de la ligne dans content
et y ajouter votre ligne existante et celle modifiée que vous avez créées à partir de l'exemple ci-dessus.
Ne pas ajouter de bouton dans actions of AlertDialog. Comme vous pouvez le voir.
_onSubmit(message) {
if (message.isNotEmpty) {
showDialog(
context: context,
barrierDismissible: false,
builder: (BuildContext context) {
return AlertDialog(
title: Center(child: Text('Alert')),
content: Row(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children : <Widget>[
Expanded(
child: Text(
message,
textAlign: TextAlign.center,
style: TextStyle(
color: Colors.red,
),
),
),
FlatButton(
child: Text('Cancel'),
onPressed: () {
Navigator.of(context).pop();
}),
FlatButton(
child: Text('Ok'),
onPressed: () {
_inputTextController.clear();
Navigator.of(context).pop();
})
],
),
);
},
);
}
}
Déplacer les boutons vers le contenu est une bonne solution.
showDialog(
context: context,
barrierDismissible: false,
builder: (BuildContext context) {
return AlertDialog(
title: Center(child: Text('Alert')),
content: Column(
mainAxisSize: MainAxisSize.min,
children: <Widget>[
Container(
child: Text(
"message",
textAlign: TextAlign.center,
style: TextStyle(
color: Colors.red,
),
),
),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[
FlatButton(
child: Text('Yes'),
onPressed: () {
Navigator.of(context).pop();
}),
FlatButton(
child: Text('No'),
onPressed: () {
Navigator.of(context).pop();
})
])
],
),
);
});
Ou vous pouvez utiliser RFlutter Alert library pour cela. Il est facilement personnalisable et facile à utiliser. Son style par défaut comprend des coins arrondis et vous pouvez ajouter des boutons autant que vous le souhaitez.
Style d'alerte:
var alertStyle = AlertStyle(
animationType: AnimationType.fromTop,
isCloseButton: false,
isOverlayTapDismiss: false,
descStyle: TextStyle(fontWeight: FontWeight.bold),
animationDuration: Duration(milliseconds: 400),
alertBorder: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(0.0),
side: BorderSide(
color: Colors.grey,
),
),
titleStyle: TextStyle(
color: Colors.red,
),
);
Et associer votre objet AlertStyle au champ de style d'Alert.
Alert(
context: context,
style: alertStyle,
type: AlertType.info,
title: "RFLUTTER ALERT",
desc: "Flutter is more awesome with RFlutter Alert.",
buttons: [
DialogButton(
child: Text(
"COOL",
style: TextStyle(color: Colors.white, fontSize: 20),
),
onPressed: () => Navigator.pop(context),
color: Color.fromRGBO(0, 179, 134, 1.0),
radius: BorderRadius.circular(0.0),
),
],
).show();
* Je suis l'un des développeurs de RFlutter Alert.