Flutter滑动面板插件sliding_panel的使用
Flutter滑动面板插件sliding_panel的使用
sliding_panel 是一个高度可定制的底部滑动面板插件,可以在 pub.dev 上找到。它可以根据你的需求进行个性化配置!
功能亮点

| 自定义控制 | 高度自定义化 | 多种用途 |
|---|---|---|
![]() |
![]() |
![]() |
轻松将内容放入面板中,根据需要进行自定义,并将其用于多种目的,例如:
- 在屏幕底部显示一些持久性内容。
- 可以像 Flutter 的
showModalBottomSheet()一样,让用户做出选择。 - 还可以像
DraggableScrollableSheet()一样,将滚动内容放入面板中。
如何使用 sliding_panel
请访问 Wiki 查看如何让这个插件运行起来。
示例代码
以下是一个完整的示例代码,展示如何在 Flutter 中使用 sliding_panel 插件。
// 导入必要的库
import 'package:flutter/material.dart';
// 主应用程序入口
void main() => runApp(MyApp());
// 主应用程序类
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: MyHomePage(),
debugShowCheckedModeBanner: false, // 移除调试标志
);
}
}
// 主页面类
class MyHomePage extends StatefulWidget {
[@override](/user/override)
_MyHomePageState createState() => _MyHomePageState();
}
// 主页面状态类
class _MyHomePageState extends State<MyHomePage> {
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('SlidingPanel 示例'), // 设置标题
),
body: ListView(
children: <Widget>[
// 点击跳转到 SafeArea 示例
ListTile(
onTap: () {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => SafeAreaExample()),
);
},
title: Text('SafeArea 配置'),
),
Divider(), // 添加分隔线
// 点击跳转到双状态面板示例
ListTile(
onTap: () {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => TwoStateExample()),
);
},
title: Text('双状态面板与结果传递'),
),
Divider(),
// 点击跳转到动态调整面板高度示例
ListTile(
onTap: () {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => SizingExample()),
);
},
title: Text('动态调整面板高度'),
),
Divider(),
// 点击跳转到无主体内容面板示例
ListTile(
onTap: () {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => SeparateContentExample()),
);
},
title: Text('无主体内容的面板'),
),
Divider(),
// 点击跳转到自定义面板示例
ListTile(
onTap: () {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => CustomizeDemo()),
);
},
title: Text('使用 PanelController、回调函数和自定义功能'),
),
Divider(),
// 点击跳转到最大宽度、页脚和滚动数据示例
ListTile(
onTap: () {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => FooterAndScroll()),
);
},
title: Text('最大宽度、页脚和滚动数据'),
),
Divider(),
// 点击跳转到可拖拽关闭面板示例
ListTile(
onTap: () {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => DismissibleExample()),
);
},
title: Text('可拖拽关闭的面板'),
),
Divider(),
// 点击跳转到模态面板示例
ListTile(
onTap: () {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => ModalPanelExample()),
);
},
title: Text('模态面板'),
),
],
),
);
}
}
更多关于Flutter滑动面板插件sliding_panel的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter滑动面板插件sliding_panel的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
sliding_panel 是一个 Flutter 插件,用于创建滑动面板效果,类似于 Google Maps 中的底部面板。它可以帮助你在应用中实现可滑动的面板,用户可以通过上下滑动来展开或收起面板。
安装
首先,你需要在 pubspec.yaml 文件中添加 sliding_panel 依赖:
dependencies:
flutter:
sdk: flutter
sliding_panel: ^1.0.0 # 请使用最新的版本
然后运行 flutter pub get 来安装依赖。
基本用法
以下是一个简单的示例,展示如何使用 sliding_panel 插件:
import 'package:flutter/material.dart';
import 'package:sliding_panel/sliding_panel.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Sliding Panel Example'),
),
body: SlidingPanelExample(),
),
);
}
}
class SlidingPanelExample extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return Stack(
children: [
// 主内容
Center(
child: Text('Main Content'),
),
// 滑动面板
SlidingPanel(
panelMinSize: 100.0,
panelMaxSize: 300.0,
panelBuilder: (ScrollController scrollController) {
return ListView(
controller: scrollController,
children: [
ListTile(title: Text('Item 1')),
ListTile(title: Text('Item 2')),
ListTile(title: Text('Item 3')),
ListTile(title: Text('Item 4')),
ListTile(title: Text('Item 5')),
],
);
},
),
],
);
}
}
参数说明
panelMinSize: 面板的最小高度。panelMaxSize: 面板的最大高度。panelBuilder: 构建面板内容的回调函数,接收一个ScrollController,用于控制面板内部的滚动。
自定义
你可以通过以下方式自定义滑动面板的行为和外观:
-
面板背景颜色:可以通过
panelBuilder返回的Container来设置背景颜色。 -
面板动画:
SlidingPanel提供了panelController,你可以通过它来控制面板的展开和收起。 -
面板边缘效果:可以通过
borderRadius参数来设置面板的圆角。
示例:控制面板展开和收起
class SlidingPanelExample extends StatefulWidget {
[@override](/user/override)
_SlidingPanelExampleState createState() => _SlidingPanelExampleState();
}
class _SlidingPanelExampleState extends State<SlidingPanelExample> {
PanelController _panelController = PanelController();
[@override](/user/override)
Widget build(BuildContext context) {
return Stack(
children: [
Center(
child: Text('Main Content'),
),
SlidingPanel(
panelMinSize: 100.0,
panelMaxSize: 300.0,
panelController: _panelController,
panelBuilder: (ScrollController scrollController) {
return ListView(
controller: scrollController,
children: [
ListTile(title: Text('Item 1')),
ListTile(title: Text('Item 2')),
ListTile(title: Text('Item 3')),
ListTile(title: Text('Item 4')),
ListTile(title: Text('Item 5')),
],
);
},
),
Positioned(
bottom: 20,
right: 20,
child: FloatingActionButton(
onPressed: () {
if (_panelController.isPanelShown) {
_panelController.hide();
} else {
_panelController.show();
}
},
child: Icon(Icons.swap_vert),
),
),
],
);
}
}




