Удалите отступы из 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
),
)