Flutter高级下拉菜单插件flutter_advanced_drop_down的使用
Flutter 高级下拉菜单插件 flutter_advanced_drop_down 的使用
特性
- 可自定义的外观,支持
BoxDecoration
- 可选的搜索功能
- 支持创建新项目的“添加”按钮
- 支持加载指示器(全列表和加载更多)
- 可自定义的项目构建器
- 可选的“无选择”选项
- 项目选择回调
- 支持异步数据加载
- 支持使用值通知器进行搜索
开始使用
要使用此包,请在你的 pubspec.yaml
文件中添加 flutter_advanced_dropdown
作为依赖项。
dependencies:
flutter_advanced_dropdown: ^1.0.0
然后,在 Dart 代码中导入该包:
import 'package:flutter_advanced_dropdown/flutter_advanced_dropdown.dart';
使用示例
以下是一个基本示例,展示如何使用 FlutterAdvancedDropDown
小部件:
import 'package:flutter/material.dart';
import 'package:flutter_advanced_dropdown/flutter_advanced_dropdown.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
title: '动态下拉菜单示例',
theme: ThemeData(
colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
useMaterial3: true,
),
home: const MyHomePage(title: '动态下拉菜单示例'),
);
}
}
class MyHomePage extends StatefulWidget {
final String title;
const MyHomePage({super.key, required this.title});
[@override](/user/override)
State<MyHomePage> createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
// 初始化静态列表
final staticList = List<String>.generate(100, (index) => '项目 $index');
// 存储选中的值
String? selectedValue;
// 值通知器用于控制加载状态
final loading = ValueNotifier<bool>(false);
final loadingMore = ValueNotifier<bool>(false);
final listNotifier = ValueNotifier<List<String>>([]);
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
backgroundColor: Theme.of(context).colorScheme.inversePrimary,
title: Text(widget.title),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
const Text(
'请选择一个选项:',
),
FlutterAdvancedDropDown<String>(
builder: (item, _) => Text(item), // 项目构建器
onOpen: () {
loading.value = true;
Future.delayed(
const Duration(seconds: 2),
() {
listNotifier.value = staticList;
loading.value = false;
},
);
},
isLoadingAll: loading, // 全部加载状态
isLoadingMore: loadingMore, // 加载更多状态
listNotifier: listNotifier, // 列表通知器
titleWidget: const Text('请选择一个选项:'), // 标题
label: '请选择一个选项', // 标签
searchBarBuilder: (p0) => TextField(onChanged: (value) async {
if (value.isEmpty) {
listNotifier.value = staticList;
return;
}
loadingMore.value = true;
await Future.delayed(
const Duration(seconds: 2),
() {
listNotifier.value = staticList
.where((element) => element.contains(value))
.toList();
},
);
loadingMore.value = false;
}), // 搜索栏构建器
onSelect: (p0, p1) {
setState(() {
selectedValue = p0;
});
}, // 选择回调
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(10),
border: Border.all(color: Colors.grey),
), // 装饰
fullLoadingWidgetPlaceHolder: const Center(
child: CircularProgressIndicator(
color: Colors.blue,
),
), // 全部加载指示器
loadMoreWidgetPlaceHolder: const LinearProgressIndicator(
color: Colors.blue,
), // 加载更多指示器
),
const SizedBox(height: 20),
Text(
'选中的值: ${selectedValue ?? "无"}',
style: Theme.of(context).textTheme.headlineMedium,
),
],
),
),
);
}
[@override](/user/override)
void initState() {
super.initState();
loading.value = true;
Future.delayed(const Duration(seconds: 2)).then((value) {
loading.value = false;
listNotifier.value = staticList;
});
}
}
更多关于Flutter高级下拉菜单插件flutter_advanced_drop_down的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
1 回复
更多关于Flutter高级下拉菜单插件flutter_advanced_drop_down的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
flutter_advanced_dropdown
是一个 Flutter 插件,它提供了一个高度可定制的下拉菜单组件,适用于需要更复杂交互和样式的场景。这个插件可以帮助你创建比默认 DropdownButton
更高级的下拉菜单。
安装
首先,你需要在 pubspec.yaml
文件中添加依赖:
dependencies:
flutter:
sdk: flutter
flutter_advanced_dropdown: ^1.0.0 # 请使用最新版本
然后运行 flutter pub get
来安装依赖。
基本用法
以下是一个简单的例子,展示了如何使用 flutter_advanced_dropdown
:
import 'package:flutter/material.dart';
import 'package:flutter_advanced_dropdown/flutter_advanced_dropdown.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Advanced Dropdown Example'),
),
body: Center(
child: AdvancedDropdown(
items: [
DropdownMenuItem(child: Text('Option 1'), value: '1'),
DropdownMenuItem(child: Text('Option 2'), value: '2'),
DropdownMenuItem(child: Text('Option 3'), value: '3'),
],
onChanged: (value) {
print('Selected: $value');
},
hint: Text('Select an option'),
),
),
),
);
}
}
参数说明
AdvancedDropdown
组件提供了多个参数,允许你自定义下拉菜单的行为和外观。以下是一些常用的参数:
items
: 一个List<DropdownMenuItem>
,表示下拉菜单中的选项。onChanged
: 当用户选择一个选项时调用的回调函数。hint
: 当下拉菜单未选择任何选项时显示的提示文本。value
: 当前选中的值。disabledHint
: 当下拉菜单被禁用时显示的提示文本。icon
: 下拉菜单右侧的图标。iconSize
: 图标的大小。isDense
: 是否减少下拉菜单的高度。isExpanded
: 是否将下拉菜单的宽度扩展到父容器的宽度。itemHeight
: 每个选项的高度。menuMaxHeight
: 下拉菜单的最大高度。elevation
: 下拉菜单的阴影高度。style
: 下拉菜单文本的样式。dropdownColor
: 下拉菜单的背景颜色。underline
: 下拉菜单底部的下划线样式。selectedItemBuilder
: 自定义选中项的显示方式。
自定义样式
你可以通过 decoration
参数来自定义下拉菜单的样式。例如:
AdvancedDropdown(
items: [
DropdownMenuItem(child: Text('Option 1'), value: '1'),
DropdownMenuItem(child: Text('Option 2'), value: '2'),
DropdownMenuItem(child: Text('Option 3'), value: '3'),
],
onChanged: (value) {
print('Selected: $value');
},
hint: Text('Select an option'),
decoration: InputDecoration(
border: OutlineInputBorder(),
filled: true,
fillColor: Colors.grey[200],
),
)