广告
返回顶部
首页 > 资讯 > 精选 >Flutter怎么实现自定义下拉选择框
  • 694
分享到

Flutter怎么实现自定义下拉选择框

2023-06-30 00:06:48 694人浏览 独家记忆
摘要

这篇“Flutter怎么实现自定义下拉选择框”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Flutter怎么实现自定义下拉选

这篇“Flutter怎么实现自定义下拉选择框”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Flutter怎么实现自定义下拉选择框”文章吧。

先看效果图:

Flutter怎么实现自定义下拉选择框

关键点:弹出、收回动画、状态改变、选项联动

思路: 我们可以看到一个完整的下拉框有头部和具体的下拉选项两部分组成,头部又和下拉组进行了联动, 把头部当做1个数组,下方选项作为1个数组,两个数组数量一致之间形成一个完整的下拉选择框可以更好的控制联动效果。

首先我们看弹出和收回,我们可以把他看作一个组件的高度由0逐渐扩大再逐渐缩小至0,只要我们对这个组件的高度用动画来进行控制就可以实现,下方有一个黑色透明度渐变,这里我们根据上方弹窗的动画来改变下方黑色阴影的变化即可。

关键代码:

/// 下拉组件@overrideWidget build(BuildContext context) {  return Column(    children: [      _MenuBuilder(        animation: animation,        // 这里显示我们需要的具体下拉框选项内容        child: widget.children[widget.menuController.index],      ),      isshowShadow // 是否显示下方黑色阴影 只有下拉弹出才显示 这个地方我们就可以根据UI设计来进行高度自定义          ? Expanded(              child: InkWell(              child: AnimatedBuilder(                  animation: animation,                  builder: (context, child) {                  // 这里是下拉框下方阴影 点击阴影隐藏下拉框                    return Container(                      width: double.infinity,                      height: MediaQuery.of(context).size.height,                      color: Colors.black                          .withOpacity(animation.value / (widget.height * 3)),                    );                  }),              onTap: () {                widget.menuController.hide();              },            ))          : const SizedBox(),    ],  );}class _MenuBuilder extends StatelessWidget {  final Animation<double> animation;  final Widget child;  const _MenuBuilder({required this.animation, required this.child});// 这里我们主要用动画来控制下拉内容组件的高度  @override  Widget build(BuildContext context) {    return AnimatedBuilder(        child: child,        animation: animation,        builder: (context, child) {          return Container(            color: Colors.white,            height: animation.value,            child: child,          );        });  }

接下来我们看头部设计,头部设计稍微复杂一些,主要还是状态的改变,选项之间的联动,这里我们新建一个状态控制器:主要来对头部的一些状态进行控制,比如点击头部按钮之后的文字or颜色的改变,选择完毕颜色的保存,重置颜色的恢复等一些状态,下方控制器主要就是来控制头部的一些状态。

/// 菜单控制器class MenuController extends ChangeNotifier {  // 当前组件是否显示 默认不显示 针对整个菜单数组  bool isShow = false;  // 显示当前组件title的文本 共用  String title = "";  // 显示哪个下拉框  int index = 0;  // 选择下拉框的的title 这个字段只有在真正选择的时候才会改变  int titleIndex = 0;  /// 更改Title  changeTitle(int titleIndex, String? title) {    this.titleIndex = titleIndex;    this.title = title ?? "";    hide();  }  // 显示下拉 index 为下拉哪一个菜单的index  show(int index) {    this.index = index;    if (!isShow) {      isShow = true;    }    notifyListeners();  }  // 隐藏 取消  hide() {    isShow = false;    notifyListeners();  }}

有了控制器我们还需要对头部数据进行处理,首先我们的头部在没有选择选项的时候会有一个默认的数组,这个是永远不会改变的,所以这个数组一旦设置了就不能改变了,之后我们新建一个动态数组也就是当前显示的数组,这个数组的默认值就是我们未选择选项的默认值,这里我们需要监听头部状态的改变来对显示数组进行处理。

