В структуре карт постоянно возникают переполнения

#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