Flutter自定义功能强大的下拉筛选菜单gzx_dropdown_menu-程序员宅基地

技术标签: dart  flutter  Flutter  

gzx_dropdown_menu是一个Flutter自定义功能强大的轻量级下拉筛选菜单Package,它支持iOS和Android。

Pub Package GitHub Stars GitHub Forks GitHub Issues GitHub License


  • 开源不易,麻烦给个Star️吧!我会根据大家的关注度和个人时间持续更新代码!
  • 如你想接收更新消息,你可以Watch下,有问题请提到Issues。

导航

功能介绍

A custom is strong dropdown menu for Flutter. Easy to use and powerful for customization, it’s up to you what you want to display in the dropdown menu!

  • Custom dropdown header
  • Custom dropdown header item
  • Custom dropdown menu
  • Custom dropdown menu animation
  • Control dropdown menu show or hide

查看版本更新记录

待办事项

Gif效果图

效果图展示了仿美团和淘宝的下拉筛选菜单。

  • 美团的代码就在这个仓库的example目录下
  • 淘宝的代码在Flutter 淘宝

如何使用

目前已发布到Pub,你可以在Pub官网查看最新的版本和更新说明!去Pub官网查看

1、添加gzx_dropdown_menu package

打开pubspec.yaml文件
添加如下代码

  gzx_dropdown_menu : ^3.0.0

添加后打开Terminal,执行flutter packages get

2、使用

  • 强烈建议你先clone下本仓库
  • 然后运行下看下效果
  • 打开本仓库example项目下的gzx_dropdown_menu_test_page.dart文件自己看。

没空编辑文字了,而且说这么多还不如你直接运行下看下效果,然后看下代码,就知道如何使用了。

算了还是简单说下吧!!!
你只需要将GZXDropDownHeader和GZXDropDownMenu嵌套到你的代码中即可

GZXDropDownHeader

这里要注意了,这些参数不是必须要要写的,我写出来只是让你知道强大的自定义功能,实际上就前面三个参数是必填的

  // 下拉菜单头部
  GZXDropDownHeader(
    // 下拉的头部项,目前每一项,只能自定义显示的文字、图标、图标大小修改
    items: [
      GZXDropDownHeaderItem(_dropDownHeaderItemStrings[0]),
      GZXDropDownHeaderItem(_dropDownHeaderItemStrings[1]),
      GZXDropDownHeaderItem(_dropDownHeaderItemStrings[2], style: TextStyle(color: Colors.green)),
      GZXDropDownHeaderItem(_dropDownHeaderItemStrings[3], iconData: Icons.filter_frames, iconSize: 18),
    ],
    // GZXDropDownHeader对应第一父级Stack的key
    stackKey: _stackKey,
    // controller用于控制menu的显示或隐藏
    controller: _dropdownMenuController,
    // 当点击头部项的事件,在这里可以进行页面跳转或openEndDrawer
    onItemTap: (index) {
    
      if (index == 3) {
    
        _scaffoldKey.currentState.openEndDrawer();
        _dropdownMenuController.hide();
      }
    },
    // 头部的高度
    height: 40,
    // 头部背景颜色
    color: Colors.red,
    // 头部边框宽度
    borderWidth: 1,
    // 头部边框颜色
    borderColor: Color(0xFFeeede6),
    // 分割线高度
    dividerHeight: 20,
    // 分割线颜色
    dividerColor: Color(0xFFeeede6),
    // 文字样式
    style: TextStyle(color: Color(0xFF666666), fontSize: 13),
    // 下拉时文字样式
    dropDownStyle: TextStyle(
      fontSize: 13,
      color: Theme.of(context).primaryColor,
    ),
    // 图标大小
    iconSize: 20,
    // 图标颜色
    iconColor: Color(0xFFafada7),
    // 下拉时图标颜色
    iconDropDownColor: Theme.of(context).primaryColor,
  ),

