Flutter持久顶部弹窗插件persistent_top_sheet的使用
Flutter持久顶部弹窗插件 persistent_top_sheet
的使用
概述
persistent_top_sheet
是一个用于在 Flutter 应用中添加可自定义的顶部弹窗的插件。该插件允许用户通过手势或控制器控制弹窗的打开、关闭和拖动操作,并且提供了平滑的动画效果。
特性
- 完全可自定义的顶部弹窗,适用于各种使用场景。
- 提供平滑的打开、关闭和拖动交互动画。
快速开始
1. 添加依赖
首先,在 pubspec.yaml
文件中添加 persistent_top_sheet
包:
dependencies:
persistent_top_sheet: ^latest_version
然后运行以下命令来获取包:
flutter pub get
2. 导入包
在 Dart 文件中导入该包:
import 'package:persistent_top_sheet/persistent_top_sheet.dart';
使用方法
创建控制器
你可以创建一个 PersistentTopSheetController
来控制弹窗的打开、关闭和切换状态:
final controller = PersistentTopSheetController();
使用 PersistentTopSheet
接下来,使用 PersistentTopSheet
组件来创建顶部弹窗:
PersistentTopSheet(
maxHeight: 500, // 最大高度
minHeight: 50, // 最小高度
controller: controller, // 控制器
childBuilder: (currentHeight) => SheetBody(currentHeight: currentHeight), // 弹窗内容构建器
handleBuilder: (currentHeight) => const DragHandle(), // 拖动手柄构建器
onStateChanged: (state) => debugPrint('isOpen: $state'), // 状态变化回调
);
示例代码
下面是一个完整的示例代码,展示了如何在应用中使用 persistent_top_sheet
插件:
import 'package:flutter/material.dart';
import 'package:persistent_top_sheet/persistent_top_sheet.dart';
void main() {
runApp(MainApp());
}
class MainApp extends StatelessWidget {
final controller = PersistentTopSheetController();
MainApp({super.key});
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
home: Scaffold(
backgroundColor: Colors.grey,
appBar: AppBar(
title: const Text('Persistent Top Sheet Example'),
backgroundColor: Colors.blue,
),
body: Stack(
children: [
LayoutBuilder(builder: (context, constraints) {
return PersistentTopSheet(
maxHeight: constraints.maxHeight - 48,
minHeight: 50,
controller: controller,
childBuilder: (currentHeight) =>
SheetBody(currentHeight: currentHeight),
handleBuilder: (currentHeight) => const DragHandle(),
onStateChanged: (state) => debugPrint('isOpen: $state'),
);
}),
Center(
child: ElevatedButton(
onPressed: controller.toggle, // 切换打开/关闭
child: const Text('Toggle open/close'),
),
),
],
),
),
);
}
}
class SheetBody extends StatelessWidget {
const SheetBody({
super.key,
required this.currentHeight,
});
final double currentHeight;
[@override](/user/override)
Widget build(BuildContext context) {
return Container(
color: Colors.amber,
child: Padding(
padding: const EdgeInsets.only(top: 8),
child: Align(
alignment: Alignment.topCenter,
child: Text('height: ${currentHeight.round()}'),
),
),
);
}
}
class DragHandle extends StatelessWidget {
const DragHandle({
super.key,
});
[@override](/user/override)
Widget build(BuildContext context) {
return MouseRegion(
child: Container(
height: kMinInteractiveDimension,
decoration: BoxDecoration(
color: Theme.of(context).colorScheme.surface,
borderRadius: const BorderRadius.vertical(bottom: Radius.circular(24)),
),
child: Center(
child: Container(
height: 4,
width: 32,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(2),
color: Theme.of(context).dividerColor,
),
),
),
),
);
}
}
更多关于Flutter持久顶部弹窗插件persistent_top_sheet的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter持久顶部弹窗插件persistent_top_sheet的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,下面是一个关于如何使用 persistent_top_sheet
插件的 Flutter 代码示例。这个插件允许你在应用中创建一个持久性的顶部弹窗,类似于 iOS 的 UIModalPresentationOverFullScreen
样式。
首先,你需要在你的 pubspec.yaml
文件中添加 persistent_top_sheet
依赖:
dependencies:
flutter:
sdk: flutter
persistent_top_sheet: ^x.y.z # 请将 x.y.z 替换为最新版本号
然后运行 flutter pub get
来获取依赖。
接下来是一个完整的 Flutter 应用示例,展示了如何使用 persistent_top_sheet
:
import 'package:flutter/material.dart';
import 'package:persistent_top_sheet/persistent_top_sheet.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Persistent Top Sheet Example'),
),
body: Center(
child: ElevatedButton(
onPressed: () {
showPersistentTopSheet(
context: context,
builder: (context) => PersistentTopSheetContent(),
barrierDismissible: true, // 是否可以通过点击背景关闭
barrierColor: Colors.grey.withOpacity(0.5), // 背景颜色
backgroundColor: Colors.white, // 弹窗背景颜色
elevation: 4.0, // 弹窗阴影
expandedHeight: 200.0, // 弹窗展开高度
maxSheetHeightFraction: 0.8, // 最大高度占屏幕高度的比例
onSheetStateChanged: (state) {
// 处理弹窗状态变化,比如展开或收起
print('Sheet state changed to: $state');
},
);
},
child: Text('Show Persistent Top Sheet'),
),
),
),
);
}
}
class PersistentTopSheetContent extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
mainAxisSize: MainAxisSize.min,
children: <Widget>[
Text('This is a persistent top sheet!'),
SizedBox(height: 16.0),
ElevatedButton(
onPressed: () {
Navigator.of(context).pop(); // 关闭弹窗
},
child: Text('Close'),
),
],
),
);
}
}
代码说明:
- 依赖添加:在
pubspec.yaml
中添加persistent_top_sheet
依赖。 - 主应用:
MyApp
是一个简单的 Flutter 应用,包含一个按钮,用于显示持久顶部弹窗。 - 按钮点击事件:点击按钮时,调用
showPersistentTopSheet
方法,显示一个PersistentTopSheetContent
组件。 - PersistentTopSheetContent:这是弹窗的内容,包含一个文本和一个关闭按钮。
- showPersistentTopSheet 参数:
context
:当前上下文。builder
:用于构建弹窗内容的函数。barrierDismissible
:是否可以通过点击背景关闭弹窗。barrierColor
:背景颜色。backgroundColor
:弹窗背景颜色。elevation
:弹窗阴影。expandedHeight
:弹窗展开的高度。maxSheetHeightFraction
:最大高度占屏幕高度的比例。onSheetStateChanged
:处理弹窗状态变化的回调。
你可以根据需要调整这些参数,以符合你的应用需求。