Я написал немодальное всплывающее диалоговое окно, которое работает нормально, пока я не положил его в стек с TextField. Работает нормально без TextField и даже когда я помещаю два стека в стек (они оба работают).
Я видел подобный пост здесь , но я не думаю, что он применим, потому что он задействует два GestureDetectors в стеке, а не проблема, которую я вижу, когда TextField ломает мой GestureDetector.
В соответствии с просьбой, я создал версию моего немодального диалога для dartpad, используя стек:
Версия для Dartpad
EDIT
I посмотрим, что сейчас происходит. Стек обрабатывает жесты только в пределах своих границ, даже если включен Overflow.visible. Тот же вопрос, что и этот вопрос . Я удалю этот вопрос или обновлю его, когда у меня будет решение.
Вот как выглядит версия Dartpad:
![enter image description here](https://i.stack.imgur.com/kp11g.png)
Вот новый код Dartpad. Только значок ...
является жестом обнаружения
import 'package:flutter/material.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
home: Scaffold(
body: Center(
//child: TestDialog(), // <-- works without stack
child: SurveyEditorItem(),
),
),
);
}
}
class TestDialog extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Container(
width: 280,
padding: EdgeInsets.all(15),
color: Colors.grey,
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[
Icon(Icons.done),
Icon(Icons.movie),
Icon(Icons.undo),
GestureDetector(
child: Icon(Icons.more_horiz),
onTap: () {
print('Success!'); // <-- this line not reached
},
),
],
),
);
}
}
class SurveyEditorItem extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Stack(
overflow: Overflow.visible,
children: <Widget>[
Positioned(
top: -45,
left: 40,
child: TestDialog(),
),
TextField(
onTap: () {
print('TextField tapped\n');
},
),
],
);
}
}