Флаттер: официальная документация для выравнивания неверна?

#flutter #alignment

#флаттер #выравнивание

Вопрос:

Когда я читал документацию Align, я нашел следующее объяснение.

введите описание изображения здесь

Ссылка https://api.flutter.dev/flutter/widgets/Align-class.html#widgets .Выровнять.2

0.2 — это xAlign, а 0.6 — YAlign, следуйте формулам в официальной документации и, наконец, вычислите точку (36.0,48.0) . Когда значение xAlign меньше нуля или yAlign меньше нуля, вычисление по этой формуле всегда положительное. И формула для вычисления смещения FlutterLogo и Container в исходном коде выглядит следующим образом( alignment.dart lines:290 ):

 Offset other = size - child!.size as Offset;
final double centerX = other.dx / 2.0;
final double centerY = other.dy / 2.0;
childParentData.offset = Offset(centerX   xAlign * centerX, centerY   yAlign * centerY);
  

Результат в соответствии с формулой в исходном коде, похоже, не имеет никакого отношения к (36,48) . Я неправильно понял или в документе сказано что-то не так?

Комментарии:

1. они правы: они говорят о 2 точках: «Свойство выравнивания описывает точку в дочерней системе координат и другую точку в системе координат этого виджета. Виджет выравнивания позиционирует дочерний элемент таким образом, что обе точки выстраиваются друг над другом.» childParentData.offset является результатом этого позиционирования и отличается от двух приведенных выше виртуальных точек

Ответ №1:

Формула вычисления верна. Вы должны иметь в виду, что центр объекта изображения равен (0,0), который является верхним левым углом объекта, а не центром объекта. Поэтому вы должны учитывать размер объекта.

 final double centerX = (other.dx   child.size.width) / 2.0;
final double centerY = (other.dy   child.size.height) / 2.0;
  

Возможно, я неправильно выполняю математику, но идея состоит в том, чтобы переместить (0,0) -центральное положение дочернего элемента из верхнего левого угла в центр.