Flutter自定义下拉菜单插件quanht_dropdown_custom的使用

Flutter自定义下拉菜单插件quanht_dropdown_custom的使用

简介

在本教程中,我们将详细介绍如何使用quanht_dropdown_custom插件创建自定义下拉菜单。该插件提供了许多功能,例如自动关闭下拉菜单、控制空间不足时的数据列表显示等。

破坏性变更(v0.0.2)

在v0.0.2版本中,quanht_dropdown_custom发生了一些破坏性变更:

  • AppDropList小部件支持数据列表在空间不足时的显示。
  • parentScrollController是一个屏幕滚动控制器,当滚动时会自动关闭下拉菜单。
  • DropListItem类替代了DropdownItem类。
  • onChange回调已被保留,并且在选择或取消选择时被调用。
  • 许多参数已被重命名和更新,请查看文档以获取更新后的参数。

使用指南

简单使用

首先,确保你已经将quanht_dropdown_custom添加到你的pubspec.yaml文件中:

dependencies:
  quanht_dropdown_custom: ^0.0.2

然后,你可以通过以下方式简单地使用AppDropList小部件:

import 'package:quanht_dropdown_custom/quanht_dropdown_custom.dart';

AppDropList(
  onChange: (output) {},
  items: <DropListItem>[],
  label: '@label',
  colorLabel: Colors.black,
  hintText: '@hintxt',
  enabled: true,
  dropdownButtonStyle: const DropdownButtonStyle(
    height: 48,
  ),
  dropdownStyle: const DropdownStyle(elevation: 2),
),
控制自动关闭下拉菜单

如果你希望在滚动时自动关闭下拉菜单,则需要在小部件中添加parentScrollController

import 'package:quanht_dropdown_custom/quanht_dropdown_custom.dart';

class MyHomePage extends StatefulWidget {
  [@override](/user/override)
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  ScrollController scrollController = ScrollController();

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      body: Column(
        children: [
          AppDropList(
            onChange: (output) {},
            items: <DropListItem>[],
            label: 'Label',
            colorLabel: Colors.black,
            hintText: 'Hint text',
            enabled: true,
            dropdownButtonStyle: const DropdownButtonStyle(
              height: 48,
            ),
            dropdownStyle: const DropdownStyle(elevation: 2),
            parentScrollController: scrollController,
          ),
        ],
      ),
    );
  }
}

预览

以下是使用quanht_dropdown_custom插件的几个示例:

Image 1 Image 2 Image 3 Image 4

完整示例

以下是一个完整的示例代码,展示了如何使用quanht_dropdown_custom插件创建一个带有下拉菜单的应用程序:

import 'package:flutter/material.dart';
import 'package:quanht_dropdown_custom/droplist_overlap/droplist.item.dart';
import 'package:quanht_dropdown_custom/droplist_overlap/droplist.overlay.dart';
import 'package:quanht_dropdown_custom/quanht_dropdown_custom.dart';

import 'extension.dart';

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

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Dropdown custom',
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
        useMaterial3: true,
      ),
      home: const MyHomePage(title: 'Dropdown custom'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({super.key, required this.title});

  final String title;

  [@override](/user/override)
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  Format _formatSelect = Format.UNKNOWN;
  ScrollController scrollController = ScrollController();
  final _itemsFormat =
      Format.values.where((v) => v != Format.UNKNOWN).map((element) {
    final index = Format.values.indexOf(element);
    return DroplistItem(
        id: index, nameSelected: element.name, index: index, data: element);
  }).toList();

  void _selectDropdown(DroplistItem item) {
    _formatSelect = item.data;
    setState(() {});
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        backgroundColor: Theme.of(context).colorScheme.inversePrimary,
        title: Text(widget.title),
      ),
      body: Column(
        children: [
          const SizedBox(height: 20),
          Expanded(
            child: SingleChildScrollView(
              controller: scrollController,
              child: Padding(
                padding: const EdgeInsets.symmetric(horizontal: 16.0),
                child: Column(
                  mainAxisAlignment: MainAxisAlignment.center,
                  children: <Widget>[
                    const Text('You just select :'),
                    Text(
                      _formatSelect.name,
                      style: Theme.of(context).textTheme.headlineMedium,
                    ),
                    AppDropList(
                      onChange: (output) => _selectDropdown(output),
                      items: _itemsFormat,
                      label: 'Format',
                      parentScrollController: scrollController,
                      colorLabel: Colors.black,
                      hintText: 'Select format',
                      enabled: true,
                      dropdownButtonStyle: const DropdownButtonStyle(
                        height: 48,
                      ),
                      dropdownStyle: const DropdownStyle(elevation: 2),
                    ),
                    const SizedBox(height: 1000.0)
                  ],
                ),
              ),
            ),
          ),
        ],
      ),
    );
  }
}

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

