Flutter网页悬停菜单插件web_hover_menu的使用

发布于 1周前 作者 zlyuanteng 来自 Flutter

Flutter网页悬停菜单插件web_hover_menu的使用

web_hover_menu 是一个用于Flutter Web项目的插件,它提供了一个带有动画效果的网站菜单,并允许自定义菜单和子菜单的设计以及对齐方式。以下是该插件的详细使用说明及示例代码。

关键特性

  • 不同类型的动画效果(左到右、右到左、上到下、下到上)
  • 鼠标悬停效果

现有动画类型

  • 左到右 (leftToRight)
  • 右到左 (rightToLeft)
  • 上到下 (topToBottom)
  • 下到上 (bottomToTop)

示例预览

GIF GIF

使用方法

1. 导入插件

首先,在你的项目文件中导入 web_hover_menu 插件:

import 'package:web_hover_menu/web_hover_menu.dart';

2. 添加基本形式的组件

以下是一个最基础的使用示例:

HoverAnimationWidget(
  headerTiles: headerModelList,
  headerBoxDecoration: const BoxDecoration(
      borderRadius: BorderRadius.all(
        Radius.circular(5.0),
      ),
      color: Colors.black),
  headerTextColor: Colors.white,
  headerTextSize: 15.0,
  menuTiles: menuModelList,
  menuBoxDecoration: const BoxDecoration(
      borderRadius: BorderRadius.all(
        Radius.circular(7.0),
      ),
      color: Colors.black38),
  menuTextColor: Colors.white,
  animationType: AnimationType.rightToLeft,
  menuTextSize: 16.0,
  headerPosition: HeaderPosition.bottomRight,
);

3. 属性说明

属性 必需/可选 描述
headerTiles 数组 必需 提供头部菜单列表
menuTiles 数组 必需 提供悬停菜单列表
headerPosition 自定义 必需 定义菜单的位置
backgroundWidget Widget 可选 提供背景部件
headerBoxDecoration 样式 可选 头部菜单样式
headerTextColor 颜色 可选 头部文本颜色
headerTextSize double 可选 头部文本大小
menuBoxDecoration 样式 可选 悬停菜单样式
menuTextColor 颜色 可选 悬停菜单文本颜色
animationType 自定义 可选 动画类型
menuTextSize double 可选 悬停菜单文本大小

4. 完整示例代码

以下是一个完整的示例代码,展示如何在Flutter应用中使用 web_hover_menu

import 'package:flutter/material.dart';
import 'package:web_hover_menu/web_hover_menu.dart';

void main() => runApp(const MyApp());

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  [@override](/user/override)
  Widget build(BuildContext context) {
    return const MaterialApp(
      title: 'Web animated hover menu',
      home: MyHomePage(),
      debugShowCheckedModeBanner: false,
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({Key? key}) : super(key: key);

  [@override](/user/override)
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  List<Menu> headerModelList = [
    Menu(id: 1, name: 'Home'),
    Menu(id: 2, name: 'Profile'),
    Menu(id: 3, name: 'Help'),
    Menu(id: 4, name: 'Contact Us'),
    Menu(id: 5, name: 'About Us')
  ];

  List<SubMenu> menuModelList = [
    SubMenu(id: 1, name: 'Declarative style'),
    SubMenu(id: 2, name: 'Premade common'),
    SubMenu(id: 3, name: 'Stateful hot reload'),
    SubMenu(id: 4, name: 'Native performance'),
    SubMenu(id: 5, name: 'Great community')
  ];

  [@override](/user/override)
  Widget build(BuildContext context) {
    return AnimatedHoverMenu(
      headerPosition: HeaderPosition.bottomRight,
      headerTiles: headerModelList,
      menuTiles: menuModelList,
      backgroundWidget: Container(
        decoration: BoxDecoration(
          gradient: LinearGradient(
            begin: Alignment.topCenter,
            end: Alignment.bottomCenter,
            colors: [
              Color(0xfffff8f9),
              Color(0xfffef7f8),
              Color(0xffecf0fa),
            ],
          ),
        ),
      ),
      headerBoxDecoration: const BoxDecoration(
          borderRadius: BorderRadius.all(
            Radius.circular(5.0),
          ),
          color: Color(0xff996617)),
      headerTextColor: Colors.white,
      headerTextSize: 15.0,
      menuBoxDecoration: BoxDecoration(
        border: Border.fromBorderSide(
          BorderSide(color: Color(0xff996617), width: 2),
        ),
      ),
      menuTextColor: Color(0xff996617),
      animationType: AnimationType.springAcrossAxis,
      menuTextSize: 16.0,
    );
  }
}

更多关于Flutter网页悬停菜单插件web_hover_menu的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter网页悬停菜单插件web_hover_menu的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,下面是一个关于如何在Flutter Web应用中使用web_hover_menu插件的示例代码。这个插件允许你在网页上实现悬停菜单效果。

首先,你需要在你的pubspec.yaml文件中添加这个插件:

dependencies:
  flutter:
    sdk: flutter
  web_hover_menu: ^最新版本号  # 请替换为实际可用的最新版本号

然后,运行flutter pub get来安装这个插件。

接下来,在你的Flutter项目中,你可以使用以下代码来创建一个悬停菜单。以下是一个完整的示例,包括创建一个基本的Flutter应用并在其中实现悬停菜单功能。

import 'package:flutter/material.dart';
import 'package:web_hover_menu/web_hover_menu.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Flutter Web Hover Menu Example'),
        ),
        body: Center(
          child: HoverMenuExample(),
        ),
      ),
    );
  }
}

class HoverMenuExample extends StatefulWidget {
  @override
  _HoverMenuExampleState createState() => _HoverMenuExampleState();
}

class _HoverMenuExampleState extends State<HoverMenuExample> {
  final List<String> menuItems = ['Item 1', 'Item 2', 'Item 3'];

  @override
  Widget build(BuildContext context) {
    return HoverMenu(
      trigger: Text(
        'Hover over me',
        style: TextStyle(fontSize: 24, color: Colors.blue),
      ),
      menu: Menu(
        menuItems: menuItems.map((item) => MenuItem(
          text: item,
          onClick: () {
            ScaffoldMessenger.of(context).showSnackBar(
              SnackBar(content: Text('Clicked on: $item')),
            );
          },
        )).toList(),
        menuDirection: MenuDirection.bottom,  // 可以选择 left, right, top, bottom
        menuElevation: 8.0,
        menuBackgroundColor: Colors.white,
        menuWidth: 200.0,
        menuRadius: BorderRadius.circular(10.0),
        menuPadding: EdgeInsets.all(16.0),
        menuShadow: [
          BoxShadow(
            color: Colors.black.withOpacity(0.2),
            spreadRadius: 5,
            blurRadius: 7,
            offset: Offset(0, 3), // changes position of shadow
          ),
        ],
        menuTextStyle: TextStyle(color: Colors.black),
      ),
    );
  }
}

在这个示例中,我们创建了一个简单的Flutter应用,并在其中添加了一个HoverMenu。这个HoverMenu包含一个触发文本“Hover over me”,当用户将鼠标悬停在这个文本上时,会显示一个包含三个菜单项的菜单。点击菜单项时,会显示一个Snackbar通知用户点击了哪个菜单项。

注意,这个插件仅在Flutter Web上有效,因此在运行这个示例之前,请确保你正在使用Flutter Web的编译目标。

你可以根据需要进一步自定义菜单的样式和行为,例如修改菜单项的图标、调整菜单动画效果等。web_hover_menu插件提供了丰富的API来满足这些需求。

回到顶部