Flutter下拉选择按钮插件dropdown_button_plus的使用
Flutter下拉选择按钮插件dropdown_button_plus的使用
Getting started 🍺:
在你的pubspec.yaml
文件中添加以下依赖:
dependencies:
dropdown_button_plus: any
import
导入插件包:
import 'package:dropdown_button_plus/dropdown_plus.dart' as plus;
Basic:
使用方式与Flutter SDK中的DropdownButton
相同。
plus.DropdownView<String>(
items: filters, // 下拉选项列表
itemPadding: EdgeInsets.zero, // 设置项内边距为零
itemBuilder: (_, index, select) => ItemMenuString(
label: filters[index], // 每个选项的标签
select: select, // 是否选中
showIndicator: false, // 不显示指示器
mainAxisAlignment: MainAxisAlignment.center, // 主轴居中对齐
),
selectedItemBuilder: (_, index, select) => ItemMenuHeader(
label: filters[index], // 当前选中项的标签
),
),
Plus :
1. 下拉按钮带阴影
plus.DropdownView<String>(
forceWidth: true, // 强制宽度
isDropdown: true, // 是否为下拉模式
isOutsideShadow: true, // 是否显示外部阴影
isPinnedSelected: false, // 是否固定选中项
items: filters, // 下拉选项列表
itemBuilder: (_, index, select) => ItemMenuString(
label: filters[index], // 每个选项的标签
select: select, // 是否选中
),
selectedItemBuilder: (_, index, select) => ItemMenuHeader(
label: '综合排序', // 当前选中项的标签
select: select, // 是否选中
),
),
效果展示:
2. 自定义样式
SizedBox(
height: kMinInteractiveDimension, // 最小交互尺寸
child: DropdownView<String>(
forceWidth: true, // 强制宽度
isDropdown: true, // 是否为下拉模式
isOutsideShadow: true, // 是否显示外部阴影
isPinnedSelected: false, // 是否固定选中项
itemPadding: EdgeInsets.zero, // 设置项内边距为零
itemHeight: MediaQuery.of(context).size.height / 2, // 设置项高度
items: const [''], // 下拉选项列表
itemBuilder: (_, index, select) => ItemMenuOption(
onChanged: widget.onOption, // 自定义事件处理
),
selectedItemBuilder: (_, index, select) => ItemMenuHeader(
label: '对账单', // 当前选中项的标签
select: select, // 是否选中
),
),
),
效果展示:
完整示例代码
以下是一个完整的示例代码,展示了如何使用dropdown_button_plus
插件:
import 'dart:developer';
import 'package:dropdown_button_plus/dropdown_plus.dart' as plus;
import 'package:example/constants.dart';
import 'package:example/widget/dropdown.dart';
import 'package:flutter/material.dart';
import 'widget/menu.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
platform: TargetPlatform.iOS,
primarySwatch: Colors.green,
backgroundColor: Colors.white,
scaffoldBackgroundColor: const Color(0xF5F5F5F5),
),
home: const DropdownPage(title: 'DropdownButton Plus'),
);
}
}
/// Plus: [DropdownPlusView]
/// Flutter SDK Material : [DropdownButton]
class DropdownPage extends StatefulWidget {
const DropdownPage({Key? key, required this.title}) : super(key: key);
final String title;
[@override](/user/override)
State<DropdownPage> createState() => _DropdownPageState();
}
class _DropdownPageState extends State<DropdownPage> {
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text(widget.title), elevation: 0),
body: SingleChildScrollView(
padding: const EdgeInsets.symmetric(vertical: 8),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
/// Basic Flutter SDK Material DropdownButton
const Padding(
padding: EdgeInsets.all(16),
child: Text(
'Basic: DropdownButton',
style: TextStyle(fontSize: 16, fontWeight: FontWeight.bold),
),
),
Material(
color: Theme.of(context).backgroundColor,
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: [
plus.DropdownView<String>(
items: filterSort, // 下拉选项列表
itemPadding: EdgeInsets.zero, // 设置项内边距为零
itemBuilder: (_, index, select) => ItemMenuString(
label: filterSort[index], // 每个选项的标签
select: select, // 是否选中
showIndicator: false, // 不显示指示器
mainAxisAlignment: MainAxisAlignment.center, // 主轴居中对齐
),
selectedItemBuilder: (_, index, select) => ItemMenuHeader(
label: filterSort[index], // 当前选中项的标签
select: select, // 是否选中
),
hintBuilder: (context, focus) => hintWidgetBuilder(
context,
focus,
'Dropdown',
),
),
plus.DropdownView<String>(
isDropdown: true, // 是否为下拉模式
items: filterStatus, // 下拉选项列表
itemPadding: EdgeInsets.zero, // 设置项内边距为零
itemBuilder: (_, index, select) => ItemMenuString(
label: filterStatus[index], // 每个选项的标签
select: select, // 是否选中
showIndicator: false, // 不显示指示器
mainAxisAlignment: MainAxisAlignment.center, // 主轴居中对齐
),
selectedItemBuilder: (_, index, select) => ItemMenuHeader(
label: filterStatus[index], // 当前选中项的标签
select: select, // 是否选中
),
hintBuilder: (context, focus) => hintWidgetBuilder(
context,
focus,
'Pinned',
),
),
],
),
),
/// Plus
const Padding(
padding: EdgeInsets.all(16),
child: Text(
'Plus:',
style: TextStyle(fontSize: 16, fontWeight: FontWeight.bold),
),
),
DropdownPlusView(
onType: _onType,
onOption: _onOption,
onStatus: _onStatus,
),
],
),
),
);
}
void _onType(value) {
log('$value');
}
void _onStatus(value) async {
log('$value');
}
void _onOption(value) {
log('$value');
}
}
更多关于Flutter下拉选择按钮插件dropdown_button_plus的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
1 回复
更多关于Flutter下拉选择按钮插件dropdown_button_plus的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
dropdown_button_plus
是一个 Flutter 插件,它提供了比 Flutter 自带的 DropdownButton
更丰富的功能和自定义选项。使用 dropdown_button_plus
,你可以轻松地创建具有更多样式和交互功能的下拉选择按钮。
安装
首先,你需要在 pubspec.yaml
文件中添加 dropdown_button_plus
依赖:
dependencies:
flutter:
sdk: flutter
dropdown_button_plus: ^1.0.0 # 请检查最新版本
然后运行 flutter pub get
来安装依赖。
基本用法
以下是一个简单的示例,展示了如何使用 dropdown_button_plus
创建一个基本的下拉选择按钮:
import 'package:flutter/material.dart';
import 'package:dropdown_button_plus/dropdown_button_plus.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(title: Text('DropdownButtonPlus Example')),
body: Center(
child: DropdownButtonPlus(
items: [
DropdownMenuItem(value: 'Option 1', child: Text('Option 1')),
DropdownMenuItem(value: 'Option 2', child: Text('Option 2')),
DropdownMenuItem(value: 'Option 3', child: Text('Option 3')),
],
onChanged: (value) {
print('Selected: $value');
},
hint: Text('Select an option'),
),
),
),
);
}
}
主要属性
items
: 一个List<DropdownMenuItem>
,表示下拉菜单中的选项。onChanged
: 当用户选择一个选项时调用的回调函数。hint
: 当没有选择任何选项时显示的提示文本。value
: 当前选中的值。icon
: 下拉按钮右侧的图标。iconSize
: 图标的大小。iconEnabledColor
: 图标启用时的颜色。iconDisabledColor
: 图标禁用时的颜色。elevation
: 下拉菜单的阴影高度。style
: 文本样式。underline
: 下拉按钮下方的下划线。isExpanded
: 是否将下拉按钮的宽度扩展到父容器的宽度。itemHeight
: 下拉菜单中每个选项的高度。dropdownColor
: 下拉菜单的背景颜色。menuMaxHeight
: 下拉菜单的最大高度。selectedItemBuilder
: 自定义选中项的显示方式。
自定义样式
你可以通过设置各种属性来自定义下拉按钮的外观和行为。例如,你可以更改图标、调整菜单的最大高度、设置下拉菜单的背景颜色等。
DropdownButtonPlus(
items: [
DropdownMenuItem(value: 'Option 1', child: Text('Option 1')),
DropdownMenuItem(value: 'Option 2', child: Text('Option 2')),
DropdownMenuItem(value: 'Option 3', child: Text('Option 3')),
],
onChanged: (value) {
print('Selected: $value');
},
hint: Text('Select an option'),
icon: Icon(Icons.arrow_drop_down),
iconSize: 24.0,
iconEnabledColor: Colors.blue,
iconDisabledColor: Colors.grey,
elevation: 8,
style: TextStyle(color: Colors.black, fontSize: 16),
underline: Container(
height: 2,
color: Colors.blueAccent,
),
isExpanded: true,
itemHeight: 48.0,
dropdownColor: Colors.white,
menuMaxHeight: 200.0,
);