hide
Метод hide класса OverlayPortalController
прячет оверлей, который связан с этим контроллером.
Пока слой скрыт, его содержимое не рисуется.
Синтаксис
controller.hide();
Пример
Давайте вызовем hide после show:
import 'package:flutter/material.dart';
void main()
{
runApp(const MaterialApp(home: PortalMethodDemo()));
}
class PortalMethodDemo extends StatefulWidget
{
const PortalMethodDemo({super.key});
@override
State<PortalMethodDemo> createState() => _PortalMethodDemoState();
}
class _PortalMethodDemoState extends State<PortalMethodDemo>
{
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.hide();
},
child: Text('abcde'),
),
),
),
);
}
}
Кнопка 'abcde' вызовет hide; OverlayPortal покажет или спрячет '12345'.
Пример
Давайте вызовем метод два раза подряд:
import 'package:flutter/material.dart';
void main()
{
runApp(const MaterialApp(home: PortalMethodDemo2()));
}
class PortalMethodDemo2 extends StatefulWidget
{
const PortalMethodDemo2({super.key});
@override
State<PortalMethodDemo2> createState() => _PortalMethodDemo2State();
}
class _PortalMethodDemo2State extends State<PortalMethodDemo2>
{
final OverlayPortalController _controller = OverlayPortalController();
@override
Widget build(BuildContext context)
{
return Scaffold(
body: Center(
child: OverlayPortal(
controller: _controller,
overlayChildBuilder: (ctx) {
return Text('abcde');
},
child: ElevatedButton(
onPressed: () {
_controller.hide();
_controller.hide();
},
child: Text('12345'),
),
),
),
);
}
}
Кнопка '12345' дважды вызовет hide; слой вернётся к состоянию до первого нажатия.
Смотрите также
-
виджет
Overlay,
слой поверх маршрутов -
класс
OverlayState,
управление спискомOverlayEntry -
класс
OverlayEntry,
один виджет в слое -
виджет
OverlayPortal,
слой из обычного виджета