Шаблон кода, когда вы хотите использовать LayoutBuilder Flutter внутри столбца
У меня есть столбец с двумя элементами A и B. A имеет фиксированную высоту, а B должен заполнять остальную часть экрана. В BI хотят принимать решения о компоновке на основе высоты B черезLayoutBuilder()
.
Если я использую Column()
-widget обычно BoxConstraint для B задается как инфинитив. Есть ли хороший образец для этой задачи, который дает конечную высоту для B?
2 ответа
Использовать Mediaquery
Size size = MediaQuery.of(context).size;
на контейнере Bheight: size.height - containerAFixedHeight
Оберните свойLayoutBuilder()
в (или вFlexible
если вы не хотите, чтобы он расширялся) виджет, а затем вы можете использовать ограничение maxHeight LayoutBuilder во время выполнения.
class MyColumnWidget extends StatelessWidget {
const MyColumnWidget({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return Column(
children: [
/// Widget "A":
Container(height: 100, color: Colors.red),
/// Widget "B":
Expanded(
child: LayoutBuilder(builder: (_, ct) {
print(" Constraints(h,w): ${ct.maxHeight}, ${ct.maxWidth}");
return Container(color: Colors.blue);
}),
)
],
);
}
}
Вот тест в браузере Chrome:
Какие печатаетConstraints(h,w): 460, 500
к терминалу. БезExpanded
он печатаетinfinity
для ограничения по высоте.