Flutter悬浮菜单插件hover_menu的使用

365彩票怎么买平局 2025-12-19 18:04:41 阅读: 240

Flutter悬浮菜单插件hover_menu的使用

Hover Menu for Flutter

Flutter中的hover_menu插件用于创建桌面和Web应用程序的悬浮菜单,提供常见的Web菜单体验。

Features

当用户悬停在指定标题小部件上时显示易于使用的悬浮菜单。

当用户停止悬停在菜单或其项上时关闭菜单。

可自定义。

Installation

要在项目中使用此包,请在pubspec.yaml文件中添加hover_menu作为依赖项:

dependencies:

hover_menu: ^1.1.2

然后,在终端中运行flutter packages get。

Usage

首先导入包到你的Dart文件中:

import 'package:hover_menu/hover_menu.dart';

接下来可以在应用中创建一个HoverMenu小部件:

HoverMenu(

title: Text('Menu Title'),

items: [

ListTile(title: Text('Item 1')),

ListTile(title: Text('Item 2')),

ListTile(title: Text('Item 3')),

],

)

还可以为菜单设置自定义宽度:

HoverMenu(

title: Text('Menu Title'),

items: [

ListTile(title: Text('Item 1')),

ListTile(title: Text('Item 2')),

ListTile(title: Text('Item 3')),

],

width: 250,

)

Example

下面是一个完整的示例,演示如何在应用中使用HoverMenu小部件:

import 'package:flutter/material.dart';

import 'package:hover_menu/hover_menu.dart';

void main() {

runApp(MyApp());

}

class MyApp extends StatelessWidget {

@override

Widget build(BuildContext context) {

return MaterialApp(

home: Scaffold(

appBar: AppBar(title: Text('Hover Menu Example')),

body: Center(

child: HoverMenu(

title: InkWell(

onTap: () {},

child: Text('Menu Title'),

),

items: [

InkWell(

onTap: () {

print('Item 1 clicked');

},

child: ListTile(title: Text('Item 1')),

),

InkWell(

onTap: () {

print('Item 2 clicked');

},

child: ListTile(title: Text('Item 2')),

),

InkWell(

onTap: () {

print('Item 3 clicked');

},

child: ListTile(title: Text('Item 3')),

),

],

),

),

),

);

}

}

使用HoverMenuLastItem

如果需要为最后一个菜单项提供下拉选项,并且希望下拉部分与菜单选项的末端对齐并向相反方向延伸,可以使用HoverMenuLastItem类。

HoverMenuLastItem(

title: HoverText("Company"),

items: ...

width: 500,

),

Limitation

不建议在移动应用程序中使用此包,因为标准的Drawer和AppBar提供了更好的用户体验。可以通过条件判断来选择是否使用hover_menu。

bool isDesktopOrWeb() {

if (kIsWeb) {

return true;

}

if (Platform.isWindows || Platform.isMacOS || Platform.isLinux) {

return true;

}

return false;

}

Widget build(BuildContext context) {

return MaterialApp(

home: Scaffold(

appBar: isDesktopOrWeb() ? null : AppBar(title: Text('Conditional Widget Example')),

drawer: isDesktopOrWeb() ? null : MyDrawer(),

body: Center(

child: Column(

mainAxisAlignment: MainAxisAlignment.center,

children: [

if (isDesktopOrWeb()) HoverMenu(

title: Text('Menu Title'),

items: [

ListTile(title: Text('Item 1')),

ListTile(title: Text('Item 2')),

ListTile(title: Text('Item 3')),

],

),

],

),

),

),

);

}

Developer & License

该包由Feras Abdalrahman开发,发布在MIT许可下。

如果您觉得这个包有用,请给仓库加个星⭐。

更多详细信息请参阅官方文档。