flutter 支持二级菜单的组件
时间: 2024-09-19 17:06:49 浏览: 62
flutter ExpansionTile 层级菜单的实现
在 Flutter 中,可以使用 `Expanded`, `ListView` 或者 `Column` 组合 `DropdownButton` 来实现二级菜单的功能。`DropdownButton` 主要用于提供选项让用户从列表中选择,而我们可以通过递归的方式来模拟二级菜单的效果。这里有一个简单的例子:
```dart
import 'package:flutter/material.dart';
class DropdownMenuDemo extends StatefulWidget {
@override
_DropdownMenuDemoState createState() => _DropdownMenuDemoState();
}
class _DropdownMenuDemoState extends State<DropdownMenuDemo> {
List<String> topLevelItems = ['一级菜单1', '一级菜单2'];
Map<String, List<String>> secondLevelItems = {
'一级菜单1': ['二级菜单1.1', '二级菜单1.2'],
'一级菜单2': ['二级菜单2.1', '二级菜单2.2'],
};
String selectedValue;
void _onItemSelected(String item) {
setState(() {
selectedValue = item;
});
if (secondLevelItems.containsKey(item)) {
showDropdown(secondLevelItems[item]);
} else {
print('二级菜单结束');
}
}
Widget showDropdown(List<String> items) {
return DropdownButton<String>(
value: selectedValue ?? '',
items: items.map((item) {
return DropdownMenuItem<String>(
value: item,
child: Text(item),
);
}).toList(),
onChanged: _onItemSelected,
isDense: true, // 如果有很多子项,可以设为 true 来节省空间
);
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text('二级菜单')),
body: Column(
children: [
DropdownButton<String>(
value: selectedValue ?? '',
items: topLevelItems.map((item) {
return DropdownMenuItem<String>(
value: item,
child: ListTile(
title: Text(item),
trailing: showDropdown(secondLevelItems[item]),
),
);
}).toList(),
onChanged: _onItemSelected,
),
],
),
);
}
}
// 使用 DropdownMenuDemo
void main() {
runApp(DropdownMenuDemo());
}
```
这个示例中,当用户点击一个一级菜单项时,会显示对应的二级菜单。二级菜单是在另一个 `DropdownButton` 内部生成的,每次选择一个二级菜单项都会返回顶级菜单,直到所有二级菜单都被选择完。
阅读全文