169 votes

Comment ajouter un bouton vide au widget TextField

Existe-t-il un moyen approprié d’ajouter un bouton vide au widget TextField dans Flutter?

comme cette image dans les directives de conception matriale: entrez la description de l'image ici

Ce que j'ai trouvé est de définir un IconButton clair dans le suffixIcon de InputDecoration. Est-ce la bonne façon?

83voto

赵开元 Points 71
         Container(
            margin: EdgeInsets.only(left: 16.0),
            child: TextFormField(
              controller: _username,
              decoration: InputDecoration(
                  hintText: '请输入工号',
                  filled: true,
                  prefixIcon: Icon(
                    Icons.account_box,
                    size: 28.0,
                  ),
                  suffixIcon: IconButton(
                      icon: Icon(Icons.remove),
                      onPressed: () {
                        debugPrint('222');
                      })),
            ),
          ),
 

utiliser iconButton

45voto

Vilokan Labs Points 793

Essaye ça -

 final TextEditingController _controller = new TextEditingController();
 
 new Stack(
            alignment: const Alignment(1.0, 1.0),
            children: <Widget>[
              new TextField(controller: _controller,),
              new FlatButton(
                  onPressed: () {
                     _controller.clear();
                  },
                  child: new Icon(Icons.clear))
            ]
        )
 

20voto

Mete Points 381

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

enter image description here

En surbrillance / de l'état sélectionné.

enter image description here

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();
          });
        },
      ),
    ),
  ],
);

20voto

Zulfiqar Ali Points 368

Rechercher dans TextField avec une icône et un bouton vide

 import 'package:flutter/material.dart';

  class SearchTextField extends StatefulWidget{
    @override
    State<StatefulWidget> createState() {
      // TODO: implement createState
      return new SearchTextFieldState();
    }
  }

  class SearchTextFieldState extends State<SearchTextField>{
    final TextEditingController _textController = new TextEditingController();

    @override
    Widget build(BuildContext context) {
      // TODO: implement build
      return new Row(children: <Widget>[
        new Icon(Icons.search, color: _textController.text.length>0?Colors.lightBlueAccent:Colors.grey,),
        new SizedBox(width: 10.0,),
        new Expanded(child: new Stack(
            alignment: const Alignment(1.0, 1.0),
            children: <Widget>[
              new TextField(
                decoration: InputDecoration(hintText: 'Search'),
                onChanged: (text){
                  setState(() {
                    print(text);
                  });
                },
                controller: _textController,),
              _textController.text.length>0?new IconButton(icon: new Icon(Icons.clear), onPressed: () {
                setState(() {
                  _textController.clear();
                });
              }):new Container(height: 0.0,)
            ]
        ),),
      ],);
    }
  }
 

search_1

search_2

6voto

Tahseen Quraishi Points 488

Pour ajouter une icône dans le champ de texte. Vous devez utiliser suffixIcon ou prefixIcon dans la décoration Input.

 TextFormField(
    autofocus: false,
    obscureText: true,
    decoration: InputDecoration(
       labelText: 'Password',
       suffixIcon: Icon(
                    Icons.clear,
                    size: 20.0,
                  ),
       border: OutlineInputBorder(
       borderRadius: BorderRadius.all(Radius.circular(0.0)),
     ),
      hintText: 'Enter Password',
      contentPadding: EdgeInsets.all(10.0),
    ),
  );
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X