Метод removeViewInsets
Метод removeViewInsets виджета
MediaQuery он оборачивает child и обнуляет
viewInsets по флагам
removeLeft, removeTop, removeRight и removeBottom.
Поддерево перестаёт сдвигаться, когда открыта клавиатура.
Читать реальную врезку по-прежнему можно через
viewInsetsOf
выше по дереву.
Синтаксис
MediaQuery.removeViewInsets(
context: context,
removeBottom: true,
child: child,
)
Параметры
| Параметр | Описание |
|---|---|
context |
BuildContext для чтения текущего MediaQueryData.
|
removeLeft |
Обнулить левый viewInset. По умолчанию false. |
removeTop |
Обнулить верхний viewInset. По умолчанию false. |
removeRight |
Обнулить правый viewInset. По умолчанию false. |
removeBottom |
Обнулить нижний viewInset. По умолчанию false. |
child |
Дочерний виджет с изменёнными viewInsets. |
Пример
Давайте зафиксируем нижнюю панель, когда открыта клавиатура:
import 'package:flutter/material.dart';
void main()
{
runApp(
MaterialApp(
home: Scaffold(
body: Builder(
builder: (context) {
return MediaQuery.removeViewInsets(
context: context,
removeBottom: true,
child: Column(
children: [
const Expanded(
child: Center(
child: TextField(
decoration: InputDecoration(
hintText: 'abcde',
),
),
),
),
Container(
height: 56,
color: Colors.grey.shade300,
alignment: Alignment.center,
child: const Text('12345'),
),
],
),
);
},
),
),
),
);
}
На экране серая панель с текстом '12345' останется у нижнего края, даже если клавиатура открыта.
Пример
Давайте проверим, что внутри removeViewInsets нижний inset равен нулю:
import 'package:flutter/material.dart';
class InsetProbe extends StatelessWidget
{
const InsetProbe({super.key});
@override
Widget build(BuildContext context)
{
var res = MediaQuery.viewInsetsOf(context).bottom;
return Text('$res');
}
}
void main()
{
runApp(
MaterialApp(
home: Scaffold(
body: Builder(
builder: (context) {
return MediaQuery.removeViewInsets(
context: context,
removeBottom: true,
child: const Center(
child: InsetProbe(),
),
);
},
),
),
),
);
}
На экране по центру будет 0, даже если клавиатура перекрывает экран снаружи обёртки.
Смотрите также
-
метод
viewInsetsOf,
который читает viewInsets без обнуления -
метод
removeViewPadding,
который обнуляет viewPadding -
метод
removePadding,
который обнуляет padding -
класс
MediaQueryData,
где хранится полеviewInsets