#flutter #dart #baseline
Вопрос:
У меня возникли проблемы с размещением логотипа рядом с некоторым текстом и правильным выравниванием его по вертикали. Размеры PNG логотипа png составляют около 750×256. Я хочу, чтобы он был того же размера, что и заглавная буква в тексте рядом с ним. Поэтому я установил размер шрифта на 28, а высоту изображения на 20. Я бы предположил, что, поместив его в ряд с базовой линией выравнивания по поперечной оси, изображение должно быть помещено в базовую линию, но оно помещено сверху.
Вот мой код:
static Widget _buildLogo() {
return Row(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.baseline,
textBaseline: TextBaseline.alphabetic,
children: [
SizedBox(width: 15.0),
Image.asset("assets/images/header-logo-red_256_solid.png", height: 20),
SizedBox(width: 10.0),
Text('Text',
style: TextStyle(
fontSize: 28.0,
backgroundColor: Colors.green
)
),
]
);
}
и вот как это выглядит:
Я бы хотел, чтобы это было так (я добавил строку для обозначения алфавитной базовой линии):
РЕДАКТИРОВАТЬ: Краткое объяснение: Я хочу добиться поведения HTML по умолчанию, которое вы получите в следующем фрагменте кода?
<html>
<body>
<img src="logo.png" /><font size=200>laBlaBla</font>
</body>
</html>
Комментарии:
1. Я не уверен, что вы можете сделать это с изображением в детстве. Согласно документам :
Children who report no baseline will be top-aligned.
. И ваше изображение, похоже, не сообщает.2. Вы можете использовать
CrossAxisAlignment.center
.
Ответ №1:
Наконец — то я нашел решение.
С помощью строки это невозможно без изменения поля визуализации, но это возможно с помощью RichText. Секрет в том, чтобы использовать правильную базовую линию/выравнивание.
RichText(
text: TextSpan(
children: [
WidgetSpan(child: Image.asset("assets/images/logo.png"), baseline: TextBaseline.alphabetic, alignment: PlaceholderAlignment.baseline),
TextSpan(text: "laBlaBla", style: TextStyle(fontSize: 48),)
]
)
),
ПРАВКА: Немного осторожности, однако, это решение также не всегда работает так, как ожидалось.