Flutter可扩展模态底部表单插件extendable_modal_sheet的使用
Flutter可扩展模态底部表单插件extendable_modal_sheet的使用
特性
ExtendableModalSheet 是一个高度可定制且可扩展的模态底部表单小部件。它旨在高效处理长列表视图和大内容,并提供了诸如根据滚动位置调整圆角半径、背景模糊、吸附行为等动态属性。
- 自定义大小:控制模态底部表单的初始、最小和最大大小。
- 圆角:根据滚动位置自动调整圆角半径。
- 背景模糊:在背景上应用模糊或其他图像过滤效果。
- 吸附行为:启用吸附到预定义大小的功能。
- 可取消:允许用户取消模态底部表单。
- 填充和背景颜色:自定义内容填充和背景颜色。
- 高效的列表处理:优化了处理大型列表和内容的方式。
平滑滚动
自定义滚动属性以创建所需的模态底部表单。
属性
- mainWidget:模态底部表单的主要内容。
- bottomWidget:可选的底部小部件,用于显示在模态底部表单的底部。
- initialChildSize:模态底部表单相对于父容器的初始大小(默认值:0.5)。
- minChildSize:模态底部表单相对于父容器的最小大小(默认值:0.25)。
- maxChildSize:模态底部表单相对于父容器的最大大小(默认值:1.0)。
- turningRadiusPoint:圆角半径变化的点(默认值:80)。
- cornersRadius:模态底部表单的圆角半径(默认值:24)。
- radiusChangeAnimationDuration:模态底部表单半径变化的持续时间(默认值:350毫秒)。
- contentPadding:模态底部表单内部内容的填充(默认值:EdgeInsets.zero)。
- backdropFilter:可选的背景模糊效果(默认值:ImageFilter.blur(sigmaX: 6, sigmaY: 6))。
- dismissible:模态底部表单是否可以被用户取消(默认值:true)。
- blendMode:背景模糊效果使用的混合模式(默认值:BlendMode.srcOver)。
- snap:模态底部表单是否应该吸附到预定义大小(默认值:false)。
- snapAnimationDuration:吸附动画的持续时间(默认值:null)。
- snapSizes:吸附到的大小列表(默认值:null)。
- shouldCloseOnMinExtent:当达到最小范围时是否关闭模态底部表单(默认值:true)。
- backgroundColor:模态底部表单的背景颜色(默认值:Colors.white)。
使用方法
在您的Dart文件中导入该包:
import 'package:extendable_modal_sheet/extendable_modal_sheet.dart';
使用 ExtendableModalSheet
小部件:
showModalBottomSheet(
context: context,
builder: (context) => ExtendableModalSheet(
mainWidget: YourMainWidget(),
bottomWidget: YourBottomWidget(), // 可选
initialChildSize: 0.5,
minChildSize: 0.25,
maxChildSize: 1.0,
turningRadiusPoint: 80,
cornersRadius: 24,
contentPadding: EdgeInsets.zero,
backdropFilter: ImageFilter.blur(sigmaX: 6, sigmaY: 6),
dismissible: true,
blendMode: BlendMode.srcOver,
snap: true,
snapAnimationDuration: Duration(milliseconds: 200),
snapSizes: [0.25, 0.5, 0.75, 1.0],
shouldCloseOnMinExtent: true,
backgroundColor: Colors.white,
),
);
完整示例代码
以下是一个完整的示例代码,展示了如何使用 ExtendableModalSheet
插件。
import 'package:extendable_modal_sheet/extendable_modal_sheet.dart';
import 'package:flutter/material.dart';
void main() {
runApp(const MyExample());
}
class MyExample extends StatelessWidget {
const MyExample({super.key});
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
title: 'Flutter Demo',
theme: ThemeData(
colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
useMaterial3: true,
),
home: const MyHomePage(title: 'Extendable Modal Sheet'),
);
}
}
class MyHomePage extends StatefulWidget {
const MyHomePage({super.key, required this.title});
final String title;
[@override](/user/override)
State<MyHomePage> createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
void _showDialog() async {
await showModalBottomSheet(
isDismissible: true,
context: context,
isScrollControlled: true,
backgroundColor: Colors.transparent,
useRootNavigator: true,
builder: (ctx) => const MyModal());
}
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
backgroundColor: Theme.of(context).colorScheme.inversePrimary,
title: Text(widget.title),
),
floatingActionButton: FloatingActionButton(
onPressed: _showDialog,
tooltip: 'showDialog',
child: const Icon(Icons.add),
), // 这个逗号使自动格式化更美观
);
}
}
class MyModal extends StatelessWidget {
const MyModal({super.key});
[@override](/user/override)
Widget build(BuildContext context) => ExtendableModalSheet(
backgroundColor: Colors.grey.shade100,
mainWidget: Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
children: List.generate(
20,
(index) => (index == 0)
? Container(
width: double.infinity,
height: 64,
margin: const EdgeInsets.all(8),
decoration: BoxDecoration(
color: Colors.black87,
borderRadius: BorderRadius.circular(12)),
child: const Center(
child: Text(
'!! Enjoy using This dialog !!',
style: TextStyle(color: Colors.white),
),
),
)
: Container(
width: double.infinity,
height: 64,
margin: const EdgeInsets.all(8),
decoration: BoxDecoration(
color: Colors.blueAccent.shade400,
borderRadius: BorderRadius.circular(12)),
)),
),
),
bottomWidget: Padding(
padding: const EdgeInsets.all(16.0),
child: ElevatedButton(
style: ButtonStyle(
backgroundColor: MaterialStateProperty.all(Colors.black87),
),
onPressed: () {
Navigator.of(context).pop();
},
child: const Text(
'dismiss',
style: TextStyle(fontSize: 24, color: Colors.white),
)),
),
);
}
更多关于Flutter可扩展模态底部表单插件extendable_modal_sheet的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
1 回复
更多关于Flutter可扩展模态底部表单插件extendable_modal_sheet的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是如何在Flutter中使用extendable_modal_sheet
插件的示例代码。这个插件允许你创建一个可扩展的模态底部表单,这在需要动态显示更多信息时非常有用。
首先,你需要在你的pubspec.yaml
文件中添加依赖项:
dependencies:
flutter:
sdk: flutter
extendable_modal_sheet: ^latest_version # 请替换为最新的版本号
然后运行flutter pub get
来安装依赖。
接下来,在你的Dart文件中,你可以按照以下方式使用ExtendableModalSheet
:
import 'package:flutter/material.dart';
import 'package:extendable_modal_sheet/extendable_modal_sheet.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Extendable Modal Sheet Example'),
),
body: Center(
child: ElevatedButton(
onPressed: () {
showModalBottomSheet(
context: context,
builder: (context) => ExtendableModalSheet(
expandedHeight: 300, // 扩展后的高度
header: Center(child: Text('Header')),
builder: (context, isExpanded) {
return Container(
padding: EdgeInsets.all(16.0),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text('This is the content of the modal sheet.'),
SizedBox(height: 20),
ElevatedButton(
onPressed: () {
Navigator.of(context).pop();
},
child: Text('Close'),
),
if (isExpanded)
Column(
children: <Widget>[
SizedBox(height: 20),
Text('This is additional content when expanded.'),
SizedBox(height: 20),
ElevatedButton(
onPressed: () {
// 可以在这里添加点击事件,比如收缩表单
ExtendableModalSheet.of(context).collapse();
},
child: Text('Collapse'),
),
],
),
],
),
);
},
),
);
},
child: Text('Show Modal Sheet'),
),
),
),
);
}
}
代码解释
- 依赖项:在
pubspec.yaml
中添加extendable_modal_sheet
依赖项。 - 主应用:创建一个简单的Flutter应用,包含一个按钮,点击按钮时会显示模态底部表单。
showModalBottomSheet
:使用showModalBottomSheet
来显示模态表单。ExtendableModalSheet
:expandedHeight
:定义表单扩展后的高度。header
:定义表单的头部。builder
:一个函数,返回表单的内容。这个函数接收两个参数:BuildContext
和bool isExpanded
,isExpanded
表示表单是否处于扩展状态。
- 内容:在表单内容中,我们添加了一个文本和一个关闭按钮。如果表单处于扩展状态(
isExpanded
为true
),我们还添加了一些额外的内容和收缩按钮。
这样,你就可以在Flutter应用中创建一个可扩展的模态底部表单了。希望这个示例对你有所帮助!