Flutter Cupertino风格底部弹出菜单插件flutter_cupertino_bottom_sheet的使用

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

Flutter Cupertino风格底部弹出菜单插件flutter_cupertino_bottom_sheet的使用

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

不像其他现有的插件需要复杂的设置,flutter_cupertino_bottom_sheet 不需要 Scaffold 来实现这一功能。你可以在任何地方和任何时候使用它。你只需在应用初始化时用 CupertinoBottomSheetRepaintBoundary() 包裹你的 MaterialApp 即可。就这么简单,甚至不需要特定的上下文。

它是如何工作的

非常简单。它内部使用了一个重绘边界来创建整个屏幕的截图,并将其转换为 RawImage。因此,即使之前的路由保持其状态,这也不重要。它不需要知道任何关于之前路由的信息,因为它使用的是截图而不是小部件快照。

开始使用

首先,在你的应用初始化代码中导入该包:

import 'package:flutter_cupertino_bottom_sheet/flutter_cupertino_bottom_sheet.dart';

然后,将 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,
        ),
        home: const TestPage(),
      ),
    );
  }
}

这样可以为库提供必要的 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,
      ),
      home: const TestPage(),
    ),
  );
}

然后,你可以从任何地方调用 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,
      ),
    ),
});

示例代码

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

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

import 'test_page.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,
        ),
        home: const TestPage(),
      ),
    );
  }
}

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

1 回复

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


当然,下面是一个关于如何使用 flutter_cupertino_bottom_sheet 插件来实现 Cupertino 风格的底部弹出菜单的示例代码。这个插件允许你在 Flutter 应用中轻松创建类似于 iOS 的底部弹出菜单。

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

dependencies:
  flutter:
    sdk: flutter
  flutter_cupertino_bottom_sheet: ^^最新版本号(请替换为当前最新版本)

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

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

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

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

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

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

class _MyHomePageState extends State<MyHomePage> {
  void _showBottomSheet() {
    showCupertinoBottomSheet<void>(
      context: context,
      builder: (BuildContext context) {
        return CupertinoBottomSheet(
          title: Text('底部弹出菜单标题'),
          backgroundColor: CupertinoColors.white,
          child: Column(
            mainAxisSize: MainAxisSize.min,
            children: <Widget>[
              CupertinoButton(
                color: CupertinoColors.activeBlue,
                child: Text('选项 1'),
                onPressed: () {
                  Navigator.of(context).pop(); // 关闭底部弹出菜单
                  // 在这里处理选项 1 的点击事件
                },
              ),
              CupertinoButton(
                color: CupertinoColors.activeBlue,
                child: Text('选项 2'),
                onPressed: () {
                  Navigator.of(context).pop(); // 关闭底部弹出菜单
                  // 在这里处理选项 2 的点击事件
                },
              ),
              CupertinoButton(
                color: CupertinoColors.activeBlue,
                child: Text('选项 3'),
                onPressed: () {
                  Navigator.of(context).pop(); // 关闭底部弹出菜单
                  // 在这里处理选项 3 的点击事件
                },
              ),
            ],
          ),
        );
      },
    );
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter Cupertino Bottom Sheet Demo'),
      ),
      body: Center(
        child: CupertinoButton(
          color: CupertinoColors.activeBlue,
          child: Text('显示底部弹出菜单'),
          onPressed: _showBottomSheet,
        ),
      ),
    );
  }
}

在这个示例中,我们创建了一个简单的 Flutter 应用,其中包含一个按钮,点击该按钮时会显示一个 Cupertino 风格的底部弹出菜单。底部弹出菜单包含三个选项,每个选项都是一个 CupertinoButton,点击后会关闭底部弹出菜单(你可以根据需要添加具体的处理逻辑)。

这个示例展示了如何使用 flutter_cupertino_bottom_sheet 插件来创建和操作 Cupertino 风格的底部弹出菜单。当然,根据实际需求,你可以进一步自定义和扩展这个示例。

回到顶部