Как равномерно распределить и изменить размер двух элементов подряд?

0

Вопрос

Я пытаюсь spaceevenly один Icon() и ещеAutoSizeText() в Row(). Когда сумма большая, как вы можете видеть на прикрепленных изображениях, она отображается как ожидалось, но когда сумма равна нулю или довольно короткая, AutoSizeText() центрируется, но это приводит к тому, что больше не поддерживается одинаковое расстояние от краев. Существует дополнительное расстояние, вызванное центровкой. Я не знаю, как это исправить.

Редактировать. Если это не было ясно, я имею в виду значок розовой сумки для покупок и сумму, указанную в разделе "Riepilogo Settimanale". Если вы посмотрите на значок ресторана и его количество, вы можете заметить, что они не центрированы, они ближе к левому краю.

orginal view

enter image description here

Container(
      decoration: BoxDecoration(
        color: Colors.white,
        borderRadius: BorderRadius.circular(20),
      ),
      width: size.width * 0.3,
      height: size.height,
      // height: size.height * 0.055,
      child: Row(
        children: [
          Spacer(),
          Expanded(
            flex: 3,
            child: Container(
              child: LayoutBuilder(
                builder: (context, constraint) {
                  return Icon(
                    icona,
                    color: colore,
                    size: constraint.biggest.width * 1,
                  );
                },
              ),
            ),
          ),
          Spacer(),
          Expanded(
            flex: 6,
            child: Center(
              child: AutoSizeText(
                importo,
                style: TextStyle(
                  fontSize: 20,
                  fontWeight: FontWeight.bold,
                  color: colore,
                ),
                maxLines: 1,
              ),
            ),
          ),
          Spacer(),
        ],
      ),
    )
android dart flutter flutter-layout
2021-11-23 20:16:17
1

Лучший ответ

1

Если я вас правильно понял, вы хотите выровнять текст по правому краю, а не по центру.

Для достижения этой цели рассмотрите возможность использования одного Spacer() между значком и текстом. Внешний интервал (поля и отступы) можно выполнить с помощью Padding вместо виджета.

2021-11-24 00:29:45

Сначала я хотел, чтобы поведение было похоже на распределение пространства в строке, я хотел, чтобы между левым краем значка было одинаковое пространство, значок-текст, текст-правый край. Однако я не знаю, как этого добиться, потому что размер текста меняется, как только он изменяется, поэтому разделитель должен иметь возможность изменять размер соответственно. Я решил, что лучше просто выровнять текст по правому краю, как вы предложили, даже если это не то, что я хотел, но кажется приличным
iocomxda

@iocomxda, о, если вы хотите иметь одинаковое пространство в 3 промежутках, вы можете попробовать поместить 3 Spacer() виджеты для этого. Но тексты (имеющие разную ширину) не будут совпадать друг с другом на странице (например, если $2666 и $0), поэтому выравнивание по правому краю является наиболее распространенным подходом.
user1032613

Спасибо вам за любезное объяснение! Не знал, что выравнивание по правому краю-самый распространенный подход.
iocomxda

На других языках

Эта страница на других языках

Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................