Flutter下拉菜单插件mirai_dropdown_menu的使用

发布于 1周前 作者 htzhanglong 来自 Flutter

Flutter下拉菜单插件mirai_dropdown_menu的使用

MiraiDevs

联系邮箱: contact@miraidevs.com

描述

MiraiDevs 开发了 Mirai Dropdown Menu 包。

特点

  • 您可以设置一个静态对象列表或从API下载的对象列表。
  • 可以搜索项目…

入门指南

首次查看:

安装

  1. 在您的 pubspec.yaml 文件中添加 mirai_dropdown_menu 作为依赖项。
dependencies:
  mirai_dropdown_menu: <latest_version>
  1. 导入 mirai_dropdown_menu 包。
import 'package:mirai_dropdown_menu/mirai_dropdown_menu.dart';

使用

创建 mirai_dropdown_widget.dart:

class MiraiDropdownWidget<String> extends StatelessWidget {
  const MiraiDropdownWidget({
    Key? key,
    required this.valueNotifier,
    required this.itemWidgetBuilder,
    required this.children,
    required this.onChanged,
    this.underline = false,
    this.showSeparator = true,
    this.exit = MiraiExit.fromAll,
    this.chevronDownColor,
    this.showMode = MiraiShowMode.bottom,
    this.maxHeight,
    this.showSearchTextField = false,
    this.showOtherAndItsTextField = false,
    this.other,
  }) : super(key: key);

  final ValueNotifier<String> valueNotifier;
  final MiraiDropdownBuilder<String> itemWidgetBuilder;
  final List<String> children;
  final ValueChanged<String> onChanged;
  final bool underline;
  final bool showSeparator;
  final MiraiExit exit;
  final Color? chevronDownColor;
  final MiraiShowMode showMode;
  final double? maxHeight;
  final bool showSearchTextField;
  final bool showOtherAndItsTextField;
  final Widget? other;

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MiraiDropDownMenu<String>(
      key: UniqueKey(),
      enable: true,
      space: 4,
      showMode: showMode,
      exit: exit,
      showSeparator: showSeparator,
      children: children,
      itemWidgetBuilder: itemWidgetBuilder,
      onChanged: onChanged,
      maxHeight: maxHeight,
      showOtherAndItsTextField: showOtherAndItsTextField,
      showSearchTextField: showSearchTextField,
      other: other,
      child: Container(
        key: GlobalKey(),
        padding: const EdgeInsets.symmetric(
          horizontal: 14,
        ),
        decoration: BoxDecoration(
          borderRadius: underline ? null : BorderRadius.circular(5.0),
          border: underline
              ? const Border(
            bottom: BorderSide(
              width: 1.0,
              color: Colors.blueGrey,
            ),
          )
              : Border.all(
            color: Colors.blueGrey,
            width: 1.0,
          ),
        ),
        height: 40,
        child: Row(
          mainAxisAlignment: MainAxisAlignment.spaceBetween,
          children: [
            Flexible(
              child: ValueListenableBuilder<String>(
                valueListenable: valueNotifier,
                builder: (_, String chosenTitle, __) {
                  return AnimatedSwitcher(
                    duration: const Duration(milliseconds: 200),
                    child: Text(
                      '$chosenTitle',
                      key: ValueKey<String>(chosenTitle),
                      style: const TextStyle(
                        fontWeight: FontWeight.w600,
                      ),
                      overflow: TextOverflow.ellipsis,
                    ),
                  );
                },
              ),
            ),
            const SizedBox(width: 16),
            FaIcon(
              FontAwesomeIcons.chevronDown,
              color: chevronDownColor ?? AppTheme.keyAppColor,
              size: 12,
            ),
          ],
        ),
      ),
    );
  }
}

创建 mirai_dropdown_item_widget.dart:

class MiraiDropDownItemWidget extends StatelessWidget {
  const MiraiDropDownItemWidget({
    Key? key,
    required this.item,
    required this.isItemSelected,
  }) : super(key: key);

  final String item;
  final bool isItemSelected;
  
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Padding(
      padding: const EdgeInsets.symmetric(
        vertical: 10.0,
        horizontal: 16.0,
      ),
      child: Text(
        item,
        style: const TextStyle(
          color: isItemSelected ? Colors.white : Colors.black,
        ),
      ),
    );
  }
}

