Flutter底部弹出选择项插件bottom_sheet_item_selector的使用
Flutter底部弹出选择项插件bottom_sheet_item_selector的使用
Flutter底部弹出选择项插件bottom_sheet_item_selector
是一个高度可定制的Flutter包,它简化了从底部弹出菜单中选择项目的流程。此小部件支持单选和多选模式,使其成为任何移动应用界面的灵活解决方案。无论是构建表单、筛选器还是项目选择器,此包都能轻松满足您的需求。
特性
- 单选:从列表中选择一个项目。
- 多选:通过勾选框界面选择多个项目。
- 可定制:自定义底部弹出菜单的外观和行为。
- 搜索功能:可选地启用搜索功能以过滤项目。
安装
在您的pubspec.yaml
文件中添加以下依赖:
dependencies:
bottom_sheet_item_selector: ^1.0.0
然后运行flutter pub get
来安装该包。
示例用法
单选示例
SelectableItemBottomSheet<String>(
title: 'Select One User',
selectableItems: items,
onItemSelected: (selectedItem) {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text('You selected: ${selectedItem.title}')),
);
},
);
多选示例
SelectableItemBottomSheet<String>(
title: 'Select Multiple Users',
selectableItems: items,
isMultipleSelection: true,
onItemsSelected: (selectedItems) {
final selectedTitles = selectedItems.map((e) => e.title).join(', ');
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text('You selected: $selectedTitles')),
);
},
);
截图
自定义选择视图 | 单选 |
---|---|
![]() |
![]() |
多选 | 可搜索的选择 |
---|---|
![]() |
![]() |
如何使用
- 在您的
pubspec.yaml
文件中添加bottom_sheet_item_selector
。 - 导入包:
import 'package:bottom_sheet_item_selector/bottom_sheet_item_selector.dart';
- 在您的小部件树中使用
SelectableItemBottomSheet
,如上面的示例所示。
自定义
您可以通过调整小部件中的参数来启用搜索功能、自定义小部件等。
贡献
欢迎贡献、提出问题和功能请求!
完整示例代码
import 'package:bottom_sheet_item_selector/bottom_sheet_item_selector.dart';
import 'package:flutter/material.dart';
void main() {
runApp(const MainApp());
}
class MainApp extends StatelessWidget {
const MainApp({super.key});
[@override](/user/override)
Widget build(BuildContext context) {
return const MaterialApp(
debugShowCheckedModeBanner: false,
home: Scaffold(
body: Center(
child: HomeScreen(),
),
),
);
}
}
class HomeScreen extends StatelessWidget {
const HomeScreen({super.key});
[@override](/user/override)
Widget build(BuildContext context) {
final List<SelectableItem<String>> items = _generateUserItems();
return Scaffold(
appBar: AppBar(
title: const Text('Selectable Item Example'),
),
body: Padding(
padding: const EdgeInsets.all(12.0),
child: Column(
children: [
Row(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
const Text("Single Selector"),
SelectableItemBottomSheet<String>(
title: 'Select One User',
selectableItems: items,
onItemSelected: (selectedItem) {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text('You selected: ${selectedItem.title}')),
);
},
),
],
),
const SizedBox(height: 30),
Row(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
const Text("Multiple Selector"),
SelectableItemBottomSheet<String>(
title: 'Select Multiple Users',
selectableItems: items,
isMultipleSelection: true,
onItemsSelected: (selectedItems) {
final selectedTitles = selectedItems.map((e) => e.title).join(', ');
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text('You selected: $selectedTitles')),
);
},
),
],
),
const SizedBox(height: 30),
Row(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
const Text("With search field"),
SelectableItemBottomSheet<String>(
title: 'Select Items',
selectableItems: items,
canSearchItems: true,
isMultipleSelection: true,
onItemsSelected: (selectedItems) {
final selectedTitles = selectedItems.map((e) => e.title).join(', ');
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text('You selected: $selectedTitles')),
);
},
),
],
),
const SizedBox(height: 30),
Row(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
const Text("Customm Selection Widget"),
SelectableItemBottomSheet<String>(
title: 'Select Multiple Users',
selectableItems: items,
isMultipleSelection: true,
onItemsSelected: (selectedItems) {
final selectedTitles = selectedItems.map((e) => e.title).join(', ');
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text('You selected: $selectedTitles')),
);
},
child: Container(
color: Colors.blueAccent.shade400,
padding: const EdgeInsets.all(10),
child: const Text(
"Filters",
style: TextStyle(color: Colors.white),
),
),
),
],
),
],
),
),
);
}
List<SelectableItem<String>> _generateUserItems() {
return List<SelectableItem<String>>.generate(
20,
(index) => SelectableItem<String>(
title: 'User ${index + 1}',
value: 'user_${index + 1}',
),
);
}
}
更多关于Flutter底部弹出选择项插件bottom_sheet_item_selector的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter底部弹出选择项插件bottom_sheet_item_selector的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
bottom_sheet_item_selector
是一个 Flutter 插件,用于在屏幕底部弹出一个选择项列表,用户可以从中选择一个选项。它提供了一种简单的方式来展示底部弹窗,并且可以自定义样式和行为。
安装插件
首先,在 pubspec.yaml
文件中添加依赖:
dependencies:
bottom_sheet_item_selector: ^1.0.0 # 请确保使用最新版本
然后运行 flutter pub get
来安装插件。
使用示例
以下是一个简单的使用示例,展示了如何在 Flutter 中使用 bottom_sheet_item_selector
插件。
import 'package:flutter/material.dart';
import 'package:bottom_sheet_item_selector/bottom_sheet_item_selector.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Bottom Sheet Item Selector Example'),
),
body: Center(
child: ElevatedButton(
onPressed: () {
_showBottomSheet(context);
},
child: Text('Show Bottom Sheet'),
),
),
),
);
}
void _showBottomSheet(BuildContext context) {
BottomSheetItemSelector.show(
context: context,
items: [
BottomSheetItem(title: 'Option 1', onTap: () => _onItemSelected('Option 1')),
BottomSheetItem(title: 'Option 2', onTap: () => _onItemSelected('Option 2')),
BottomSheetItem(title: 'Option 3', onTap: () => _onItemSelected('Option 3')),
],
title: 'Choose an option',
cancelText: 'Cancel',
onCancel: () {
print('Bottom sheet canceled');
},
);
}
void _onItemSelected(String item) {
print('Selected: $item');
}
}