Функция showMenu
Функция showMenu рисует
PopupMenuItem
под курсором или кнопкой.
Контекст - context,
прямоугольник - position,
пункты - items.
Возвращает выбранное value.
Синтаксис
showMenu(
context: context,
position: RelativeRect.fromLTRB(100, 200, 100, 0),
items: [
PopupMenuItem(value: 1, child: Text('abcde')),
],
)
Параметры
| Параметр | Описание |
|---|---|
context |
Контекст overlay. |
position |
Где привязать меню на экране. |
items |
Список PopupMenuEntry.
|
Пример
Давайте откроем меню по долгому нажатию:
import 'package:flutter/material.dart';
void main()
{
runApp(const MaterialApp(home: MenuPage()));
}
class MenuPage extends StatelessWidget
{
const MenuPage({super.key});
@override
Widget build(BuildContext context)
{
return Scaffold(
body: Center(
child: GestureDetector(
onLongPress: () {
final box = context.findRenderObject() as RenderBox;
final pos = box.localToGlobal(Offset.zero);
showMenu(
context: context,
position: RelativeRect.fromLTRB(pos.dx, pos.dy, pos.dx, pos.dy),
items: [
PopupMenuItem(value: 'a', child: Text('abcde')),
],
);
},
child: Text('12345'),
),
),
);
}
}
Долгое нажатие откроет пункт 'abcde'.
Пример
Давайте откроем меню из IconButton:
import 'package:flutter/material.dart';
void main()
{
runApp(const MaterialApp(home: MenuPage2()));
}
class MenuPage2 extends StatelessWidget
{
const MenuPage2({super.key});
@override
Widget build(BuildContext context)
{
return Scaffold(
appBar: AppBar(
actions: [
IconButton(
onPressed: () {
showMenu(
context: context,
position: RelativeRect.fill,
items: [
PopupMenuItem(child: Text('abcde')),
],
);
},
icon: Icon(Icons.more_vert),
),
],
),
);
}
}
Три точки в AppBar откроют всплывающее меню.
Смотрите также
-
виджет
PopupMenuButton,
кнопка с готовым меню -
виджет
MenuAnchor,
менюMaterial3 -
виджет
PopupMenuItem,
один пункт меню -
виджет
PopupMenuDivider,
разделитель в меню