Класс OverlayEntry
Класс OverlayEntry хранит builder,
который рисует виджет в слое
Overlay.
Запись вставляют через
insert,
убирают
remove,
перерисовку запускают
markNeedsBuild.
Синтаксис
OverlayEntry(
builder: (BuildContext context) {
return Text('abcde');
},
)
Параметры
| Параметр | Описание |
|---|---|
builder |
Функция, которая строит виджет этого слоя. |
Методы
| Метод | Описание |
|---|---|
markNeedsBuild |
Просит Overlay пересобрать builder записи.
|
remove |
Снимает OverlayEntry со слоя.
|
Пример
Давайте создадим OverlayEntry с текстом:
import 'package:flutter/material.dart';
void main()
{
runApp(const MaterialApp(home: EntryDemo()));
}
class EntryDemo extends StatelessWidget
{
const EntryDemo({super.key});
@override
Widget build(BuildContext context)
{
return Scaffold(
body: Center(
child: ElevatedButton(
onPressed: () {
final entry = OverlayEntry(
builder: (ctx) {
return Center(
child: Text('12345'),
);
},
);
Overlay.of(context).insert(entry);
},
child: const Text('abcde'),
),
),
);
}
}
Кнопка 'abcde' вставит OverlayEntry с текстом '12345'.
Пример
Давайте снимем запись через remove:
import 'package:flutter/material.dart';
void main()
{
runApp(const MaterialApp(home: EntryRemoveDemo()));
}
class EntryRemoveDemo extends StatelessWidget
{
const EntryRemoveDemo({super.key});
@override
Widget build(BuildContext context)
{
return Scaffold(
body: Center(
child: ElevatedButton(
onPressed: () {
late OverlayEntry entry;
entry = OverlayEntry(
builder: (ctx) {
return Center(
child: ElevatedButton(
onPressed: entry.remove,
child: Text('12345'),
),
);
},
);
Overlay.of(context).insert(entry);
},
child: const Text('abcde'),
),
),
);
}
}
Сначала кнопка 'abcde' откроет слой с кнопкой '12345'; remove снимет OverlayEntry.
Смотрите также
-
виджет
Overlay,
слой поверх маршрутов -
класс
OverlayState,
управление спискомOverlayEntry -
виджет
OverlayPortal,
слой из обычного виджета -
класс
OverlayPortalController,
открыть и закрыть портал