Flutter底部弹出菜单插件icon_bottomsheet的使用

Flutter底部弹出菜单插件icon_bottomsheet的使用

icon_bottomsheet 是一个自定义的底部弹出菜单类,其顶部带有动态图标(widget),并且支持多种形状。它使用了从 package:flutter/material.dart 导入的默认底部弹出菜单。IconBottomSheet 类创建了一个透明边框的图标小部件。图标小部件的边距大小由 iconPadding 定义,图标的大小由 iconSize 定义,而图标的形状则由 iconShape 定义。图标的形状可以是 circle(圆形)、square(方形)、circleTop(上半圆)或 circleBottom(下半圆)。以下是不同 iconShape 的图标展示。

不同形状的图标 不同形状的图标 不同形状的图标 不同形状的图标

不同形状的图标 不同形状的图标 不同形状的图标 不同形状的图标

参数

参数名 描述
child 这是在底部弹出菜单中显示的小部件。
iconWidget 显示在底部弹出菜单顶部的小部件。
iconSize 图标小部件的高度/宽度,默认为 50(高度和宽度相同)。
iconPadding 图标小部件周围的透明边框填充,默认为 16。使用 0 当不需要时。
position 帮助将图标小部件定位到左、右或中心,默认为中心。
iconBackgroundColor 定义图标小部件的背景颜色,默认为白色。为了显示无色,使用 Colors.transparent
childBackgroundColor 定义子小部件的背景颜色,默认为白色。

位置

参数名 描述
Position.center 将图标小部件对齐到底部弹出菜单的中心。如果没有传递位置参数,则默认设置为此值。
Position.left 将图标小部件对齐到底部弹出菜单的左侧。
Position.right 将图标小部件对齐到底部弹出菜单的右侧。

图标形状

参数名 描述
IconShape.circle 创建图标小部件的圆形背景。
IconShape.circleTop 创建图标小部件的上半圆背景,下半部分为方形。
IconShape.circleBottom 创建图标小部件的下半圆背景,上半部分为方形。
IconShape.square 创建图标小部件的方形背景。

开始使用

pubspec.yaml 文件中添加 icon_bottomsheet 包,并执行 pub get

dependencies:
  icon_bottomsheet: ^x.x.x

然后,在你的 MaterialApp 中更改画布颜色以使底部弹出菜单具有透明背景。

MaterialApp(
    title: 'Flutter Demo',
    theme: ThemeData(
    canvasColor: Colors.transparent,
    ),
    home: const MyHomePage(title: 'Icon BottomSheet'),
);

接下来,导入 showModalBottomSheetmaterial.dart 并导入 IconBottomSheetpackage:icon_bottomsheet/icon_bottomsheet.dart,并传入上述描述的参数。

showModalBottomSheet<int>(
    context: context,
    builder: (context) {
    return const IconBottomSheet(
        iconWidget: Icon(
        Icons.cancel_outlined,
        color: Colors.white,
        size: 100,
        ),
        iconShape: IconShape.square,
        position: Position.right,
        iconBackgroundColor: Colors.redAccent,
        //childBackgroundColor: Colors.grey,
        iconSize: 120,
        iconPadding: 20,
        child: PaymentFailed(),
    );
    },
);

示例代码

以下是一个完整的示例代码,展示了如何使用 icon_bottomsheet 插件:

import 'package:example/kid.dart';
import 'package:example/payment_failed.dart';
import 'package:example/payment_success.dart';
import 'package:example/success.dart';
import 'package:flutter/material.dart';
import 'package:icon_bottomsheet/icon_bottomsheet.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 MaterialApp(
      title: 'Flutter Demo',
      debugShowCheckedModeBanner: false,
      theme: ThemeData(
        primarySwatch: Colors.blue,
        canvasColor: Colors.transparent,
      ),
      home: const MyHomePage(title: 'Icon BottomSheet'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({Key? key, required this.title}) : super(key: key);

  final String title;

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

class _MyHomePageState extends State<MyHomePage> {
  void _showBottomSheet() {
    showModalBottomSheet<int>(
      context: context,
      builder: (context) {
        return const IconBottomSheet(
          iconWidget: Icon(
            Icons.cancel_outlined,
            color: Colors.redAccent,
            size: 100,
          ),
          position: Position.right,
          iconShape: IconShape.circle,
          iconSize: 120,
          iconPadding: 20,
          child: Success(),
        );
      },
    );
  }

  void _showKidsBottomSheet() {
    showModalBottomSheet<int>(
      context: context,
      builder: (context) {
        return IconBottomSheet(
          iconWidget: Padding(
            padding: const EdgeInsets.all(16.0),
            child: Image.asset('assets/duckling.png'),
          ),
          //iconBackgroundColor: Colors.transparent,
          //childBackgroundColor: Colors.blue,
          iconShape: IconShape.circle,
          iconSize: 120,
          iconPadding: 20,
          child: const Kid(),
        );
      },
    );
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: Colors.white,
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.start,
          children: <Widget>[
            const SizedBox(
              height: 20,
            ),
            ElevatedButton(
              onPressed: _showBottomSheet,
              child: const Text(
                'Show BottomSheet',
              ),
            )
          ],
        ),
      ),
    );
  }
}

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

1 回复

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


当然,以下是如何在Flutter项目中使用icon_bottomsheet插件来实现底部弹出菜单的示例代码。

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

dependencies:
  flutter:
    sdk: flutter
  icon_bottomsheet: ^3.0.1  # 请检查最新版本号

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

接下来,在你的Dart文件中,你可以按照以下方式使用IconBottomSheet

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  void _showBottomSheet() {
    showIconBottomSheet(
      context: context,
      builder: (context) => IconBottomSheet(
        backgroundColor: Colors.white,
        elevation: 8,
        borderRadius: BorderRadius.circular(16),
        items: [
          IconBottomSheetItem(
            icon: Icon(Icons.home),
            title: 'Home',
            onTap: () {
              Navigator.pop(context); // 关闭底部弹出菜单
              // 执行Home相关的操作
              print('Home tapped');
            },
          ),
          IconBottomSheetItem(
            icon: Icon(Icons.settings),
            title: 'Settings',
            onTap: () {
              Navigator.pop(context); // 关闭底部弹出菜单
              // 执行Settings相关的操作
              print('Settings tapped');
            },
          ),
          IconBottomSheetItem(
            icon: Icon(Icons.exit_to_app),
            title: 'Logout',
            onTap: () {
              Navigator.pop(context); // 关闭底部弹出菜单
              // 执行Logout相关的操作
              print('Logout tapped');
            },
          ),
        ],
      ),
    );
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter Demo'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: _showBottomSheet,
          child: Text('Show Bottom Sheet'),
        ),
      ),
    );
  }
}

在这个示例中,我们创建了一个简单的Flutter应用,其中包含一个按钮。点击按钮时,会显示一个底部弹出菜单,菜单项包括“Home”、“Settings”和“Logout”。每个菜单项点击时都会打印相应的信息,并且关闭底部弹出菜单。

showIconBottomSheet函数用于显示底部弹出菜单,而IconBottomSheet组件则定义了菜单的样式和内容。每个菜单项使用IconBottomSheetItem来表示,包括图标、标题和点击事件处理函数。

你可以根据需要自定义菜单项的图标、标题和点击事件处理逻辑。

回到顶部