#flutter #button #overflow #card
Вопрос:
Я просто начал трепетать. Я пытался создать структуру карты, но я думаю, что это совершенно неправильно. Я никогда не смог бы это исправить. Я использую расширение Gridview. Таким образом, номера столбцов динамически меняются по мере того, как экран становится меньше или больше. но я продолжаю получать ошибку переполнения, что мне делать.
var response = sepet.itemsCount[item.name];
return SizedBox(
child: Padding(
padding: EdgeInsets.all(0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
Card(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.all(Radius.circular(8.0))),
child: InkWell(
customBorder: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(8),
),
onTap: () {},
child: Column(
children: <Widget>[
ListTile(
title: Text(item.name ?? ''),
subtitle: Text(item.defaultPrice.toString() '
Моя структура расширения gridview выглядит следующим образом
child: GridView.extent(
physics: NeverScrollableScrollPhysics(),
shrinkWrap: true,
maxCrossAxisExtent: 250.0,
crossAxisSpacing: 20.0,
mainAxisSpacing: 20.0,
children: List.generate(foods!.length, (index) {
return itemCard(foods[index].menuItem ?? MenuItem(), value);
}),
Комментарии:
1. Попробуйте добавить FittedBox вокруг первой строки " Заполнение( заполнение: EdgeInsets.all(8.0), дочерний элемент:FittedBox(дочерний элемент: Строка( Выравнивание по оси: выравнивание по оси.spaceAround, дети: [...]))"
2. Приспособленная коробка сработала спасибо
Ответ №1:
Вопрос, на который вам нужно ответить, заключается в том, что бы вы хотели, чтобы произошло, если ширина этой карты настолько мала? Вы хотите другое расположение этих элементов? Если вы решите, как это будет выглядеть, и проверьте ограничение LayoutBuilder
или всю ширину экрана с MediaQuery
тем, что вы считаете лучшим. Вы также можете сделать так, чтобы этот бит прокручивался горизонтально с помощью SingleChildScrollView
. Это дизайнерское решение. Вы должны представить себе, как все выглядит при изменении размера экрана, и быть как можно более внимательным к реакции, а не просто пытаться найти какой-нибудь волшебный виджет, в чем мы все иногда виноваты.
Ответ №2:
Попробуйте приведенный ниже код, надеюсь, он вам поможет, я попробовал похожий на ваш код и добавил ваши виджеты в расширенные или гибкие виджеты.
GridView.builder(
padding: const EdgeInsets.all(8),
itemCount: 4,
itemBuilder: (ctx, i) {
return Container(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Container(
child: Text('data'),
),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Expanded(
child: Container(
padding: const EdgeInsets.symmetric(horizontal: 5.0),
margin: EdgeInsets.all(10),
height: 35.0,
width: 100.0,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(20),
border: Border.all(
color: Colors.grey,
),
),
child: Row(
mainAxisAlignment: MainAxisAlignment.start,
children: <Widget>[
InkWell(
child: Icon(Icons.remove, color: Colors.green),
onTap: () {},
),
Spacer(),
Text(
'0',
style: Theme.of(context)
.textTheme
.subtitle2!
.copyWith(fontSize: 16.0),
),
Spacer(),
InkWell(
child: Icon(
Icons.add,
color: Colors.green,
),
onTap: () {},
),
],
),
),
),
Expanded(
child: ElevatedButton(
onPressed: () {},
child: Text(
'Sub Total',
style: TextStyle(
fontSize: 15,
),
),
),
),
],
),
],
),
);
},
gridDelegate: SliverGridDelegateWithMaxCrossAxisExtent(
maxCrossAxisExtent: 170.0,
mainAxisExtent: 93,
),
),
Комментарии:
1. Структура здесь, к сожалению, тоже не реагирует. По мере того как экран становится меньше, количество столбцов не меняется, и когда я добавил эти кнопки, произошло переполнение.
2. Хорошо, вы хотите, чтобы это
Grid Widgets
зависело от размера вашего экрана для всех платформ?3. да, это зависит от размера экрана
4. @beynelmilel проверьте мой обновленный ответ и используйте
SliverGridDelegateWithMaxCrossAxisExtent()
виджет для быстрого реагированияGrid Widgets
),
),
Padding(
padding: EdgeInsets.all(8.0),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceAround,
children: [
Row(
mainAxisAlignment: MainAxisAlignment.spaceAround,
children: <Widget>[
countChanger(sepet, false, item),
Padding(
padding: EdgeInsets.only(left: 8.0, right: 8.0),
child: Text(
response != null ? response.toString() : '0',
style: TextStyle(fontSize: 18.0),
),
),
countChanger(sepet, true, item),
],
),
ButtonTheme(
height: 25,
minWidth: 25,
child: ElevatedButton(
onPressed: () {
!isAdded
? sepet.sepeteEkle(item)
: sepet.deleteItem(item);
},
style: ElevatedButton.styleFrom(
primary: !isAdded
? Colors.teal
: Colors.red,
),
child: Text(!isAdded ? 'Ekle' : 'Çıkar'),
),
),
],
),
)
],
),
),
),
],
),
),
);
Моя структура расширения gridview выглядит следующим образом
Комментарии:
1. Попробуйте добавить FittedBox вокруг первой строки » Заполнение( заполнение: EdgeInsets.all(8.0), дочерний элемент:FittedBox(дочерний элемент: Строка( Выравнивание по оси: выравнивание по оси.spaceAround, дети: […]))»
2. Приспособленная коробка сработала спасибо
Ответ №1:
Вопрос, на который вам нужно ответить, заключается в том, что бы вы хотели, чтобы произошло, если ширина этой карты настолько мала? Вы хотите другое расположение этих элементов? Если вы решите, как это будет выглядеть, и проверьте ограничение LayoutBuilder
или всю ширину экрана с MediaQuery
тем, что вы считаете лучшим. Вы также можете сделать так, чтобы этот бит прокручивался горизонтально с помощью SingleChildScrollView
. Это дизайнерское решение. Вы должны представить себе, как все выглядит при изменении размера экрана, и быть как можно более внимательным к реакции, а не просто пытаться найти какой-нибудь волшебный виджет, в чем мы все иногда виноваты.
Ответ №2:
Попробуйте приведенный ниже код, надеюсь, он вам поможет, я попробовал похожий на ваш код и добавил ваши виджеты в расширенные или гибкие виджеты.
Комментарии:
1. Структура здесь, к сожалению, тоже не реагирует. По мере того как экран становится меньше, количество столбцов не меняется, и когда я добавил эти кнопки, произошло переполнение.
2. Хорошо, вы хотите, чтобы это
Grid Widgets
зависело от размера вашего экрана для всех платформ?3. да, это зависит от размера экрана
4. @beynelmilel проверьте мой обновленный ответ и используйте
SliverGridDelegateWithMaxCrossAxisExtent()
виджет для быстрого реагированияGrid Widgets