Flutter轨道菜单插件orbitmenu的使用

Flutter轨道菜单插件orbitmenu的使用

描述

OrbitMenu 是一个为 Flutter 应用程序创建动态圆形菜单的多功能插件,支持交互式动画。现在它新增了弹跳和旋转两种动画风格,增强了用户体验。

可以实现的功能

  • 动态圆形菜单,中央有一个大圆圈。
  • 周围有多个小圆圈作为按钮。
  • 完全自定义颜色、大小和行为。
  • 调整小圆圈与中心圆的距离。
  • 中心圆带有可定制的圆形按钮。
  • 三种动画风格:弹跳、旋转、轨道。
  • 完全自定义颜色、大小和行为。
  • 使用布尔值切换动画。
  • 添加图片到项目中。

安装

要在您的 Flutter 项目中使用 OrbitMenu,请在 pubspec.yaml 文件中添加以下依赖项:

dependencies:
  orbitmenu: ^latest_version

然后运行 flutter pub get 来安装该包。

使用方法

要实现圆形菜单,请按照以下步骤操作:

  1. 导入并使用 AnimatedOrbitMenu 和相关配置类:

    import 'package:orbitmenu/animated_orbit_menu.dart';
    import 'package:orbitmenu/orbit_menu_config.dart';
    import 'package:orbitmenu/orbit_menu_animation_type.dart';
    
  2. 使用 AnimatedOrbitMenu 创建菜单:

    AnimatedOrbitMenu(
      animate: true,
      config: OrbitMenuConfig(
        animationDuration: const Duration(seconds: 1),
        animationType: OrbitMenuAnimationType.bouncing,
        menuPositionX: widthSize / 2,
        menuPositiony: heightSize / 2,
        menuColor: const Color.fromARGB(255, 1, 1, 1),
        radius: 100,
        menuItems: itemList,
        itemSize: 100,
        borderCentralMenu: Border.all(color: Colors.red, width: 5),
        itemOffsetPercentage: 1,
      ),
    );
    
  3. 添加自定义控件 现在,您可以将自定义控件添加到围绕父圆旋转的子元素列表中。请确保在配置中声明尺寸(itemSize),以便保持元素与父圆同步。您的控件将嵌套在一个父容器中。

    AnimatedOrbitMenu(
      animate: true,
      config: OrbitMenuConfig(
        animationDuration: Duration(seconds: 5),
        animationType: OrbitMenuAnimationType.rotating,
        menuPositionx: widthSize / 2,
        menuPositiony: heightSize / 2,
        menuColor: Colors.deepPurple,
        radius: 100,
        menuItems: itemList,
        itemSize: 50,
        titleStyle: TextStyle(color: Colors.white),
        itemOffsetPercentage: 0.5,
        myWidget: Container(color: Colors.red,)
      )
    );
    

示例

下面是一个示例代码,展示了如何使用 OrbitMenu 插件创建一个圆形菜单:

import 'package:flutter/material.dart';
import 'package:orbitmenu/animated_orbit_menu.dart';
import 'package:orbitmenu/item.dart';
import 'package:orbitmenu/orbit_menu_config.dart';
import 'package:orbitmenu/orbit_menu_animation_type.dart';

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

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  // This widget is the root of your application.
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
        useMaterial3: true,
      ),
      home: const Scaffold(
        body: Menu(),
      ),
    );
  }
}

class Menu extends StatelessWidget {
  const Menu({super.key});

