Voici une autre réponse étendre un peu sur @Vilokan Laboratoire de réponse, ce qui n'était pas vraiment le faire pour moi depuis FlatButton a une largeur minimale de 88.0, et donc le bouton clear n'a pas été figurant aligné à droite avec le TextField à tous.
Donc, je suis allé de l'avant et fait mon propre bouton de classe, et l'applique à l'aide d'une Pile, voici mon processus:
Bouton de classe:
class CircleIconButton extends StatelessWidget {
final double size;
final Function onPressed;
final IconData icon;
CircleIconButton({this.size = 30.0, this.icon = Icons.clear, this.onPressed});
@override
Widget build(BuildContext context) {
return InkWell(
onTap: this.onPressed,
child: SizedBox(
width: size,
height: size,
child: Stack(
alignment: Alignment(0.0, 0.0), // all centered
children: <Widget>[
Container(
width: size,
height: size,
decoration: BoxDecoration(
shape: BoxShape.circle, color: Colors.grey[300]),
),
Icon(
icon,
size: size * 0.6, // 60% width for icon
)
],
)));
}
}
Puis appliquer afin de InputDecoration
de votre TextField:
var myTextField = TextField(
controller: _textController,
decoration: InputDecoration(
hintText: "Caption",
suffixIcon: CircleIconButton(
onPressed: () {
this.setState(() {
_textController.clear();
});
},
)),
},
);
Pour obtenir ceci:
Est pas mis en évidence de l'état
En surbrillance / de l'état sélectionné.
Remarque cette coloration est fourni gratuitement lorsque vous utilisez suffixIcon
.
Remarque vous pouvez également Empiler dans votre Champ comme ceci, mais vous n'obtiendrez pas l'auto-coloration que vous obtenez lorsque vous utilisez suffixIcon
:
var myTextFieldView = Stack(
alignment: Alignment(1.0,0.0), // right & center
children: <Widget>[
TextField(
controller: _textController,
decoration: InputDecoration(hintText: "Caption"),
),
Positioned(
child: CircleIconButton(
onPressed: () {
this.setState(() {
_textController.clear();
});
},
),
),
],
);