GZXDropDownMenu

  // 下拉菜单
  GZXDropDownMenu(
    // controller用于控制menu的显示或隐藏
    controller: _dropdownMenuController,
    // 下拉菜单显示或隐藏动画时长
    animationMilliseconds: 500,
    // 下拉后遮罩颜色
    maskColor: Colors.red.withOpacity(0.5),
    dropdownMenuChanging: (isShow, index) {
    
      setState(() {
    
        _dropdownMenuChange = '(正在${isShow ? '显示' : '隐藏'}$index)';
        print(_dropdownMenuChange);
      });
    },
    dropdownMenuChanged: (isShow, index) {
    
      setState(() {
    
        _dropdownMenuChange = '(已经${isShow ? '显示' : '隐藏'}$index)';
        print(_dropdownMenuChange);
      });
    },    
    // 下拉菜单,高度自定义,你想显示什么就显示什么,完全由你决定,你只需要在选择后调用_dropdownMenuController.hide();即可
    menus: [
      GZXDropdownMenuBuilder(
          dropDownHeight: 40 * 8.0,
          dropDownWidget: _buildQuanChengWidget((selectValue) {
    
            _dropDownHeaderItemStrings[0] = selectValue;
            _dropdownMenuController.hide();
            setState(() {
    });
          })),
      GZXDropdownMenuBuilder(
          dropDownHeight: 40 * 8.0,
          dropDownWidget: _buildConditionListWidget(_brandSortConditions, (value) {
    
            _selectBrandSortCondition = value;
            _dropDownHeaderItemStrings[1] =
            _selectBrandSortCondition.name == '全部' ? '品牌' : _selectBrandSortCondition.name;
            _dropdownMenuController.hide();
            setState(() {
    });
          })),
      GZXDropdownMenuBuilder(
          dropDownHeight: 40.0 * _distanceSortConditions.length,
          dropDownWidget: _buildConditionListWidget(_distanceSortConditions, (value) {
    
            _dropDownHeaderItemStrings[2] = _selectDistanceSortCondition.name;
            _selectDistanceSortCondition = value;
            _dropdownMenuController.hide();
            setState(() {
    });
          })),
    ],
  )

相关Repository

相关文章

捐助开发者

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/oHaiKuoTianKong1682/article/details/115410114

智能推荐

正点原子的串口助手XCOM V2.0编码问题-程序员宅基地

文章浏览阅读8k次,点赞4次,收藏11次。该串口助手文本和16进制之间的转换是通过GBK2312来实现的,我还一直以为是Unicode方式如下以“博客园”三个汉字为例:_xcom v2.0

最新opencv-c++安装及配置教程(VS2019 C++ & opencv4.4.0)_c++ opencv配置-程序员宅基地

文章浏览阅读5.2w次,点赞104次,收藏458次。以前写过opencv python的安装教程,后来有一些同学开始私信我如何安装及配置opencv c++。本文是以最新的版本入手,一步步详解opencv c++ 的安装及配置过程。:第一步,下载解压opencv 算法库进入到以下链接:https://opencv.org/releases/ , 点击Windows,即可下载。其他系统可忽略本教程。笔者下载的是opencv 4.4.0 ,如果想尝试预发行版,可以选择opencv 4.5.0。下载之后双击,在抽取文件的目录中选择你想要存放的磁盘和文件即_c++ opencv配置

小蔺的米哈游数据分析师之路——MYSQL篇增删改查篇-程序员宅基地

文章浏览阅读609次。开三方了,开始逼签[牛泪],秋招基本结束,先签一个保底了,三方只能违约一次留给成都华子。内推成功率大大增加!马上面试了[赞][赞][赞][赞][赞][赞][赞]内推码:NTAM81Q投递地址如下!公司是华橙网络,岗位是嵌入式软件开发,学历是硕士985,地点是杭州,校招薪资是20*15,每天餐补17,晚上10点以后打车报销,公积金12%。投递岗位:结构工程师base:东莞投递时间:2023/8/11OPPO三面是hr面,整体感觉挺糟糕的,面试官全程很严肃,问你问题你回答她始终低头记录,对于你的回。

spark常见RDD练习_spark rdd有哪些经典练习案例-程序员宅基地

