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"),
              ]
            ),
          ),

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

Ответ 1

Я думаю, вы можете использовать виджет 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"),
              ]
          ),
        )
    );

Ответ 2

Вы не должны использовать GestureDetector, потому что он не покажет вам никакого волнового эффекта (который является основной частью приложения разработки материалов), поэтому вы можете использовать InkWell, вот основной пример.

Widget _buildContainer() {
  return Material(
    color: Colors.blue,
    child: InkWell(
      onTap: () => print("Container pressed"), // handle your onTap here
      child: Container(height: 200, width: 200),
    ),
  );
}

Выход:

enter image description here

Ответ 3

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

Ответ 4

Просто хотел добавить к ответу "Дамблфаунс" (принятый выше)

Если вы используете GestureDetector или InkWell для обработки щелчка группы значков и текста, используйте значок виджета вместо 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'),
              ),
            )
          ],
        ),
      )
    ]);
  }
}