关键代码:重点 主要针对头部状态改变的处理,这块代码搞清楚了,基本就OK了。

@overridevoid initState() {  super.initState();  // changeTitles就是我们的显示数组  changeTitles.addAll(widget.titles);  for (var i = 0; i < changeTitles.length; i++) {  //_chindren 是我们的头部组件数组    _children.add(searchFilter(changeTitles[i], i));  }  widget.menuController.addListener(() {       // 下拉 true 隐藏 false    var isShow = widget.menuController.isShow;        // 改变头部状态    setState(() {      if (widget.menuController.title != "") {      // 说明当前选择了选项 赋值我选择的选项        changeTitles[widget.menuController.titleIndex] =            widget.menuController.title;      } else {      // 为空 说明当前的选项我清空了 赋值初始头部数组的数据        changeTitles[widget.menuController.titleIndex] =            widget.titles[widget.menuController.titleIndex];      }      // currentIndex 当前选择的index 默认-1 用来对比更新头部文字和颜色       // 如果下拉 更新当前选项inedx 如果隐藏说明没有选择任何一个下拉框 置为-1      if (isShow && currentIndex < widget.titles.length) {        currentIndex = widget.menuController.index;      } else {        currentIndex = -1;      }      // 每次下拉收回我们只需改变头部数据即可 changeTitles 永远都是显示的数组 直接全部更新到组件即可      _children.clear();      for (var i = 0; i < changeTitles.length; i++) {        _children.add(searchFilter(changeTitles[i], i));      }    });  });}// 这里就是一个简单的Row数组 按照百分比排列 也可以自定义不同宽度@overrideWidget build(BuildContext context) {  return SizedBox(    height: widget.headHeight ?? 45,    child: Row(children: _children),  );}

主要对头部文本内容以及颜色进行更新,如果当前选项=头部中的选项||或者 选项赋值的名字不等于初始值我们就认为选中了此菜单,从而改变颜色。到这里基本逻辑就梳理清楚了,下拉框样式这个可以自己根据自己的业务进行自定义。

Widget searchFilter(String name, int index) {TextStyle(color: currentIndex == index || widget.titles[index] != name                      ? widget.clickColor                      : widget.defaultColor),}

以上就是关于“Flutter怎么实现自定义下拉选择框”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注编程网精选频道。

--结束END--

本文标题: Flutter怎么实现自定义下拉选择框

本文链接: https://www.lsjlt.com/news/326909.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Flutter怎么实现自定义下拉选择框
    这篇“Flutter怎么实现自定义下拉选择框”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Flutter怎么实现自定义下拉选...
    99+
    2023-06-30
  • Flutter实现自定义下拉选择框的示例详解
    在一些列表页面中,我们经常会有上方筛选项的的需求,点击出现一个下拉菜单,多选、单选、列表选等,而在Flutter中,并没有现成的这样的组件,找第三方的扩展有时候又会受到一定限制,所以...
    99+
    2022-11-13
  • Vue+elementUI下拉框自定义颜色选择器怎么实现
    这篇“Vue+elementUI下拉框自定义颜色选择器怎么实现”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Vue+elem...
    99+
    2023-07-05
  • CSS中怎么自定义select下拉选择框样式
    本篇文章为大家展示了CSS中怎么自定义select下拉选择框样式,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。 首先对于默认的样式: 刚开始想到使用背景,...
    99+
    2022-10-19
  • js实现自定义下拉框
    本文实例为大家分享了js实现自定义下拉框的具体代码,供大家参考,具体内容如下 实现思路: (1)创建一个列表和一个span之类的标签(那个标签都可以), (2)列表的每一项分别绑定点...
    99+
    2022-11-12
  • Vue+elementUI下拉框自定义颜色选择器方式
    目录elementUI下拉框自定义颜色选择器组件的定义父组件使用步骤elementUI中修改下拉框的背景颜色和字体颜色总结elementUI下拉框自定义颜色选择器 组件的定义 1....
    99+
    2023-02-23
    Vue elementUI elementUI下拉框 elementUI自定义颜色选择器
  • PHP中怎么实现下拉框选择
    这篇文章将为大家详细讲解有关PHP中怎么实现下拉框选择,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。< php  //提交下拉框;  //直接饱触发onc...
    99+
    2023-06-17
  • tkinter自定义下拉多选框问题
    目录使用tkinter实现下拉多选框1、选择一些选项2、全选选项总结使用tkinter实现下拉多选框 效果如图: 1、选择一些选项 2、全选选项 代码如下: import tki...
    99+
    2023-01-28
    tkinter下拉多选框 tkinter下拉框 tkinter自定义下拉多选框
  • 怎么用css实现自定义选择框
    这篇文章主要为大家展示了“怎么用css实现自定义选择框”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“怎么用css实现自定义选择框”这篇文章吧。   代码如下:...
    99+
    2022-10-19
  • Flutter实现自定义筛选框的方法
    本篇内容主要讲解“Flutter实现自定义筛选框的方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Flutter实现自定义筛选框的方法”吧!目录一、首先自定义筛选框的按钮视图,布局很简单,一个...
    99+
    2023-06-20
  • JavaScript实现下拉列表选择框
    本文实例为大家分享了JavaScript实现下拉列表选择框的具体代码,供大家参考,具体内容如下 创建一个页面 ** 两个下拉选择框     -...
    99+
    2022-11-12
  • Flutter怎么实现自定义搜索框AppBar
    这篇文章主要讲解了“Flutter怎么实现自定义搜索框AppBar”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Flutter怎么实现自定义搜索框AppBar”吧!介绍开发中,页面头部为搜索...
    99+
    2023-06-30
  • Flutter实现自定义筛选框的示例代码
    目录一、首先自定义筛选框的按钮视图,布局很简单,一个listView就可以搞定。二、定义筛选数据展示列表视图。一、首先自定义筛选框的按钮视图,布局很简单,一个listView就可以搞...
    99+
    2022-11-12
  • jquery实现户籍地选择下拉框
    利用jquery实现户籍地选择下拉框的具体代码,供大家参考,具体内容如下 data.js var data = [{ provname: '浙江省', ...
    99+
    2022-11-12
  • Android如何实现自定义单选多选下拉列表
    这篇文章主要为大家展示了“Android如何实现自定义单选多选下拉列表”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Android如何实现自定义单选多选下拉列表”这篇文章吧。直接上效果:实现方案...
    99+
    2023-05-30
    android
  • 使用jquery怎么实现户籍地选择下拉框
    今天就跟大家聊聊有关使用jquery怎么实现户籍地选择下拉框,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。data.jsvar data = [{&nb...
    99+
    2023-06-15
  • 怎么用php实现下拉框选择日期功能
    本文小编为大家详细介绍“怎么用php实现下拉框选择日期功能”,内容详细,步骤清晰,细节处理妥当,希望这篇“怎么用php实现下拉框选择日期功能”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。HTML基础概念首先了解如...
    99+
    2023-07-05
  • JS怎么判断下拉框被选择
    可以使用JavaScript的`onchange`事件来判断下拉框是否被选择。当下拉框的选项被改变时,`onchange`事件会被触...
    99+
    2023-08-08
    JS
  • Flutter怎么实现自定义themes
    这篇“Flutter怎么实现自定义themes”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Flutter怎么实现自定义th...
    99+
    2023-07-05
  • Android怎么自定义实现下拉刷新效果
    Android中自定义实现下拉刷新效果可以通过自定义View或者使用第三方库来实现。1. 自定义View:- 创建一个继承自View...
    99+
    2023-08-18
    Android
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作