然后你可以这样使用 MiraiDropdownWidget:

MiraiDropdownWidget<String>(
  valueNotifier: valueNotifierFirst,
  itemWidgetBuilder: (int index, String? item, {
  bool isItemSelected = false,
}) {
    return MiraiDropDownItemWidget(item: item, isItemSelected: isItemSelected);
  },
  children: listOfItem,
  onChanged: (String value) {
  valueNotifierFirst.value = value;
  },
),

要显示搜索文本字段:

MiraiDropdownWidget<String>(
  valueNotifier: valueNotifierFirst,
  showSearchTextField: true,
  itemWidgetBuilder: (int index, String? item, {
  bool isItemSelected = false,
}) {
    return MiraiDropDownItemWidget(item: item);
  },
  children: listOfItem,
  onChanged: (String value) {
  valueNotifierFirst.value = value;
  },
),

请检查示例以获取更多信息

示例代码

支持

如果您觉得 MiraiDropDown 包符合您的需求,请支持该包。如果愿意,您可以为我买一杯咖啡。

Buy Me A Coffee

对象列表

对象列表的一般搜索

在您的模型中添加 toString() 方法。 例如:

  [@override](/user/override)
  String toString() {
    return 'ProjectModel{number: $number, job: $job, name: $name, title: $title, date: $date, client: $client, progress: $progress, color: $color}';
  } 

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

1 回复

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


当然,以下是如何在Flutter项目中使用mirai_dropdown_menu插件的一个简单示例。mirai_dropdown_menu是一个功能强大的Flutter下拉菜单插件,它提供了丰富的自定义选项和易于使用的API。

首先,确保你已经在pubspec.yaml文件中添加了mirai_dropdown_menu依赖:

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

然后,运行flutter pub get来获取依赖。

接下来,在你的Dart文件中使用MiraiDropdownMenu。以下是一个完整的示例,展示了如何创建一个简单的下拉菜单:

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

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

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

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

class _MyHomePageState extends State<MyHomePage> {
  String selectedValue = 'Option 1';

  final List<String> options = ['Option 1', 'Option 2', 'Option 3'];

  void onChange(String value) {
    setState(() {
      selectedValue = value;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Mirai Dropdown Menu Demo'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              'Selected: $selectedValue',
              style: TextStyle(fontSize: 24),
            ),
            SizedBox(height: 20),
            MiraiDropdownMenu<String>(
              data: options,
              value: selectedValue,
              hint: Text('Select an option'),
              onChanged: onChange,
              itemBuilder: (context, value) {
                return ListTile(
                  leading: Icon(Icons.label),
                  title: Text(value),
                );
              },
              dropdownDecoration: BoxDecoration(
                color: Colors.white,
                borderRadius: BorderRadius.circular(8),
                boxShadow: [
                  BoxShadow(
                    color: Colors.grey.withOpacity(0.5),
                    spreadRadius: 5,
                    blurRadius: 7,
                    offset: Offset(0, 3), // changes position of shadow
                  ),
                ],
              ),
              dropdownMenuItemDecoration: BoxDecoration(
                color: Colors.white,
                border: Border(bottom: BorderSide(color: Colors.grey[300]!)),
              ),
            ),
          ],
        ),
      ),
    );
  }
}

代码说明:

  1. 依赖添加:在pubspec.yaml文件中添加mirai_dropdown_menu依赖。
  2. 导入包:在Dart文件中导入mirai_dropdown_menu包。
  3. 状态管理:使用StatefulWidget来管理下拉菜单的选中状态。
  4. 数据定义:定义一个包含选项的列表options
  5. 下拉菜单:使用MiraiDropdownMenu组件来创建下拉菜单。
    • data:传入选项列表。
    • value:当前选中的值。
    • hint:显示在下拉菜单未选中时的提示文本。
    • onChanged:选中值改变时的回调函数。
    • itemBuilder:自定义每个菜单项的样式。
    • dropdownDecorationdropdownMenuItemDecoration:自定义下拉菜单和菜单项的装饰。

这样,你就可以在Flutter应用中使用mirai_dropdown_menu来创建功能强大的下拉菜单了。根据需求,你可以进一步自定义和扩展这个示例。

回到顶部