Ограничения родителя в Flutter
Каждый виджет при раскладке получает
от родителя BoxConstraints: минимальную
и максимальную ширину и высоту. Потомок
решает, какой размер взять внутри этой
рамки. Текст без явной ширины сжимается по
содержимому; растянутый Row
заставляет потомков учитывать ширину экрана.
Виджет
Scaffold
отдаёт body максимум по ширине и
высоте. Виджет Row внутри body
растягивается на всю ширину: у него
максимальная ширина равна ширине экрана.
Обычный Text
в таком ряду не растягивается сам - он
занимает только ширину строки:
import 'package:flutter/material.dart';
void main() {
runApp(const MaterialApp(home: HomePage()));
}
class HomePage extends StatelessWidget {
const HomePage({super.key});
@override
Widget build(BuildContext context) {
return Scaffold(
body: Row(
children: const [
Text('Short'),
Text('A very long label in the row'),
],
),
);
}
}
Если сумма «естественных» ширин потомков больше
доступной, ряд не сожмёт текст бесконечно -
возникнет переполнение. Чтобы потомок
получил долю ширины, его оборачивают в
Expanded
или задают SizedBox
с width:
Row(
children: const [
Text('Label'),
Expanded(
child: Text('Text uses the remaining row width'),
),
],
)
В body разместите Row на
всю ширину: первый Text
'Name', второй - Expanded
с фразой 'A very long value that must stay inside the right edge'.
Строка переносится внутри своей доли
и не выходит за правый край экрана.