Flutter可拖拽底部弹出层插件bottom_sheet_draggable的使用

Flutter 可拖拽底部弹出层插件 bottom_sheet_draggable 的使用

示例代码

在本示例中,我们将展示如何使用 bottom_sheet_draggable 插件来创建一个可拖拽的底部弹出层。首先,确保你已经将 bottom_sheet_draggable 添加到你的 pubspec.yaml 文件中。

dependencies:
  bottom_sheet_draggable: ^1.0.0

接下来是完整的示例代码:

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

import 'generated/assets.gen.dart';

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

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      title: 'Flutter Demo',
      home: const HomePage(),
    );
  }
}

class HomePage extends StatelessWidget {
  const HomePage({Key? key}) : super(key: key);

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('Bottom Sheet Draggable'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: () {
            BottomSheetDraggable.show(
              modalBgImage: Assets.images.bg.image(), // 设置背景图片
              appbarBgColor: Colors.blue, // 设置顶部栏背景颜色
              context: context,
              appbar: _buildAppbar(context), // 自定义顶部栏
              builder: (context, controller) {
                return _buildModal(); // 构建弹出层内容
              },
            );
          },
          child: const Text('点击我!'), // 按钮文本
        ),
      ),
    );
  }

  Container _buildAppbar(BuildContext context) {
    return Container(
      child: Column(
        children: [
          Expanded(
            child: Container(),
          ),
          // 这将是你的容器
          AppBar(
            title: const Text('Bottom Sheet Draggable'),
            actions: [_closeButton(context)], // 关闭按钮
          ),
        ],
      ),
    );
  }

  Widget _buildModal() {
    return Column(
      children: List.generate(
        10,
        (index) => ListTile(
          title: Text('项目: $index'),
        ),
      ),
    );
  }

  Widget _closeButton(BuildContext context) {
    return Transform.scale(
      scale: 1,
      child: IconButton(
        onPressed: () => Navigator.of(context).pop(), // 关闭弹出层
        icon: const Icon(Icons.close),
        padding: const EdgeInsets.only(bottom: 4.0, right: 4.0),
      ),
    );
  }
}

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

1 回复

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


bottom_sheet_draggable 是一个 Flutter 插件,用于创建可拖拽的底部弹出层。它允许用户通过拖拽来展开或收起底部弹出层,提供了更好的用户体验。

安装插件

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

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

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

使用示例

以下是一个简单的使用示例,展示了如何使用 bottom_sheet_draggable 插件创建一个可拖拽的底部弹出层。

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Draggable Bottom Sheet Example'),
        ),
        body: Center(
          child: ElevatedButton(
            onPressed: () {
              showDraggableBottomSheet(
                context: context,
                minChildSize: 0.1,  // 最小高度比例
                initialChildSize: 0.3,  // 初始高度比例
                maxChildSize: 0.9,  // 最大高度比例
                builder: (context, scrollController) {
                  return ListView(
                    controller: scrollController,
                    children: List.generate(
                      20,
                      (index) => ListTile(
                        title: Text('Item $index'),
                      ),
                    ),
                  );
                },
              );
            },
            child: Text('Show Draggable Bottom Sheet'),
          ),
        ),
      ),
    );
  }
}

参数说明

  • context: BuildContext 上下文。
  • minChildSize: 底部弹出层的最小高度比例(0.0 到 1.0 之间)。
  • initialChildSize: 底部弹出层的初始高度比例(0.0 到 1.0 之间)。
  • maxChildSize: 底部弹出层的最大高度比例(0.0 到 1.0 之间)。
  • builder: 构建底部弹出层内容的回调函数,返回一个 Widget。

自定义样式

你可以通过 showDraggableBottomSheet 函数的其他参数来自定义底部弹出层的外观和行为,例如背景颜色、圆角、动画等。

showDraggableBottomSheet(
  context: context,
  minChildSize: 0.1,
  initialChildSize: 0.3,
  maxChildSize: 0.9,
  backgroundColor: Colors.white,  // 背景颜色
  barrierColor: Colors.black54,  // 背景遮罩颜色
  shape: RoundedRectangleBorder(  // 圆角
    borderRadius: BorderRadius.vertical(top: Radius.circular(20)),
  ),
  builder: (context, scrollController) {
    return ListView(
      controller: scrollController,
      children: List.generate(
        20,
        (index) => ListTile(
          title: Text('Item $index'),
        ),
      ),
    );
  },
);
回到顶部