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

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

一个轻松模仿Cupertino底部弹出菜单的包

pub.dev style: effective dart Awesome Flutter

与现有的其他包不同,flutter_cupertino_bottom_sheet 不需要 Scaffold 来实现此功能。它可以从任何地方和任何时间使用。除了在初始化时用 CupertinoBottomSheetRepaintBoundary() 包裹你的 MaterialApp 外,你无需编写任何特殊代码。就这么简单!甚至不需要特定的上下文即可使其工作。


它是如何工作的?

非常简单。内部使用了一个重绘边界(repaint boundary),创建整个屏幕的截图,并将其转换为 RawImage。因此,它不关心之前的路由是否保持状态。它实际上不需要知道有关之前路由的任何信息,因为它使用的是截图而不是小部件快照。


开始使用

导入包

在初始化你的应用时导入该包:

import 'package:flutter_cupertino_bottom_sheet/flutter_my_bottom_sheet.dart';

初始化 MaterialApp

然后用 CupertinoBottomSheetRepaintBoundary 包裹你的 MaterialApp 或其他类型的路由:

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

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    return CupertinoBottomSheetRepaintBoundary(
      child: MaterialApp(
        navigatorKey: cupertinoBottomSheetNavigatorKey, // 可选:用于更少代码
        title: 'Flutter Cupertino Bottom Sheet',
        theme: ThemeData(
          primarySwatch: Colors.red,
        ),
      ),
    );
  }
}

这将为库提供必要的 RenderRepaintBoundary


推送底部弹出菜单

你可以通过 Navigator 推出底部弹出菜单,如下所示:

Navigator.of(context).push(
  CupertinoBottomSheetRoute(
    args: const CupertinoBottomSheetRouteArgs(
      swipeSettings: SwipeSettings(
        canCloseBySwipe: true, // 是否可以通过滑动关闭
      ),
    ),
    builder: (context) {
      return const TestPage(); // 替换为你要显示的页面
    },
  ),
);

想要更少的代码?没问题!

如果你不想写太多代码,可以传递一个 cupertinoBottomSheetNavigatorKey 给你的应用初始化:

[@override](/user/override)
Widget build(BuildContext context) {
  return CupertinoBottomSheetRepaintBoundary(
    child: MaterialApp(
      navigatorKey: cupertinoBottomSheetNavigatorKey,
      title: 'Flutter Cupertino Bottom Sheet',
      theme: ThemeData(
        primarySwatch: Colors.red,
      ),
    ),
  );
}

然后可以在任何地方调用 openCupertinoBottomSheet,而无需上下文:

openCupertinoBottomSheet(
  builder: (c) {
    return const TestPage();
  },
  args: CupertinoBottomSheetRouteArgs(
    appBar: CupertinoBottomSheetAppBar.withCloseButton(
      title: 'Cupertino Actionsheet',
      buttonText: 'Done',
      headerStyle: Theme.of(context).textTheme.bodyMedium,
      onClosePressed: Navigator.of(context).pop, // 点击关闭按钮时关闭弹窗
    ),
  ),
);

示例代码

以下是一个完整的示例代码:

example/lib/main.dart

import 'package:flutter/material.dart';
import 'package:flutter_cupertino_bottom_sheet/flutter_my_bottom_sheet.dart';

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

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    return CupertinoBottomSheetRepaintBoundary(
      child: MaterialApp(
        navigatorKey: cupertinoBottomSheetNavigatorKey, // 可选:用于更少代码
        title: 'Flutter Cupertino Bottom Sheet',
        theme: ThemeData(
          primarySwatch: Colors.red,
        ),
      ),
    );
  }
}

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

1 回复

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


flutter_my_bottom_sheet 是一个 Flutter 插件,用于在屏幕底部弹出自定义菜单或对话框。虽然 Flutter 本身提供了 showModalBottomSheetshowBottomSheet 等内置方法来实现底部弹出菜单,但 flutter_my_bottom_sheet 提供了更多的自定义选项和灵活性。

安装插件

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

dependencies:
  flutter:
    sdk: flutter
  flutter_my_bottom_sheet: ^1.0.0  # 请使用最新版本

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

使用 flutter_my_bottom_sheet

以下是一个简单的示例,展示如何使用 flutter_my_bottom_sheet 来创建一个底部弹出菜单。

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Flutter My Bottom Sheet Example'),
        ),
        body: Center(
          child: ElevatedButton(
            onPressed: () {
              _showMyBottomSheet(context);
            },
            child: Text('Show Bottom Sheet'),
          ),
        ),
      ),
    );
  }

  void _showMyBottomSheet(BuildContext context) {
    MyBottomSheet.show(
      context,
      builder: (BuildContext context) {
        return Container(
          height: 200,
          decoration: BoxDecoration(
            color: Colors.white,
            borderRadius: BorderRadius.only(
              topLeft: Radius.circular(16),
              topRight: Radius.circular(16),
            ),
          ),
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              Text('This is a custom bottom sheet'),
              SizedBox(height: 20),
              ElevatedButton(
                onPressed: () {
                  Navigator.pop(context);
                },
                child: Text('Close'),
              ),
            ],
          ),
        );
      },
    );
  }
}

代码解释

  1. 导入插件:首先导入 flutter_my_bottom_sheet 插件。
  2. 创建按钮:在 MyAppbody 中创建了一个按钮,点击按钮时调用 _showMyBottomSheet 方法。
  3. 显示底部菜单:在 _showMyBottomSheet 方法中,使用 MyBottomSheet.show 来显示底部弹出菜单。builder 参数用于构建菜单的内容。
  4. 自定义菜单:在 builder 中,返回一个 Container,设置其高度、背景颜色和圆角。内部包含一个 Column,用于布局文本和按钮。

自定义选项

MyBottomSheet.show 方法提供了多种自定义选项,例如:

  • backgroundColor:设置背景颜色。
  • elevation:设置阴影。
  • shape:设置形状。
  • isDismissible:设置是否可以通过点击外部关闭底部菜单。

例如:

MyBottomSheet.show(
  context,
  backgroundColor: Colors.blue,
  elevation: 10,
  isDismissible: true,
  builder: (BuildContext context) {
    return Container(
      height: 200,
      child: Center(
        child: Text('Custom Bottom Sheet'),
      ),
    );
  },
);
回到顶部