Метод copyWith
Метод copyWith класса
MediaQueryData метод copyWith MediaQueryData.
Каждый параметр необязателен: если его не передали,
останется значение из исходного объекта.
Результат кладут в виджет
MediaQuery.
Параметры textScaler и устаревший textScaleFactor
нельзя задавать одновременно.
Синтаксис
mediaQueryData.copyWith(
size: Size(400, 800),
padding: EdgeInsets.zero,
)
Параметры
| Параметр | Описание |
|---|---|
size |
Новый размер области рисования. |
devicePixelRatio |
Соотношение физических и логических пикселей. |
textScaler |
Масштаб текста для поддерева. |
platformBrightness |
Яркость платформы: Brightness.light или Brightness.dark.
|
padding |
Отступы под системные панели и вырез. |
viewPadding |
Постоянные отступы экрана без учёта клавиатуры. |
viewInsets |
Перекрытие клавиатурой и оверлеями. |
systemGestureInsets |
Зоны системных жестов по краям экрана. |
highContrast |
Включён ли режим высокой контрастности. |
disableAnimations |
Нужно ли отключить анимации из настроек системы. |
Пример
Давайте увеличим масштаб текста для части экрана:
import 'package:flutter/material.dart';
void main()
{
runApp(
MaterialApp(
home: Scaffold(
body: Builder(
builder: (context) {
var base = MediaQuery.of(context);
return MediaQuery(
data: base.copyWith(
textScaler: TextScaler.linear(2),
),
child: const Center(
child: Text('abcde'),
),
);
},
),
),
),
);
}
На экране текст 'abcde' станет в два раза крупнее системного.
Пример
Давайте подменим размер для теста адаптивной вёрстки:
import 'package:flutter/material.dart';
class WidthProbe extends StatelessWidget
{
const WidthProbe({super.key});
@override
Widget build(BuildContext context)
{
var res = MediaQuery.sizeOf(context).width;
return Text('$res');
}
}
void main()
{
runApp(
MaterialApp(
home: Scaffold(
body: Builder(
builder: (context) {
var base = MediaQuery.of(context);
return MediaQuery(
data: base.copyWith(
size: const Size(320, 640),
),
child: const Center(
child: WidthProbe(),
),
);
},
),
),
),
);
}
На экране по центру появится число 320, хотя физический экран может быть шире.
Смотрите также
-
класс
MediaQueryData,
которыйcopyWithкопирует -
виджет
MediaQuery,
куда кладут результатcopyWith -
метод
of,
который даёт исходныйMediaQueryData -
метод
textScalerOf,
который читает textScaler послеcopyWith