GithubHelp home page GithubHelp logo

ganzhixiong / gzx_dropdown_menu Goto Github PK

View Code? Open in Web Editor NEW
696.0 19.0 138.0 2.33 MB

自定义功能强大的下拉筛选菜单flutter package,支持iOS和Android

License: MIT License

Kotlin 1.01% Swift 1.22% Objective-C 0.11% Dart 97.66%
flutter flutter-package dart dropdownmenu gzx-dropdown-menu pub flutter-widget

gzx_dropdown_menu's Introduction

gzx_dropdown_menu

Pub Package GitHub Stars GitHub Forks GitHub Issues GitHub License

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


  • 🙀开源不易,麻烦给个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

查看版本更新记录

待办事项

  • 由于GZXDropDownMenu只能在Stack内使用,扩展性还不够强
  • 支持CustomScrollView和NestedScrollView
  • ..........

Gif效果图

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

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

如何使用

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

1、添加gzx_dropdown_menu package

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

  gzx_dropdown_menu: ^3.1.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],
      iconData: Icons.keyboard_arrow_down,
      iconDropDownData: Icons.keyboard_arrow_up,
    ),
    GZXDropDownHeaderItem(
      _dropDownHeaderItemStrings[2],
      style: TextStyle(color: Colors.green),
      iconData: Icons.arrow_upward,
      iconDropDownData: Icons.arrow_downward,
    ),
    GZXDropDownHeaderItem(
      _dropDownHeaderItemStrings[3],
      iconData: Icons.filter_frames,
      iconSize: 18,
    ),
  ],
  // GZXDropDownHeader对应第一父级Stack的key
  stackKey: _stackKey,
  // controller用于控制menu的显示或隐藏
  controller: _dropdownMenuController,
  // 当点击头部项的事件,在这里可以进行页面跳转或openEndDrawer
  onItemTap: (index) {
    if (index == 3) {
      _dropdownMenuController.hide();
      _scaffoldKey.currentState!.openEndDrawer();
    }
  },
  // 头部的高度
  height: 40,
  // 头部背景颜色
  color: Colors.red,
  // 头部边框宽度
  borderWidth: 1,
  // 头部边框颜色
  borderColor: Color(0xFFeeede6),
  // 分割线高度
  dividerHeight: 20,
  // 分割线颜色
  dividerColor: Color(0xFFeeede6),
  // 文字样式
  style: TextStyle(color: Color(0xFF666666), fontSize: 14),
  // 下拉时文字样式
  dropDownStyle: TextStyle(
    fontSize: 14,
    color: Theme.of(context).primaryColor,
  ),
  // 图标大小
  iconSize: 20,
  // 图标颜色
  iconColor: Color(0xFFafada7),
  // 下拉时图标颜色
  iconDropDownColor: Theme.of(context).primaryColor,
),

GZXDropDownMenu

// 下拉菜单,注意GZXDropDownMenu目前只能在Stack内,后续有时间会改进,以及支持CustomScrollView和NestedScrollView
GZXDropDownMenu(
  // controller用于控制menu的显示或隐藏
  controller: _dropdownMenuController,
  // 下拉菜单显示或隐藏动画时长
  animationMilliseconds: 300,
  // 下拉后遮罩颜色
  //maskColor: Theme.of(context).primaryColor.withOpacity(0.5),
  //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: _buildAddressWidget((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) {
          _selectDistanceSortCondition = value;
          _dropDownHeaderItemStrings[2] = _selectDistanceSortCondition.name;
          _dropdownMenuController.hide();
          setState(() {});
        })),
  ],
),

相关Repository

相关文章

捐助开发者

gzx_dropdown_menu's People

Contributors

ganzhixiong avatar josephchenghmlet avatar opensourceweb3 avatar shetz163 avatar vincent-ori avatar zzzj1233 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

gzx_dropdown_menu's Issues

_GZXDropDownHeaderState setsState(() {}) line 64 error

As title stated.

