Flutter下拉菜单插件fdropdown的使用

Flutter下拉菜单插件fdropdown的使用

fdropdown 是一个可定制的 Flutter 下拉菜单 UI 插件。本文将通过一个完整的示例来展示如何在 Flutter 应用中使用 fdropdown

准备工作

首先,确保你已经在项目中添加了 fdropdown 依赖。你可以在 pubspec.yaml 文件中添加以下内容:

dependencies:
  fdropdown: ^版本号

然后运行 flutter pub get 来安装依赖。

步骤一:初始化关键组件

我们需要创建一个全局的 GlobalKey 对象,并将其与应用栏 (AppBar) 关联起来。

final GlobalKey selectAreaKey = GlobalKey();

步骤二:关联到目标组件

Scaffold 中设置 AppBarkey 属性为上面创建的 GlobalKey

appBar: AppBar(
  key: selectAreaKey,
  backgroundColor: Colors.blue,
  title: const Text('自定义下拉菜单'),
),

步骤三:展示常用菜单

使用 FDropdown.instance.show 方法来展示常用的下拉菜单。

FDropdown.instance.show(
  distWidgetKey: selectAreaKey,
  allMarginTop: 2,
  allMarginRight: 2,
  child: ListView(
    padding: EdgeInsets.only(),
    shrinkWrap: true,
    children: items.map((e) => Container(
      height: 30,
      alignment: Alignment.center,
      color: Colors.amber,
      margin: EdgeInsets.only(
        bottom: 1
      ),
      child: Text(e),
    )).toList(),
  )
)

步骤四:展示自定义自适应菜单

如果你想展示一个自定义且自适应的下拉菜单,可以调整一些参数,例如背景颜色、对齐方式等。

FDropdown.instance.show(
  distWidgetKey: selectAreaKey,
  allMarginTop: 0,
  isSelfExpand: true,
  align: OverlayAlign.CENTER,
  allBgColor: Color(0x3f000000),
  child: ListView(
    padding: EdgeInsets.only(),
    shrinkWrap: true,
    children: items.map((e) => Container(
      height: 30,
      alignment: Alignment.centerLeft,
      color: Colors.amber,
      margin: EdgeInsets.only(
          bottom: 1
      ),
      child: Text(e),
    )).toList(),
  )
)

完整示例代码

下面是完整的示例代码,展示了如何在 Flutter 应用中使用 fdropdown 插件。

import 'package:fdropdown/fdropdown.dart';
import 'package:flutter/material.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatefulWidget {
  const MyApp({super.key});

  [@override](/user/override)
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  // 目标组件key,必须用到
  final GlobalKey selectAreaKey = GlobalKey();

  // 数据列表
  List<String> items = [
    'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L'
  ];

  [@override](/user/override)
  void dispose() {
    FDropdown.instance.dispose();
    super.dispose();
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      theme: ThemeData(
        useMaterial3: false
      ),
      home: Scaffold(
        appBar: AppBar(
          key: selectAreaKey,
          backgroundColor: Colors.blue,
          title: const Text('自定义下拉菜单'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              MaterialButton(
                onPressed: () =>
                  FDropdown.instance.show(
                    distWidgetKey: selectAreaKey,
                    allMarginTop: 2,
                    allMarginRight: 2,
                    child: ListView(
                      padding: EdgeInsets.only(),
                      shrinkWrap: true,
                      children: items.map((e) => Container(
                        height: 30,
                        alignment: Alignment.center,
                        color: Colors.amber,
                        margin: EdgeInsets.only(
                          bottom: 1
                        ),
                        child: Text(e),
                      )).toList(),
                    )
                  ),
                color: Colors.blue,
                textColor: Colors.white,
                child: Text(
                  '展示常用菜单'
                ),
              ),
              SizedBox(height: 20,),
              MaterialButton(
                onPressed: () =>
                  FDropdown.instance.show(
                    distWidgetKey: selectAreaKey,
                    allMarginTop: 0,
                    isSelfExpand: true,
                    align: OverlayAlign.CENTER,
                    allBgColor: Color(0x3f000000),
                    child: ListView(
                      padding: EdgeInsets.only(),
                      shrinkWrap: true,
                      children: items.map((e) => Container(
                        height: 30,
                        alignment: Alignment.centerLeft,
                        color: Colors.amber,
                        margin: EdgeInsets.only(
                            bottom: 1
                        ),
                        child: Text(e),
                      )).toList(),
                    )
                  ),
                color: Colors.blue,
                textColor: Colors.white,
                child: Text(
                  '展示自适应菜单'
                ),
              )
            ],
          ),
        ),
      ),
    );
  }
}

