Flutter可拖拽面板插件draggable_panel的使用

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

Flutter可拖拽面板插件draggable_panel的使用

一个多功能且可定制的可拖拽面板 🚀

可拖拽面板(DraggablePanel)是一个用于Flutter的多功能且交互式的组件,可以创建浮动、可拖动的面板,这些面板可以停靠在屏幕最近的边缘。该面板非常适合用于显示额外的内容、操作或工具,这些内容、操作或工具可以根据需求访问。

您的反馈非常重要,因为它将帮助塑造未来的更新并确保包保持相关性和有用性。😊

展示一些❤️并支持该项目!您可以点击下方链接来为项目添加星星。

Pub License: MIT Repository views Pub
Pub likes Pub popularity Pub points

📜 展示

📌 开始使用

添加依赖

pubspec.yaml文件中添加以下依赖:

dependencies:
  draggable_panel: ^1.0.2

导入包

在需要使用的Dart文件中导入以下包:

import 'package:draggable_panel/draggable_panel.dart';

使用方法

简单地将DraggablePanel添加到MaterialAppbuilder中。

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

void main() {
  runApp(
    const App(),
  );
}

class App extends StatefulWidget {
  const App({super.key});

  [@override](/user/override)
  State<App> createState() => _AppState();
}

class _AppState extends State<App> {
  bool isEnabled = true;
  final DraggablePanelController controller = DraggablePanelController();

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              ElevatedButton(
                onPressed: () {
                  setState(() {
                    isEnabled = !isEnabled;
                  });
                },
                child: const Text('Tap'),
              ),
            ],
          ),
        ),
      ),
      builder: (context, child) {
        return Visibility(
          visible: isEnabled,
          replacement: child!,
          child: DraggablePanel(
            items: [
              (
                enableBadge: false,
                icon: Icons.list,
                onTap: (context) {},
              ),
              (
                enableBadge: false,
                icon: Icons.color_lens,
                onTap: (context) {},
              ),
              (
                enableBadge: false,
                icon: Icons.zoom_in,
                onTap: (context) {},
              ),
              (
                enableBadge: false,
                icon: Icons.token,
                onTap: (context) {},
              ),
              (
                enableBadge: false,
                icon: Icons.list,
                onTap: (context) {},
              ),
              (
                enableBadge: false,
                icon: Icons.list,
                onTap: (context) {},
              ),
            ],
            buttons: [
              (
                icon: Icons.copy,
                onTap: (context) {
                  // 隐藏面板
                  controller.toggle(context);
                },
                label: 'Push token',
              ),
            ],
            controller: controller,
            child: child,
          ),
        );
      },
    );
  }
}

更多关于Flutter可拖拽面板插件draggable_panel的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter可拖拽面板插件draggable_panel的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,下面是一个关于如何在Flutter项目中使用draggable_panel插件来实现可拖拽面板的示例代码。

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

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

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

接下来,是一个简单的示例代码,展示了如何使用draggable_panel创建一个可拖拽的面板:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Draggable Panel Example'),
        ),
        body: DraggablePanel(
          // 背景内容
          background: Container(
            color: Colors.grey[200],
            child: Center(
              child: Text('Background Content'),
            ),
          ),
          // 面板内容
          panel: Container(
            color: Colors.white,
            child: Padding(
              padding: const EdgeInsets.all(16.0),
              child: Column(
                mainAxisSize: MainAxisSize.min,
                children: <Widget>[
                  Text('Draggable Panel Content'),
                  SizedBox(height: 20),
                  ElevatedButton(
                    onPressed: () {},
                    child: Text('Close Panel'),
                  ),
                ],
              ),
            ),
          ),
          // 面板控制器配置
          panelController: PanelController(
            initialHeight: 200,
            minHeight: 100,
            maxHeight: MediaQuery.of(context).size.height * 0.8,
            borderRadius: BorderRadius.circular(16),
            backgroundColor: Colors.transparent,
            draggableBody: true,
            onDragStarted: () {
              print('Panel dragging started');
            },
            onDragEnded: (details) {
              print('Panel dragging ended at position: ${details.offset}');
            },
          ),
        ),
      ),
    );
  }
}

在这个示例中:

  • DraggablePanel组件包含两个主要部分:backgroundpanel
  • background是背景内容,当面板被拖拽时,这部分内容仍然可见。
  • panel是可拖拽的面板内容。
  • panelController用于配置面板的行为,例如初始高度、最小高度、最大高度、边框半径、背景颜色、是否允许拖拽面板主体等。
  • onDragStartedonDragEnded回调分别在拖拽开始和结束时被调用,这里我们简单地打印了一些信息。

这个示例展示了如何使用draggable_panel插件创建一个简单的可拖拽面板,你可以根据需要进一步自定义和扩展这个面板的功能和样式。

回到顶部