  /// Build the widget with the animation
  [@override](/user/override)
  Widget build(BuildContext context) {
    final heightSize = MediaQuery.of(context).size.height;
    final widthSize = MediaQuery.of(context).size.width;
    int numberOfItems = 5;
    List<Item> itemList = List.generate(
        numberOfItems,
        (i) =&gt; Item(
            title: (i + 1).toString(),
            onPressed: () {
              print('touch $i');
            },
            image: 'assets/images/${i+}.png'));

    return AnimatedOrbitMenu(
      animate: true,
      config: OrbitMenuConfig(
          animationDuration: const Duration(seconds: 1),
          animationType: OrbitMenuAnimationType.bouncing,
          menuPositionX: widthSize / 2,
          menuPositionY: heightSize / 2,
          menuColor: const Color.fromARGB(255, 1, 5, 5),
          radius: 100,
          menuItems: itemList,
          itemSize: 100,
          borderCentralMenu: Border.all(color: Colors.red, width: 5),
          itemOffsetPercentage: 1,),
    );
  }
}

更多关于Flutter轨道菜单插件orbitmenu的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

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


当然,下面是一个关于如何在Flutter项目中使用orbitmenu插件的示例代码。orbitmenu是一个用于创建轨道菜单(Orbit Menu)的插件,通常用于显示多个选项,用户可以通过手势或点击来选择。

首先,确保你已经在你的pubspec.yaml文件中添加了orbitmenu依赖:

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

然后运行flutter pub get来安装依赖。

接下来,你可以在你的Flutter应用中实现轨道菜单。以下是一个完整的示例代码:

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

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

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

class OrbitMenuExample extends StatefulWidget {
  @override
  _OrbitMenuExampleState createState() => _OrbitMenuExampleState();
}

class _OrbitMenuExampleState extends State<OrbitMenuExample> {
  late OrbitMenuController orbitMenuController;

  @override
  void initState() {
    super.initState();
    orbitMenuController = OrbitMenuController();
  }

  @override
  Widget build(BuildContext context) {
    return Stack(
      children: [
        // Trigger button for opening the orbit menu
        Positioned(
          bottom: 50,
          right: 50,
          child: ElevatedButton(
            onPressed: () {
              orbitMenuController.toggleMenu();
            },
            child: Text('Open Menu'),
          ),
        ),
        // OrbitMenu widget
        OrbitMenu(
          controller: orbitMenuController,
          items: [
            OrbitMenuItem(
              icon: Icons.home,
              label: 'Home',
              onTap: () {
                print('Home tapped');
                orbitMenuController.closeMenu();
              },
            ),
            OrbitMenuItem(
              icon: Icons.search,
              label: 'Search',
              onTap: () {
                print('Search tapped');
                orbitMenuController.closeMenu();
              },
            ),
            OrbitMenuItem(
              icon: Icons.settings,
              label: 'Settings',
              onTap: () {
                print('Settings tapped');
                orbitMenuController.closeMenu();
              },
            ),
          ],
          menuRadius: 150.0,
          menuAngle: 30.0,
          itemSpacing: 20.0,
          backgroundColor: Colors.white,
          elevation: 8.0,
          shape: RoundedRectangleBorder(
            borderRadius: BorderRadius.circular(16.0),
          ),
        ),
      ],
    );
  }
}

代码解释

  1. 依赖添加:在pubspec.yaml中添加orbitmenu依赖。
  2. 主应用:创建一个MyApp类,它包含一个Scaffold,并在body中使用Center组件居中显示OrbitMenuExample
  3. OrbitMenuExample:这是一个StatefulWidget,它包含一个OrbitMenuController用于控制轨道菜单的打开和关闭。
  4. 触发按钮:使用ElevatedButton作为触发按钮,点击按钮时调用orbitMenuController.toggleMenu()方法。
  5. OrbitMenu:配置轨道菜单的属性,包括菜单项、半径、角度、间距、背景颜色、阴影和形状等。
  6. OrbitMenuItem:每个菜单项包含图标、标签和点击事件处理函数。

运行这段代码后,你应该会在屏幕上看到一个按钮,点击按钮会打开轨道菜单,点击菜单项会打印相应的信息并关闭菜单。

请注意,实际使用时,你可能需要根据需求调整轨道菜单的样式和布局。此外,请确保orbitmenu插件的版本与你的Flutter SDK版本兼容。

回到顶部