Класс OverlayPortalController
Класс OverlayPortalController передают в
OverlayPortal.
Методы
show,
hide
и
toggle
меняют видимость overlayChildBuilder.
Синтаксис
final OverlayPortalController controller =
OverlayPortalController();
controller.show();
Методы
| Метод | Описание |
|---|---|
hide |
Прячет слой, связанный с контроллером. |
show |
Показывает слой, связанный с контроллером. |
toggle |
Показывает слой, если он скрыт, и прячет, если он виден. |
Пример
Давайте переключим слой через toggle:
import 'package:flutter/material.dart';
void main()
{
runApp(const MaterialApp(home: CtrlDemo()));
}
class CtrlDemo extends StatefulWidget
{
const CtrlDemo({super.key});
@override
State<CtrlDemo> createState() => _CtrlDemoState();
}
class _CtrlDemoState extends State<CtrlDemo>
{
final OverlayPortalController _controller =
OverlayPortalController();
@override
Widget build(BuildContext context)
{
return Scaffold(
body: Center(
child: OverlayPortal(
controller: _controller,
overlayChildBuilder: (ctx) {
return Text('12345');
},
child: ElevatedButton(
onPressed: _controller.toggle,
child: Text('abcde'),
),
),
),
);
}
}
Кнопка 'abcde' вызывает toggle; в слое появится или исчезнет '12345'.
Пример
Давайте откроем и закроем show и hide:
import 'package:flutter/material.dart';
void main()
{
runApp(const MaterialApp(home: CtrlShowHideDemo()));
}
class CtrlShowHideDemo extends StatefulWidget
{
const CtrlShowHideDemo({super.key});
@override
State<CtrlShowHideDemo> createState() => _CtrlShowHideDemoState();
}
class _CtrlShowHideDemoState extends State<CtrlShowHideDemo>
{
final OverlayPortalController _controller =
OverlayPortalController();
@override
Widget build(BuildContext context)
{
return Scaffold(
body: Center(
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
OverlayPortal(
controller: _controller,
overlayChildBuilder: (ctx) {
return Text('abcde');
},
child: const SizedBox.shrink(),
),
ElevatedButton(
onPressed: _controller.show,
child: Text('abcde'),
),
ElevatedButton(
onPressed: _controller.hide,
child: Text('12345'),
),
],
),
),
);
}
}
Кнопка 'abcde' откроет слой с текстом 'abcde'; '12345' вызовет hide.
Смотрите также
-
виджет
Overlay,
слой поверх маршрутов -
класс
OverlayState,
управление спискомOverlayEntry -
класс
OverlayEntry,
один виджет в слое -
виджет
OverlayPortal,
слой из обычного виджета