Flutter GestureDetector не работает внутри стека с TextField - PullRequest
0 голосов
/ 21 марта 2020

Я написал немодальное всплывающее диалоговое окно, которое работает нормально, пока я не положил его в стек с TextField. Работает нормально без TextField и даже когда я помещаю два стека в стек (они оба работают).

Я видел подобный пост здесь , но я не думаю, что он применим, потому что он задействует два GestureDetectors в стеке, а не проблема, которую я вижу, когда TextField ломает мой GestureDetector.

В соответствии с просьбой, я создал версию моего немодального диалога для dartpad, используя стек:

Версия для Dartpad

EDIT

I посмотрим, что сейчас происходит. Стек обрабатывает жесты только в пределах своих границ, даже если включен Overflow.visible. Тот же вопрос, что и этот вопрос . Я удалю этот вопрос или обновлю его, когда у меня будет решение.

Вот как выглядит версия Dartpad:

enter image description here

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