更多关于Flutter下拉菜单插件fdropdown的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter下拉菜单插件fdropdown的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


fdropdown 是 Flutter 中一个用于创建下拉菜单的第三方插件。它提供了比 Flutter 内置的 DropdownButton 更多自定义选项和功能。以下是如何使用 fdropdown 插件的详细步骤。

1. 添加依赖

首先,你需要在 pubspec.yaml 文件中添加 fdropdown 插件的依赖:

dependencies:
  flutter:
    sdk: flutter
  fdropdown: ^1.1.1  # 请查看最新版本

然后运行 flutter pub get 来安装依赖。

2. 导入包

在你的 Dart 文件中导入 fdropdown 包:

import 'package:fdropdown/fdropdown.dart';

3. 使用 FDropdown

你可以使用 FDropdown 来创建一个下拉菜单。以下是一个简单的示例:

import 'package:flutter/material.dart';
import 'package:fdropdown/fdropdown.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('FDropdown Example'),
        ),
        body: Center(
          child: FDropdownExample(),
        ),
      ),
    );
  }
}

class FDropdownExample extends StatefulWidget {
  @override
  _FDropdownExampleState createState() => _FDropdownExampleState();
}

class _FDropdownExampleState extends State<FDropdownExample> {
  String? selectedValue;

  @override
  Widget build(BuildContext context) {
    return Column(
      mainAxisAlignment: MainAxisAlignment.center,
      children: [
        FDropdown(
          items: ['Option 1', 'Option 2', 'Option 3', 'Option 4'],
          onChanged: (value) {
            setState(() {
              selectedValue = value;
            });
          },
          hint: 'Select an option',
          initialValue: selectedValue,
        ),
        SizedBox(height: 20),
        Text('Selected Value: $selectedValue'),
      ],
    );
  }
}

4. 参数说明

FDropdown 提供了多个参数来自定义下拉菜单的行为和外观:

  • items: 下拉菜单的选项列表。
  • onChanged: 当用户选择一个选项时调用的回调函数。
  • hint: 未选择任何选项时显示的提示文本。
  • initialValue: 初始选中的值。
  • dropdownColor: 下拉菜单的背景颜色。
  • icon: 下拉菜单右侧的图标。
  • iconSize: 图标的大小。
  • iconEnabledColor: 图标在启用状态下的颜色。
  • iconDisabledColor: 图标在禁用状态下的颜色。
  • elevation: 下拉菜单的阴影高度。
  • style: 下拉菜单中文本的样式。
  • selectedItemBuilder: 自定义选中项的显示方式。
  • disabledHint: 下拉菜单禁用时显示的提示文本。

5. 自定义样式

你可以通过 style 参数来自定义下拉菜单中文本的样式,或者通过 selectedItemBuilder 来自定义选中项的显示方式。

FDropdown(
  items: ['Option 1', 'Option 2', 'Option 3', 'Option 4'],
  onChanged: (value) {
    setState(() {
      selectedValue = value;
    });
  },
  hint: 'Select an option',
  initialValue: selectedValue,
  style: TextStyle(color: Colors.blue, fontSize: 16),
  dropdownColor: Colors.white,
  icon: Icon(Icons.arrow_drop_down),
  iconSize: 24,
  iconEnabledColor: Colors.blue,
  iconDisabledColor: Colors.grey,
  elevation: 4,
);

6. 处理空值

如果 items 列表为空,或者 initialValue 不在 items 中,FDropdown 将显示 hintdisabledHint

7. 禁用下拉菜单

你可以通过设置 onChangednull 来禁用下拉菜单:

FDropdown(
  items: ['Option 1', 'Option 2', 'Option 3', 'Option 4'],
  onChanged: null, // 禁用下拉菜单
  hint: 'Select an option',
  initialValue: selectedValue,
);
回到顶部