Flutter弹出菜单插件easy_popover的使用

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

Flutter弹出菜单插件easy_popover的使用

easy_popover 是一个为Flutter应用程序提供的可定制的弹出菜单小部件。它允许开发者显示与特定小部件相关的上下文内容,并具有多种对齐方式、动画和样式配置选项。

主要功能

  • 自定义弹出菜单相对于触发小部件的对齐方式。
  • 可选的指向触发小部件的箭头。
  • 可配置的尺寸、圆角半径、阴影和背景颜色。
  • 显示和隐藏弹出菜单时的动画效果。
  • 支持点击弹出菜单外区域关闭弹出菜单。
  • 打开弹出菜单时支持全屏滚动能力。

安装步骤

在您的项目中添加 easy_popover 插件,执行以下命令:

flutter pub add easy_popover

使用示例

基本使用方法

为了使用 Popover 小部件,需要将应用包裹在 PopoverOverlay 中。下面是一个完整的示例代码:

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

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

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      title: 'Easy Popover Example',
      home: PopoverOverlay(
        child: const PopoverExampleScreen(),
      ),
    );
  }
}

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('Easy Popover Example'),
        centerTitle: true,
      ),
      body: Center(
        child: Padding(
          padding: const EdgeInsets.all(16.0),
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              // Basic IconButton Popover
              Popover(
                context,
                action: IconButton(
                  icon: const Icon(Icons.more_vert_rounded),
                  onPressed: () {},
                ),
                content: const PopoverContent(),
              ),
              const SizedBox(height: 20),
              // Basic Popover with Button
              Popover(
                context,
                action: ElevatedButton(
                  onPressed: () {},
                  child: const Text('Open Popover'),
                ),
                content: const PopoverContent(),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Container(
      width: 200,
      padding: const EdgeInsets.all(16.0),
      decoration: BoxDecoration(
        color: Colors.white,
        borderRadius: BorderRadius.circular(8.0),
        boxShadow: [
          BoxShadow(
            color: Colors.black.withOpacity(0.2),
            blurRadius: 4.0,
          ),
        ],
      ),
      child: Column(
        mainAxisSize: MainAxisSize.min,
        crossAxisAlignment: CrossAxisAlignment.start,
        children: [
          Text(
            'What is Lorem Ipsum?',
            style: Theme.of(context).textTheme.subtitle1,
          ),
          const SizedBox(height: 8),
          Text(
            'Lorem Ipsum is simply dummy text of the printing and typesetting industry.',
            style: Theme.of(context).textTheme.bodyText2,
          ),
        ],
      ),
    );
  }
}

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

1 回复

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


当然,下面是一个关于如何在Flutter中使用easy_popover插件来实现弹出菜单的示例代码。easy_popover是一个流行的Flutter插件,用于创建类似于iOS的弹出菜单。

首先,你需要在pubspec.yaml文件中添加easy_popover依赖:

dependencies:
  flutter:
    sdk: flutter
  easy_popover: ^x.y.z  # 请将x.y.z替换为实际的最新版本号

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

接下来,在你的Flutter项目中,你可以按照以下方式使用easy_popover

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

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

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

class MyWidget extends StatefulWidget {
  @override
  _MyWidgetState createState() => _MyWidgetState();
}

class _MyWidgetState extends State<MyWidget> {
  @override
  Widget build(BuildContext context) {
    return Column(
      mainAxisAlignment: MainAxisAlignment.center,
      children: <Widget>[
        TextButton(
          onPressed: () => _showPopover(context),
          child: Text('Show Popover'),
        ),
      ],
    );
  }

  void _showPopover(BuildContext context) {
    Popover.showPopover(
      context: context,
      popoverBuilder: (context) {
        return Material(
          elevation: 4.0,
          child: Container(
            height: 200,
            width: 200,
            color: Colors.white,
            child: Column(
              mainAxisAlignment: MainAxisAlignment.center,
              children: <Widget>[
                Text('Popover Content'),
                SizedBox(height: 20),
                ElevatedButton(
                  onPressed: () {
                    Popover.dismissPopover(context);
                  },
                  child: Text('Close'),
                ),
              ],
            ),
          ),
        );
      },
      anchorWidget: findAncestorWidgetOfType<TextButton>(context)!,
      popoverOffset: Offset(0, 100),  // 偏移量,可以根据需要调整
      popoverConstraints: BoxConstraints(
        minWidth: 100,
        maxWidth: 300,
        minHeight: 100,
        maxHeight: 400,
      ),
      backgroundBlur: 5.0,  // 背景模糊程度,可以为0禁用模糊
      borderRadius: BorderRadius.circular(10.0),  // 圆角
    );
  }
}

在上面的代码中:

  1. 我们首先定义了一个按钮TextButton,当点击该按钮时,会调用_showPopover方法来显示弹出菜单。
  2. _showPopover方法使用Popover.showPopover来显示弹出菜单。popoverBuilder是一个构建弹出菜单内容的函数,这里我们简单地返回了一个包含文本的Container
  3. anchorWidget指定了弹出菜单相对于哪个控件显示。这里我们使用findAncestorWidgetOfType<TextButton>(context)!来找到点击的按钮。
  4. popoverOffset用于调整弹出菜单的位置。
  5. popoverConstraints用于限制弹出菜单的大小。
  6. backgroundBlurborderRadius分别用于设置背景模糊程度和圆角。

这个示例展示了如何使用easy_popover插件在Flutter应用中实现一个简单的弹出菜单。你可以根据实际需求进一步定制弹出菜单的内容和样式。

回到顶部