Создаем портфолио за 1 месяц
К концу месяца: 4 классных проекта в вашем портфолио! Стоимость: 100$. Подробности...
875 of 1024 menu
◀ ▶

Виджет Overlay

Виджет Overlay держит стопку OverlayEntry поверх текущего маршрута. Состояние слоя берут через of, новые записи добавляют через insert у OverlayState. MaterialApp и CupertinoApp уже вставляют Overlay в дерево.

Синтаксис

Overlay( initialEntries: [ OverlayEntry( builder: (context) => const SizedBox.shrink(), ), ], )

Параметры

ПараметрОписание
initialEntriesСтартовый список OverlayEntry в слое.
clipBehaviorКак обрезать дочерние записи по границе Overlay.

Методы

МетодОписание
ofВозвращает OverlayState из context.

Пример

Давайте вставим плашку через Overlay.of и insert:

import 'package:flutter/material.dart'; void main() { runApp(const MaterialApp(home: OverlayDemo())); } class OverlayDemo extends StatelessWidget { const OverlayDemo({super.key}); @override Widget build(BuildContext context) { return Scaffold( body: Center( child: ElevatedButton( onPressed: () { late OverlayEntry entry; entry = OverlayEntry( builder: (ctx) { return Positioned( top: 80, left: 24, right: 24, child: Material( elevation: 4, child: Padding( padding: const EdgeInsets.all(16), child: Row( children: [ Expanded( child: Text('12345'), ), IconButton( onPressed: () { entry.remove(); }, icon: const Icon(Icons.close), ), ], ), ), ), ); }, ); Overlay.of(context).insert(entry); }, child: const Text('abcde'), ), ), ); } }

На экране кнопка 'abcde'; по нажатию Overlay покажет плашку с текстом '12345'.

Пример

Давайте зададим initialEntries при сборке Overlay:

import 'package:flutter/material.dart'; void main() { runApp( MaterialApp( home: Navigator( onGenerateRoute: (settings) { return MaterialPageRoute<void>( builder: (context) { return Overlay( initialEntries: [ OverlayEntry( builder: (ctx) { return Scaffold( body: Center( child: Text('abcde'), ), ); }, ), ], ); }, ); }, ), ), ); }

На экране сразу виден текст 'abcde' из единственной OverlayEntry.

Смотрите также

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить