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'),
);

接下来,导入 showModalBottomSheet 从 material.dart 并导入 IconBottomSheet 从 package: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来表示,包括图标、标题和点击事件处理函数。

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

回到顶部