══╡ EXCEPTION CAUGHT BY FOUNDATION LIBRARY ╞════════════════════════════════════════════════════════
I/flutter (19929): The following assertion was thrown while dispatching notifications for GZXDropdownMenuController:
I/flutter (19929): setState() called after dispose(): _GZXDropDownHeaderState#bfc38(lifecycle state: defunct, not
I/flutter (19929): mounted)
I/flutter (19929): This error happens if you call setState() on a State object for a widget that no longer appears in
I/flutter (19929): the widget tree (e.g., whose parent widget no longer includes the widget in its build). This error
I/flutter (19929): can occur when code calls setState() from a timer or an animation callback.
I/flutter (19929): The preferred solution is to cancel the timer or stop listening to the animation in the dispose()
I/flutter (19929): callback. Another solution is to check the "mounted" property of this object before calling
I/flutter (19929): setState() to ensure the object is still in the tree.
I/flutter (19929): This error might indicate a memory leak if setState() is being called because another object is
I/flutter (19929): retaining a reference to this State object after it has been removed from the tree. To avoid memory
I/flutter (19929): leaks, consider breaking the reference to this object during dispose().
I/flutter (19929): 
I/flutter (19929): When the exception was thrown, this was the stack:
I/flutter (19929): #0      State.setState.<anonymous closure> (package:flutter/src/widgets/framework.dart:1105:9)
I/flutter (19929): #1      State.setState (package:flutter/src/widgets/framework.dart:1140:6)
I/flutter (19929): #2      _GZXDropDownHeaderState._onController (package:gzx_dropdown_menu/src/gzx_dropdown_header.dart:64:5)
I/flutter (19929): #3      ChangeNotifier.notifyListeners (package:flutter/src/foundation/change_notifier.dart:206:21)
I/flutter (19929): #4      GZXDropdownMenuController.show (package:gzx_dropdown_menu/src/gzx_dropdown_menu_controller.dart:13:5)
I/flutter (19929): #5      _GZXDropDownHeaderState._menu.<anonymous closure> (package:gzx_dropdown_menu/src/gzx_dropdown_header.dart:124:29)
I/flutter (19929): #6      GestureRecognizer.invokeCallback (package:flutter/src/gestures/recognizer.dart:182:24)
I/flutter (19929): #7      TapGestureRecognizer._checkUp (package:flutter/src/gestures/tap.dart:365:11)
I/flutter (19929): #8      TapGestureRecognizer.acceptGesture (package:flutter/src/gestures/tap.dart:312:7)
I/flutter (19929): #9      GestureArenaManager.sweep (package:flutter/src/gestures/arena.dart:156:27)
I/flutter (19929): #10     _WidgetsFlutterBinding&BindingBase&GestureBinding.handleEvent (package:flutter/src/gestures/binding.dart:222:20)
I/flutter (19929): #11     _WidgetsFlutterBinding&BindingBase&GestureBinding.dispatchEvent (package:flutter/src/gestures/binding.dart:198:22)
I/flutter (19929): #12     _WidgetsFlutterBinding&BindingBase&GestureBinding._handlePointerEvent (package:flutter/src/gestures/binding.dart:156:7)
I/flutter (19929): #13     _WidgetsFlutterBinding&BindingBase&GestureBinding._flushPointerEventQueue (package:flutter/src/gestures/binding.dart:102:7)
I/flutter (19929): #14     _WidgetsFlutterBinding&BindingBase&GestureBinding._handlePointerDataPacket (package:flutter/src/gestures/binding.dart:86:7)
I/flutter (19929): #18     _invoke1 (dart:ui/hooks.dart:250:10)
I/flutter (19929): #19     _dispatchPointerDataPacket (dart:ui/hooks.dart:159:5)
I/flutter (19929): (elided 3 frames from package dart:async)
I/flutter (19929): 
I/flutter (19929): The GZXDropdownMenuController sending notification was:
I/flutter (19929):   Instance of 'GZXDropdownMenuController'
I/flutter (19929): ════════════════════════════════════════════════════════════════════════════════════════════════════

Will submit a new pull request soon.

clone下来显示Your app isn't using AndroidX.

