Flutter-контейнер onPressed?

У меня есть этот контейнер:

          new Container(
            width: 500.0,
            padding: new EdgeInsets.fromLTRB(20.0, 40.0, 20.0, 40.0),
            color: Colors.green,
            child: new Column(
              children: [
                new Text("Ableitungen"),
              ]
            ),
          ),

когда пользователь нажимает на контейнер, я хочу, чтобы метод onPressed был запущен (например, это можно сделать с помощью IconButtons). Как я могу добиться такого поведения с контейнерами?

спасибо заранее

3 ответов


Я думаю, вы можете использовать виджет GestureDetector следующим образом:

new GestureDetector(
        onTap: (){
          print("Container clicked");
        },
        child: new Container(
          width: 500.0,
          padding: new EdgeInsets.fromLTRB(20.0, 40.0, 20.0, 40.0),
          color: Colors.green,
          child: new Column(
              children: [
                new Text("Ableitungen"),
              ]
          ),
        )
    );

самое простое решение-обернуть Container на GestureRecognizer, но подумайте об использовании InkWell или FlatButton Если вы создаете приложение Material design. Эти виджеты будут показывать визуальную реакцию всплеска при касании.


просто хотел добавить на В Dumbfounds ответ (принято ans выше)

Если вы используете GestureDetector или чернильница для обработки щелчка группы значков и текста используйте значок виджет вместо IconButton для отображения значка в качестве метода onPressed IconButton возьмет на себя метод onTap GestureDetector / InkWell, и в результате onTap будет работать только при нажатии на кнопку текст.

пример

@override
  Widget build(BuildContext context) {
    return Row(mainAxisSize: MainAxisSize.min, children: [
      GestureDetector(
        onTap: () {
          _toggleFavorite();
        },
        child: Row(
          children: [
            Container(
              padding: EdgeInsets.all(0.0),
              child: _isFavorited ? Icon(Icons.star, color: Colors.red[500]) : Icon(Icons.star_border),
            ),
            SizedBox(
              width: 18.0,
              child: Container(
                child: Text('$_favoriteCount'),
              ),
            )
          ],
        ),
      )
    ]);
  }
}