Hier ist eine weitere Antwort, die die Antwort von @Vilokan Lab etwas erweitert, was für mich nicht wirklich der Fall war, da FlatButton eine Mindestbreite von 88,0 hat und die Schaltfläche zum Löschen daher überhaupt nicht rechtsbündig mit dem TextField angezeigt wurde.
Also habe ich meine eigene Button-Klasse erstellt und diese mithilfe eines Stacks angewendet. Hier ist mein Prozess:
Tastenklasse:
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),
children: <Widget>[
Container(
width: size,
height: size,
decoration: BoxDecoration(
shape: BoxShape.circle, color: Colors.grey[300]),
),
Icon(
icon,
size: size * 0.6,
)
],
)));
}
}
Dann bewerben Sie sich wie InputDecorationfolgt auf Ihr TextField:
var myTextField = TextField(
controller: _textController,
decoration: InputDecoration(
hintText: "Caption",
suffixIcon: CircleIconButton(
onPressed: () {
this.setState(() {
_textController.clear();
});
},
)),
},
);
Um dies zu bekommen:
Nicht hervorgehobener Zustand

Markierter / ausgewählter Zustand.

Beachten Sie, dass diese Färbung bei Verwendung kostenlos ist suffixIcon.
Beachten Sie, dass Sie es auch wie folgt in Ihr TextField stapeln können, aber nicht die automatische Färbung erhalten, die Sie erhalten, wenn Sie Folgendes verwenden suffixIcon:
var myTextFieldView = Stack(
alignment: Alignment(1.0,0.0),
children: <Widget>[
TextField(
controller: _textController,
decoration: InputDecoration(hintText: "Caption"),
),
Positioned(
child: CircleIconButton(
onPressed: () {
this.setState(() {
_textController.clear();
});
},
),
),
],
);