#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) -центральное положение дочернего элемента из верхнего левого угла в центр.