FAILURE: Build failed with an exception.

  • What went wrong:
    Could not resolve all files for configuration ':app:debugCompileClasspath'.

Could not resolve io.flutter:arm64_v8a_debug:1.0.0-9a28c3bcf40ce64fee61e807ee3e1395fd6bd954.
Required by:
project :app
Could not resolve io.flutter:arm64_v8a_debug:1.0.0-9a28c3bcf40ce64fee61e807ee3e1395fd6bd954.
> Could not get resource 'https://jcenter.bintray.com/io/flutter/arm64_v8a_debug/1.0.0-9a28c3bcf40ce64fee61e807ee3e1395fd6bd954/arm64_v8a_debug-1.0.0-9a28c3bcf40ce64fee61e807ee3e1395fd6bd954.pom'.
> Could not HEAD 'https://jcenter.bintray.com/io/flutter/arm64_v8a_debug/1.0.0-9a28c3bcf40ce64fee61e807ee3e1395fd6bd954/arm64_v8a_debug-1.0.0-9a28c3bcf40ce64fee61e807ee3e1395fd6bd954.pom'.
> Read timed out
Could not resolve io.flutter:x86_64_debug:1.0.0-9a28c3bcf40ce64fee61e807ee3e1395fd6bd954.
Required by:
project :app
Could not resolve io.flutter:x86_64_debug:1.0.0-9a28c3bcf40ce64fee61e807ee3e1395fd6bd954.
> Could not get resource 'https://jcenter.bintray.com/io/flutter/x86_64_debug/1.0.0-9a28c3bcf40ce64fee61e807ee3e1395fd6bd954/x86_64_debug-1.0.0-9a28c3bcf40ce64fee61e807ee3e1395fd6bd954.pom'.
> Could not HEAD 'https://jcenter.bintray.com/io/flutter/x86_64_debug/1.0.0-9a28c3bcf40ce64fee61e807ee3e1395fd6bd954/x86_64_debug-1.0.0-9a28c3bcf40ce64fee61e807ee3e1395fd6bd954.pom'.
> Read timed out

  • Try:
    Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

  • Get more help at https://help.gradle.org

BUILD FAILED in 2m 1s
Exception: Gradle task assembleDebug failed with exit code 1
Exited (sigterm)

没有appbar的情况下显示异常

显示异常的情况是需要很高的高度才会显示gridview的内容

// var gridView = GridView.count(
// physics: NeverScrollableScrollPhysics(),
// crossAxisCount: _menuCount,
// childAspectRatio: (_screenWidth / _menuCount) / widget.height,
// children: widget.items.map((item) {
// return _menu(item);
// }).toList(),
// );
var gridView = ListView(
scrollDirection: Axis.horizontal,
physics: NeverScrollableScrollPhysics(),
children: widget.items.map((item) {
return _menu(item);
}).toList(),
);

然后改成这样才会显示正常

多个实例加载时报错

