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

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

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

简介

sweetsheet 是一个用于Flutter应用的底部弹出菜单插件,能够快速、轻松地显示美观的底部确认对话框。它提供了多种预定义样式和自定义选项,以增强用户体验。

示例图片 示例图片

开始使用

添加依赖

pubspec.yaml 文件中添加 sweetsheet 依赖:

dependencies:
  sweetsheet: ^0.3.1

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

导入包

在你的Dart文件中导入 sweetsheet 包:

import 'package:sweetsheet/sweetsheet.dart';

创建实例

创建 SweetSheet 类的实例:

final SweetSheet _sweetSheet = SweetSheet();

显示底部弹出菜单

调用 show() 方法来显示底部弹出菜单:

_sweetSheet.show(
    context: context,
    title: Text("Attention"),
    description: Text('Your app is not connected to internet actually, please turn on Wifi/Celullar data.'),
    color: SweetSheetColor.WARNING,
    icon: Icons.portable_wifi_off,
    positive: SweetSheetAction(
      onPressed: () {
        Navigator.of(context).pop();
      },
      title: 'OPEN SETTING',
      icon: Icons.open_in_new,
    ),
    negative: SweetSheetAction(
      onPressed: () {
        Navigator.of(context).pop();
      },
      title: 'CANCEL',
    ),
);

自定义颜色

通过创建 CustomSheetColor 实例来自定义颜色:

_sweetSheet.show(
    context: context,
    description: Text(
      'Place your order. Please confirm the placement of your order : Iphone X 128GB',
      style: TextStyle(color: Color(0xff2D3748)),
    ),
    color: CustomSheetColor(
      main: Colors.white,
      accent: Color(0xff5A67D8),
      icon: Color(0xff5A67D8),
    ),
    icon: Icons.local_shipping,
    positive: SweetSheetAction(
      onPressed: () {
        Navigator.of(context).pop();
      },
      title: 'CONTINUE',
    ),
    negative: SweetSheetAction(
      onPressed: () {
        Navigator.of(context).pop();
      },
      title: 'CANCEL',
    ),
);

完整示例代码

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'SweetSheet',
      theme: ThemeData(
        brightness: Brightness.dark,
        primarySwatch: Colors.blue,
      ),
      home: HomePage(title: 'SweetSheet'),
    );
  }
}

class HomePage extends StatefulWidget {
  final String title;

  HomePage({required this.title});

  @override
  _HomePageState createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
  final SweetSheet _sweetSheet = SweetSheet();

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Container(
        padding: const EdgeInsets.all(16.0),
        child: ListView(
          children: <Widget>[
            LargeButton(
              context: context,
              text: 'Success sheet',
              onClick: () {
                _sweetSheet.show(
                  context: context,
                  title: Text("Lorem Ipsum"),
                  description: Text(
                      "Lorem ipsum dolor sit amet, consectetur adipiscing elit. no you condimentum finibus ut ut lorem. Ut pellentesque mauris ut arcu rutrum, at tincidunt arcu tincidunt"),
                  color: SweetSheetColor.SUCCESS,
                  positive: SweetSheetAction(
                    onPressed: () {
                      Navigator.of(context).pop();
                    },
                    title: 'CANCEL',
                  ),
                );
              },
            ),
            LargeButton(
              context: context,
              text: 'Danger sheet with icon not dismissible',
              onClick: () {
                _sweetSheet.show(
                  isDismissible: false,
                  context: context,
                  title: Text("Delete this post?"),
                  description: Text("This action will permanently delete this post."),
                  color: SweetSheetColor.DANGER,
                  icon: Icons.delete,
                  positive: SweetSheetAction(
                    onPressed: () {
                      Navigator.of(context).pop();
                    },
                    title: 'DELETE',
                  ),
                  negative: SweetSheetAction(
                    onPressed: () {
                      Navigator.of(context).pop();
                    },
                    title: 'CANCEL',
                  ),
                );
              },
            ),
            // 其他按钮类似...
          ],
        ),
      ),
    );
  }
}

class LargeButton extends StatelessWidget {
  final BuildContext context;
  final String text;
  final VoidCallback onClick;

  const LargeButton({
    Key? key,
    required this.context,
    required this.text,
    required this.onClick,
  }) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Container(
      padding: const EdgeInsets.only(bottom: 8.0),
      child: ElevatedButton(
        style: ElevatedButton.styleFrom(primary: Colors.black45),
        onPressed: onClick,
        child: Padding(
          padding: const EdgeInsets.all(30),
          child: Text(
            text,
            textAlign: TextAlign.center,
          ),
        ),
      ),
    );
  }
}

以上就是 sweetsheet 插件的基本使用方法和完整示例代码。希望对您有所帮助!


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

1 回复

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


当然,以下是一个关于如何在Flutter中使用sweetsheet插件来实现底部弹出菜单的示例代码。sweetsheet是一个流行的Flutter插件,用于在屏幕底部显示一个类似于iOS Action Sheet的弹出菜单。

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

dependencies:
  flutter:
    sdk: flutter
  sweetsheet: ^x.y.z  # 请替换为最新版本号

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

接下来,在你的Flutter项目中,你可以使用以下代码来显示一个底部弹出菜单:

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

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

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

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

class _MyHomePageState extends State<MyHomePage> {

  void _showSweetSheet() {
    SweetSheet.show(
      context: context,
      title: '选择操作',
      options: [
        SweetSheetOption(
          title: '选项1',
          icon: Icons.home,
          onPressed: () {
            // 用户点击选项1后的处理逻辑
            print('选项1被点击');
          },
        ),
        SweetSheetOption(
          title: '选项2',
          icon: Icons.settings,
          onPressed: () {
            // 用户点击选项2后的处理逻辑
            print('选项2被点击');
          },
        ),
        SweetSheetOption(
          title: '取消',
          icon: Icons.cancel,
          onPressed: () {
            // 用户点击取消后的处理逻辑,通常用于关闭SweetSheet
            SweetSheet.dismiss(context);
          },
          color: Colors.redAccent, // 可以为取消按钮设置不同的颜色
        ),
      ],
      onCancel: () {
        // 用户点击屏幕背景或按返回键取消SweetSheet时的处理逻辑
        print('SweetSheet被取消');
      },
    );
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter Sweetsheet Demo'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: _showSweetSheet,
          child: Text('显示底部弹出菜单'),
        ),
      ),
    );
  }
}

在这个示例中,我们创建了一个简单的Flutter应用,其中包含一个按钮。当用户点击按钮时,会显示一个底部弹出菜单,菜单中包含三个选项:选项1、选项2和取消。每个选项都有一个图标和点击后的处理逻辑。

  • SweetSheet.show方法用于显示SweetSheet。
  • options参数是一个SweetSheetOption对象的列表,每个对象代表一个菜单选项。
  • onPressed回调用于处理用户点击选项后的逻辑。
  • onCancel回调用于处理用户取消SweetSheet(例如点击屏幕背景或按返回键)后的逻辑。

希望这个示例能帮助你理解如何在Flutter中使用sweetsheet插件来实现底部弹出菜单。如果你有任何其他问题,请随时提问!

回到顶部