1 回复

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


当然,以下是如何在Flutter项目中使用quanht_dropdown_custom插件的一个简单示例。这个插件允许你创建自定义的下拉菜单。首先,你需要确保你的pubspec.yaml文件中已经添加了该依赖:

dependencies:
  flutter:
    sdk: flutter
  quanht_dropdown_custom: ^最新版本号 # 请替换为最新的版本号

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

接下来是一个完整的示例代码,展示如何使用quanht_dropdown_custom

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  String? selectedValue;

  @override
  Widget build(BuildContext context) {
    List<DropdownMenuItemModel> dropdownItems = [
      DropdownMenuItemModel(value: 'Option 1', icon: Icons.home, label: 'Home'),
      DropdownMenuItemModel(value: 'Option 2', icon: Icons.settings, label: 'Settings'),
      DropdownMenuItemModel(value: 'Option 3', icon: Icons.account_circle, label: 'Profile'),
    ];

    return Scaffold(
      appBar: AppBar(
        title: Text('Custom Dropdown Menu Example'),
      ),
      body: Center(
        child: QuanhtDropdownCustom(
          items: dropdownItems,
          value: selectedValue,
          hint: Text('Select an option'),
          onChanged: (newValue) {
            setState(() {
              selectedValue = newValue;
            });
          },
          dropdownDecoration: BoxDecoration(
            borderRadius: BorderRadius.circular(10),
            color: Colors.white,
            boxShadow: [
              BoxShadow(
                color: Colors.grey.withOpacity(0.5),
                spreadRadius: 5,
                blurRadius: 7,
                offset: Offset(0, 3), // changes position of shadow
              ),
            ],
          ),
          dropdownButtonDecoration: BoxDecoration(
            borderRadius: BorderRadius.circular(10),
            color: Colors.blue,
          ),
          dropdownButtonIcon: Icon(Icons.arrow_drop_down, color: Colors.white),
          dropdownButtonLabelStyle: TextStyle(color: Colors.white),
          dropdownMenuTextStyle: TextStyle(color: Colors.black),
          dropdownMenuItemDecoration: BoxDecoration(
            borderRadius: BorderRadius.circular(10),
          ),
          dropdownMenuItemSelectedDecoration: BoxDecoration(
            borderRadius: BorderRadius.circular(10),
            color: Colors.grey[200],
          ),
        ),
      ),
    );
  }
}

在这个示例中,我们创建了一个简单的Flutter应用,其中包含一个自定义的下拉菜单。以下是代码的关键部分:

  1. DropdownMenuItemModel:这是一个数据模型类,用于定义下拉菜单中的每个项目。它包含值(value)、图标(icon)和标签(label)。

  2. QuanhtDropdownCustom:这是自定义下拉菜单的组件。我们传递给它以下参数:

    • items:一个DropdownMenuItemModel对象的列表,定义了下拉菜单中的项目。
    • value:当前选中的值。
    • hint:当下拉菜单未选中任何值时显示的提示文本。
    • onChanged:当下拉菜单的值改变时调用的回调函数。
    • 其他装饰参数,如dropdownDecorationdropdownButtonDecoration等,用于自定义下拉菜单的外观。

这个示例展示了如何创建和自定义一个下拉菜单,并处理用户的选择。你可以根据需要进一步定制和扩展这个示例。

回到顶部