主页用IndexedStack同时加载多个页面,当有两个或以上页面使用此插件时报错:
======== Exception caught by widgets library =======================================================
The following LateError was thrown building GZXDropDownMenu(dirty, dependencies: [_EffectiveTickerMode, MediaQuery], state: _GZXDropDownMenuState#f2693(ticker inactive)):
LateInitializationError: Field '_maskColorOpacity@969011985' has not been initialized.

The relevant error-causing widget was:
GZXDropDownMenu file:///D:/Sky-Eye/code/skyeye-app-flutter/trunk/lib/page/home/tab_alert.dart:393:15
When the exception was thrown, this was the stack:
#0 _GZXDropDownMenuState._maskColorOpacity (package:gzx_dropdown_menu/src/gzx_dropdown_menu.dart)
#1 _GZXDropDownMenuState._mask (package:gzx_dropdown_menu/src/gzx_dropdown_menu.dart:176:47)
#2 _GZXDropDownMenuState._buildDropDownWidget (package:gzx_dropdown_menu/src/gzx_dropdown_menu.dart:206:13)
#3 _GZXDropDownMenuState.build (package:gzx_dropdown_menu/src/gzx_dropdown_menu.dart:86:12)
#4 StatefulElement.build (package:flutter/src/widgets/framework.dart:4612:27)

每个页面的key和GZXDropdownMenuController都是独立的,不知道为什么报这个错误。

Field '_maskColorOpacity@1172011985' has not been initialized

The following LateError was thrown building GZXDropDownMenu(dirty, dependencies: [_EffectiveTickerMode, MediaQuery], state: _GZXDropDownMenuState#610c4(ticker inactive)):
LateInitializationError: Field '_maskColorOpacity@1172011985' has not been initialized.

打算基于Provider去重构

你好,dropdownmenu一股浓浓的iOS味道,跟官方的代码差别很大,另外实际上代码的简洁性上可以优化下,可以基于Provider去做数据管理。这样会更好。

数据过多卡顿

筛选列表大概放入100条Column,每个Colum内有5-6个Container,点击展开搜索条件就会出现非常严重的卡顿,搜索条件是初始化后固定不变的了,不清楚为何展开筛选条件会严重受到列表的影响

能否新增筛选常亮的选项

为了标识当前是筛选的状态 , 希望能在标签上增加常亮的选项 , 或者可以在GZXDropDownHeaderItem里增加TextStyle来控制每一个Item的文字未被激活时显示的样式

NestedScrollView嵌套问题

将下拉菜单作为NestedScrollView的body,上滑动到顶部之后,继续滚动列表导致header中的内容也会跟随上下滑动,这个问题怎么解决一下呢

AnimationController.forward() called after AnimationController.dispose()

Flutter Version

[✓] Flutter (Channel stable, v1.7.8+hotfix.3, on Mac OS X, locale en-SG)
[✓] Android toolchain - develop for Android devices (Android SDK version 29.0.0)
[✓] Xcode - develop for iOS and macOS (Xcode 10.3)
[✓] iOS tools - develop for iOS devices
[✓] Android Studio (version 3.4)
[✓] VS Code (version 1.36.1)

Error Stacktrace

flutter: ══╡ EXCEPTION CAUGHT BY FOUNDATION LIBRARY ╞════════════════════════════════════════════════════════
flutter: The following assertion was thrown while dispatching notifications for GZXDropdownMenuController:
flutter: AnimationController.forward() called after AnimationController.dispose()
flutter: AnimationController methods should not be used after calling dispose.
flutter: 'package:flutter/src/animation/animation_controller.dart':
flutter: Failed assertion: line 451 pos 7: '_ticker != null'
flutter:
flutter: Either the assertion indicates an error in the framework itself, or we should provide substantially
flutter: more information in this error message to help you determine and fix the underlying cause.
flutter: In either case, please report this assertion by filing a bug on GitHub:
flutter:   https://github.com/flutter/flutter/issues/new?template=BUG.md
flutter:
flutter: When the exception was thrown, this was the stack:
flutter: #2      AnimationController.forward (package:flutter/src/animation/animation_controller.dart:451:7)
flutter: #3      _GZXDropDownMenuState._showDropDownItemWidget (package:gzx_dropdown_menu/src/gzx_dropdown_menu.dart:76:19)
flutter: #4      _GZXDropDownMenuState._onController (package:gzx_dropdown_menu/src/gzx_dropdown_menu.dart:43:5)
flutter: #5      ChangeNotifier.notifyListeners (package:flutter/src/foundation/change_notifier.dart:206:21)
flutter: #6      GZXDropdownMenuController.show (package:gzx_dropdown_menu/src/gzx_dropdown_menu_controller.dart:13:5)
flutter: #7      _GZXDropDownHeaderState._menu.<anonymous closure> (package:gzx_dropdown_menu/src/gzx_dropdown_header.dart:123:29)
flutter: #8      GestureRecognizer.invokeCallback (package:flutter/src/gestures/recognizer.dart:182:24)
flutter: #9      TapGestureRecognizer._checkUp (package:flutter/src/gestures/tap.dart:365:11)
flutter: #10     TapGestureRecognizer.acceptGesture (package:flutter/src/gestures/tap.dart:312:7)
flutter: #11     GestureArenaManager.sweep (package:flutter/src/gestures/arena.dart:156:27)
flutter: #12     _WidgetsFlutterBinding&BindingBase&GestureBinding.handleEvent (package:flutter/src/gestures/binding.dart:222:20)
flutter: #13     _WidgetsFlutterBinding&BindingBase&GestureBinding.dispatchEvent (package:flutter/src/gestures/binding.dart:198:22)
flutter: #14     _WidgetsFlutterBinding&BindingBase&GestureBinding._handlePointerEvent (package:flutter/src/gestures/binding.dart:156:7)
flutter: #15     _WidgetsFlutterBinding&BindingBase&GestureBinding._flushPointerEventQueue (package:flutter/src/gestures/binding.dart:102:7)
flutter: #16     _WidgetsFlutterBinding&BindingBase&GestureBinding._handlePointerDataPacket (package:flutter/src/gestures/binding.dart:86:7)
flutter: #20     _invoke1 (dart:ui/hooks.dart:250:10)
flutter: #21     _dispatchPointerDataPacket (dart:ui/hooks.dart:159:5)
flutter: (elided 5 frames from class _AssertionError and package dart:async)
flutter:
flutter: The GZXDropdownMenuController sending notification was:
flutter:   Instance of 'GZXDropdownMenuController'

At line 76 in gzx_dropdown_menu.dart

  _showDropDownItemWidget() {
    int menuIndex = widget.controller.menuIndex;
    if (menuIndex >= widget.menus.length || widget.menus[menuIndex] == null) {
      return;
    }

    _isShowDropDownItemWidget = !_isShowDropDownItemWidget;
    _isShowMask = !_isShowMask;

    _animation = new Tween(begin: 0.0, end: 
    widget.menus[menuIndex].dropDownHeight).animate(_controller)
      ..addListener(() {
        //这行如果不写,没有动画效果
        setState(() {});
      });

    if (_animation.status == AnimationStatus.completed) {
      _controller.reverse();
    } else {
      _controller.forward(); // Error throws here
    }
  }

一直报这个错

The method 'findRenderObject' was called on null.
Receiver: null
Tried calling: findRenderObject()

大佬 GZXDropDownHeader不支持放到AppBar的bottom中吗?

类似下面这样的结构

Scaffold(
      key: _scaffoldKey,
      appBar: AppBar(
         title: "DropDown Menu Demo"
         bottom: PreferredSize(
             child: GZXDropDownHeader,
             preferredSize: Size.fromHeight(50),
          ),
      ),
      body: Stack(
        key: _stackKey,
        children: <Widget>[
          Container(
              child: ListView(),
          ),
          GZXDropDownMenu(),
       ],
     ),
);

限制了父级必须是Stack

在父级结构上,必须是Stack。
感觉使用Overlay实现更多通用,我在使用Overlay实现过程中,遇到了下拉动画如何实现的问题

提几个建议

1、能否把头上的标题改成widget,这样灵活性会更大;
2、能否增加个属性,类似与Expanded的flex,用户可以自定义设定每个菜单头的划分比例,目前是等比划分,字多的显示不全,字少的有空余。

_GZXDropDownHeaderState setsState(() {}) line 64 error

As title stated.

══╡ EXCEPTION CAUGHT BY FOUNDATION LIBRARY ╞════════════════════════════════════════════════════════
I/flutter (19929): The following assertion was thrown while dispatching notifications for GZXDropdownMenuController:
I/flutter (19929): setState() called after dispose(): _GZXDropDownHeaderState#bfc38(lifecycle state: defunct, not
I/flutter (19929): mounted)
I/flutter (19929): This error happens if you call setState() on a State object for a widget that no longer appears in
I/flutter (19929): the widget tree (e.g., whose parent widget no longer includes the widget in its build). This error
I/flutter (19929): can occur when code calls setState() from a timer or an animation callback.
I/flutter (19929): The preferred solution is to cancel the timer or stop listening to the animation in the dispose()
I/flutter (19929): callback. Another solution is to check the "mounted" property of this object before calling
I/flutter (19929): setState() to ensure the object is still in the tree.
I/flutter (19929): This error might indicate a memory leak if setState() is being called because another object is
I/flutter (19929): retaining a reference to this State object after it has been removed from the tree. To avoid memory
I/flutter (19929): leaks, consider breaking the reference to this object during dispose().
I/flutter (19929): 
I/flutter (19929): When the exception was thrown, this was the stack:
I/flutter (19929): #0      State.setState.<anonymous closure> (package:flutter/src/widgets/framework.dart:1105:9)
I/flutter (19929): #1      State.setState (package:flutter/src/widgets/framework.dart:1140:6)
I/flutter (19929): #2      _GZXDropDownHeaderState._onController (package:gzx_dropdown_menu/src/gzx_dropdown_header.dart:64:5)
I/flutter (19929): #3      ChangeNotifier.notifyListeners (package:flutter/src/foundation/change_notifier.dart:206:21)
I/flutter (19929): #4      GZXDropdownMenuController.show (package:gzx_dropdown_menu/src/gzx_dropdown_menu_controller.dart:13:5)
I/flutter (19929): #5      _GZXDropDownHeaderState._menu.<anonymous closure> (package:gzx_dropdown_menu/src/gzx_dropdown_header.dart:124:29)
I/flutter (19929): #6      GestureRecognizer.invokeCallback (package:flutter/src/gestures/recognizer.dart:182:24)
I/flutter (19929): #7      TapGestureRecognizer._checkUp (package:flutter/src/gestures/tap.dart:365:11)
I/flutter (19929): #8      TapGestureRecognizer.acceptGesture (package:flutter/src/gestures/tap.dart:312:7)
I/flutter (19929): #9      GestureArenaManager.sweep (package:flutter/src/gestures/arena.dart:156:27)
I/flutter (19929): #10     _WidgetsFlutterBinding&BindingBase&GestureBinding.handleEvent (package:flutter/src/gestures/binding.dart:222:20)
I/flutter (19929): #11     _WidgetsFlutterBinding&BindingBase&GestureBinding.dispatchEvent (package:flutter/src/gestures/binding.dart:198:22)
I/flutter (19929): #12     _WidgetsFlutterBinding&BindingBase&GestureBinding._handlePointerEvent (package:flutter/src/gestures/binding.dart:156:7)
I/flutter (19929): #13     _WidgetsFlutterBinding&BindingBase&GestureBinding._flushPointerEventQueue (package:flutter/src/gestures/binding.dart:102:7)
I/flutter (19929): #14     _WidgetsFlutterBinding&BindingBase&GestureBinding._handlePointerDataPacket (package:flutter/src/gestures/binding.dart:86:7)
I/flutter (19929): #18     _invoke1 (dart:ui/hooks.dart:250:10)
I/flutter (19929): #19     _dispatchPointerDataPacket (dart:ui/hooks.dart:159:5)
I/flutter (19929): (elided 3 frames from package dart:async)
I/flutter (19929): 
I/flutter (19929): The GZXDropdownMenuController sending notification was:
I/flutter (19929):   Instance of 'GZXDropdownMenuController'
I/flutter (19929): ════════════════════════════════════════════════════════════════════════════════════════════════════

Will submit a new pull request soon.

GZXDropdownMenuBuilder中 dropDownWidget问题

GZXDropdownMenuBuilder(
dropDownHeight: 40 * 8.0,
dropDownWidget: Column(
children: [
Expanded(child: Container()),
Container(height:40),
]
))
当dropDownWidget里边是 Column,子数组为Expanded + 固定高度组件,动画展开的过程中必然会报错。
A RenderFlex overflowed by xx pixels on the bottom

header的宽度问题

因为是用gridview的原因, 而宽高比的_menuCount又是从items的长度获取, item里面又是写死的类,希望改写下GZXDropDownHeader, itemcount由传入值或者可以传入childAspectRatio

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.