Виджет OrientationBuilder
Виджет OrientationBuilder вызывает функцию
builder при каждой перестройке.
Второй аргумент функции - значение
Orientation
из ближайшего
MediaQuery.
По нему удобно выбирать ряд или колонку.
Синтаксис
OrientationBuilder(
builder: (context, orientation) {
return child;
},
)
Параметры
| Параметр | Описание |
|---|---|
builder |
Функция, которая получает context и
Orientation
и возвращает дочерний виджет.
|
Пример
Давайте поставим два текста в ряд в альбоме и в колонку в портрете:
import 'package:flutter/material.dart';
void main()
{
runApp(
MaterialApp(
home: Scaffold(
body: OrientationBuilder(
builder: (context, orientation) {
if (orientation == Orientation.landscape) {
return Row(
mainAxisAlignment: MainAxisAlignment.center,
children: const [
Text('abcde'),
Text('12345'),
],
);
}
return Column(
mainAxisAlignment: MainAxisAlignment.center,
children: const [
Text('abcde'),
Text('12345'),
],
);
},
),
),
),
);
}
На экране в портрете тексты встанут друг под другом, в альбоме - в одну строку.
Пример
Давайте покажем текущую ориентацию текстом:
import 'package:flutter/material.dart';
void main()
{
runApp(
MaterialApp(
home: Scaffold(
body: OrientationBuilder(
builder: (context, orientation) {
return Center(
child: Text('$orientation'),
);
},
),
),
),
);
}
На экране по центру появится строка с именем ориентации.
Смотрите также
-
перечисление
Orientation,
которое различает портрет и альбом -
метод
orientationOf,
который читает ориентацию безOrientationBuilder -
виджет
MediaQuery,
который хранит данные экрана для builder -
виджет
SafeArea,
который учитывает вырез при любой ориентации