Удалите отступы из Flutter PopupMenuButton

Есть идеи, как я могу удалить огромные отступы из Flutter PopupmenuButton? Что-то вроде shrinkWrap или даже альтернативного виджета, который можно использовать? Это нарушает согласованность моих элементов.

Я попытался установить padding до 0, но никакого эффекта.

padding: EdgeInsets.all(0)

https://stackru.com/images/d6cc857824dc3708606653cbba3b7002cbbc558d.png

https://stackru.com/images/7cebcce33938bb350f76cd4162e6b37639196efc.png

8 ответов

Решение

Если вы внимательно видите, что прокладка находится не в PopupmenuButton набивка исходит от IconButton.IconButton - это виджет Material Design, который соответствует спецификации, согласно которой объекты, которые можно нажимать, должны иметь размер не менее 48 пикселей с каждой стороны. Так что лучше создать собственный виджет, чтобы уменьшить отступы.

Простым обходным путем, чтобы избежать этого, будет использование Icon с оболочкой GestureDetector.

Вы можете обратиться к этому сообщению для получения более подробной информации.

Поставка childскорее, чем iconпозволит вам использовать пользовательский виджет с любым желаемым размером/отступом.

Примечание: Icons.more_vertимеет собственные отступы, но можно использовать любую пользовательскую иконку, чтобы избежать этого.

      PopupMenuButton(
  child: Container(
    height: 36,
    width: 48,
    alignment: Alignment.centerRight,
    child: Icon(
      Icons.more_vert,
    ),
  ),
  onSelected: (value) {},
  itemBuilder: (context) => [],
),

Вы просто должны предоставитьIconкомпонент егоchildсвойство, как показано ниже:

      
PopupMenuButton(
  child: Icon(
      Icons.more_vert,
    ),
  onSelected: (value) {},
  itemBuilder: (context) => [],
),

Решение было предоставлено, но вам нужно отредактировать файлы, не относящиеся к проекту (класс PopupMenuItem)

return InkWell(
      onTap: widget.enabled ? handleTap : null,
      child: Container(
        height: widget.height,
        padding: const EdgeInsets.symmetric(horizontal: _kHorizontalMenuPadding), // setting this to 0 worked 
        child: item,
      ),
    );

PS: Не рекомендуется, но все еще работает

Из документации Flutter для класса PopopMenuButton,

padding → EdgeInsetsGeometry По умолчанию совпадает с заполнением IconButton 8 dps. В некоторых случаях, особенно когда эта кнопка появляется как конечный элемент элемента списка, полезно иметь возможность установить заполнение равным нулю.

Вы можете изменить отступ на 0, как это предлагается в документах.

Узнайте больше здесь - https://api.flutter.dev/flutter/material/PopupMenuButton-class.html

Решение: заверните его в SizeBox;)

SizedBox(height:,child: Row(children: [PopupMenuButton(

            )
    ],
  ),
)

положи его в контейнер, работай на меня...

      PopupMenuButton<...>(
          child: Container(
            child: Icon(Icons.more_vert, ),
          ),
          onSelected: (... kValue) {
            
          },
          itemBuilder: (BuildContext context) {
            return ... ;
          }
      )

Чтобы удалить отступы из кнопки PopUpMenu, оберните ее в контейнер и укажите желаемую ширину.

      Container(
  width:20,
  child: PopupMenuButton( 
       // your Code is Here       
      ),
  )
Другие вопросы по тегам