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),
),
);
}
Выход:
Ответ 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'),
),
)
],
),
)
]);
}
}