文章浏览阅读2.1k次。Spark 常用RDD练习其实还是推荐这个网站,写的很棒,点我一、Transformation1 map Applies a transformation function on each item of the RDD and returns the result as a new RDD. (返回一个新的RDD,该RDD有每一个输入元素经过func函数转换后组成)def map[..._spark rdd有哪些经典练习案例

(python)正则表达式提取字符串中的各种信息(持续更新)_正则表达式 获取所有内容(1)-程序员宅基地

文章浏览阅读275次,点赞4次,收藏6次。前两位数字代表省级行政区,中间两位数字代表市级行政区,后两位数字代表县级行政区、县市辖区或直辖市的行政区划。手机号码有自己特定的特征,比如1开头,手机号码长度 11位,一般来说,中国的邮政编码由6位数字组成。省级行政区 市级行政区 县级行政区。不同运营商的号段分布。

方舟编译器最新技术细节,2024年最新简短的面试总结-程序员宅基地

文章浏览阅读217次,点赞5次,收藏3次。希望本文对你有所启发,有任何面试上的建议也欢迎留言分享给大家。好了,今天的分享就到这里,如果你对在面试中遇到的问题,或者刚毕业及工作几年迷茫不知道该如何准备面试并突破现状提升自己,对于自己的未来还不够了解不知道给如何规划,来看看同行们都是如何突破现状,怎么学习的,来吸收他们的面试以及工作经验完善自己的之后的面试计划及职业规划。好了~如果你看到了这里,觉得文章写得不错就给个赞呗?如果你觉得那里值得改进的,请给我留言。一定会认真查询,修正不足。

随便推点

Python利用fitz库提取pdf中的图片(针对多种类型pdf)_import fitz-程序员宅基地

文章浏览阅读2.3w次,点赞17次,收藏98次。目录一. 安装fitz二. pdf文件格式问题2.1 pdf文件存在多种格式2.2 分析问题三. 代码一. 安装fitz安装:需要安装fitz和PyMuPDF,否则会报如下错误:ModuleNotFoundError: No module named ‘frontend’pip install fitz PyMuPDF二. pdf文件格式问题2.1 pdf文件存在多种格式pdf文件的格式有好几种,用Adobe Acrobat比较正常的如下所示:这种类型的pdf文件可以比较正常地提取里面的图片_import fitz

for循环倒序java_for循环-程序员宅基地

文章浏览阅读5.4k次。除了while和do while循环,Java使用最广泛的是for循环。for循环的功能非常强大,它使用计数器实现循环。for循环会先初始化计数器,然后,在每次循环前检测循环条件,在每次循环后更新计数器。计数器变量通常命名为i。我们把1到100求和用for循环改写一下:// for----public class Main {public static void main(String[] arg..._java for 倒序

VS中未定义标识符cout,endl_未定义标识符 "endl-程序员宅基地

文章浏览阅读1w次,点赞6次,收藏10次。VS中未定义标识符vs2017中显示未定义标识符cout,endl。一种方法是:先看有没有包含输入输出流#include,以及命名空间using namespace std;第二种:如果上面都已包含,还是显示未定义标识符的话,检查一下,#include"pch.h"是否是在#include上面我就是犯了第二个错误..._未定义标识符 "endl

python 实现AES-CMAC算法验证_aescmac算法验证-程序员宅基地

文章浏览阅读797次,点赞7次,收藏14次。如果你也是看准了Python,想自学Python,在这里为大家准备了丰厚的免费。_aescmac算法验证

VUE实现网页中滚动鼠标时导航背景颜色透明度的改变_vue可以监听鼠标滚轮滑动,导航条透明度变化-程序员宅基地

文章浏览阅读2.9k次,点赞11次,收藏28次。1、HTML<div id="topNav" :style="topNavBg"> 这里是导航内容</div>2、JSexport default { data () { return { topNavBg: { backgroundColor: '' } } }, mounted () { window.addEventListener('scroll', this.handleScroll) // 监听_vue可以监听鼠标滚轮滑动,导航条透明度变化

【数据结构】单链表-练习_设 l 为带头结点的单链表,编写算法实现从尾到头反向输出每个结点的值-程序员宅基地

文章浏览阅读191次。2. 每当访问一个结点时,先递归输出它后面的结点,再输出该结点自身,这样链表就反向输出了。2. 将上述单链表中的元素按从头到尾的顺序,使用头插法新建一个链表 reverse;【题目】设 L 为带头结点的单链表,编写算法实现从尾到头反向输出每个结点的值。3. 打印输出 reverse 中的元素。【思路】 1. 尾插法建立单链表 L;【答案】 1. 建立一个单链表;_设 l 为带头结点的单链表,编写算法实现从尾到头反向输出每个结点的值

推荐文章

热门文章

相关标签