#flutter #flutter-layout
#трепетание #flutter-layout
Вопрос:
Я пытаюсь создать пользовательский диалог. В диалоговом окне кнопка закрытия находится над контейнером:
Теперь я пытаюсь закрыть диалоговое окно, когда пользователь нажал на этот значок закрытия:
Widget build(BuildContext context) {
return Dialog(
insetPadding: EdgeInsets.symmetric(vertical: 0.0, horizontal: 30.0),
child: Container(
width: 300,
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
Stack(
overflow: Overflow.visible,
children: [
Visibility(
visible: true,
child: Positioned(
top: -15,
left: 0,
child: GestureDetector(
onTap: () {
print("Clicked");
},
child: CircleWidget()),
),
),
SingleChildScrollView(
child: Column(
Но onTap не срабатывает! Я думаю, что она лежит под каким-то виджетом!!!
Если GestureDetector является родительским Positioned
элементом для формы виджета, это неправильно.вот так:
Хотя onTap не работает, как указано выше.В чем ваша идея?
Ответ №1:
попробуйте использовать InkWell вместо GestureDetector
child: InkWell(onTap: () {
print("Clicked");
},
child: CircleWidget()),
Комментарии:
1. Я пытался, но не работал, как GestureDetector @milanpithadia
Ответ №2:
Как я предполагал ранее, виджет закрывал GestureDetector, поэтому я изменил позицию этого кода :
Visibility(
visible: widget.showCloseButton(),
child: Positioned(
top: -15,
left: 0,
с :
SingleChildScrollView(
child: Column(
mainAxisSize: MainAxisSize.min,
Теперь GestureDetector работает как шарм 🙂
полный код:
Widget build(BuildContext context) {
return Dialog(
insetPadding: EdgeInsets.symmetric(vertical: 0.0, horizontal: 30.0),
child: Container(
width: 300,
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
Stack(
overflow: Overflow.visible,
children: [
SingleChildScrollView(
child: Column(.....
Visibility(
visible: true,
child: Positioned(
top: -15,
left: 0,
child: GestureDetector(
onTap: () {
print("Clicked");
},
child: CircleWidget()),
),
),