Flutter应用下拉菜单设计DropdownButtonFormField控件介绍

在这里插入图片描述

文章目录

  • DropdownButtonFormField介绍
  • 使用方法
    • 重点代码说明
    • 属性解释
  • 注意事项

DropdownButtonFormField介绍

Flutter 中的 DropdownButtonFormField 是一个用于在表单中选择下拉菜单的控件。它是 DropdownButton 和 TextFormField 的组合,允许用户从一组选项中选择一个值,并将所选值作为表单字段的值。

使用方法

要使用 DropdownButtonFormField,首先需要在 Flutter 项目中添加 flutter/material.dart 包,然后在需要的地方导入它。

import 'package:flutter/material.dart';

然后,在 Flutter 组件中使用 DropdownButtonFormField。以下是一个简单示例:

import 'package:flutter/material.dart';class MusicSettingsPage extends StatefulWidget {const MusicSettingsPage({Key? key}) : super(key: key);_MusicSettingsPageState createState() => _MusicSettingsPageState();
}class _MusicSettingsPageState extends State<MusicSettingsPage> {// 存储每个音乐类型的选择String _selectedExerciseMusic = '默认音乐';String _selectedRestMusic = '默认音乐';String _selectedFinishMusic = '默认音乐';// 可选音乐列表List<String> _exerciseMusics = ['默认音乐', '音乐1', '音乐2', '音乐3'];List<String> _restMusics = ['默认音乐', '音乐1', '音乐2', '音乐3'];List<String> _finishMusics = ['默认音乐', '音乐1', '音乐2', '音乐3'];// 下拉菜单更新选择void _updateExerciseMusic(String? value) {setState(() {_selectedExerciseMusic = value ?? '默认音乐';});}void _updateRestMusic(String? value) {setState(() {_selectedRestMusic = value ?? '默认音乐';});}void _updateFinishMusic(String? value) {setState(() {_selectedFinishMusic = value ?? '默认音乐';});}Widget build(BuildContext context) {return Scaffold(appBar: AppBar(title: Text('音乐设置'),),body: Padding(padding: const EdgeInsets.all(16.0),child: Column(children: <Widget>[// 运动音乐选择DropdownButtonFormField<String>(value: _selectedExerciseMusic,items: _exerciseMusics.map((String music) {return DropdownMenuItem<String>(value: music,child: Text(music),);}).toList(),onChanged: _updateExerciseMusic,decoration: InputDecoration(labelText: '运动音乐',),),SizedBox(height: 16.0),// 休息音乐选择DropdownButtonFormField<String>(value: _selectedRestMusic,items: _restMusics.map((String music) {return DropdownMenuItem<String>(value: music,child: Text(music),);}).toList(),onChanged: _updateRestMusic,decoration: InputDecoration(labelText: '休息音乐',),),SizedBox(height: 16.0),// 结束音乐选择DropdownButtonFormField<String>(value: _selectedFinishMusic,items: _finishMusics.map((String music) {return DropdownMenuItem<String>(value: music,child: Text(music),);}).toList(),onChanged: _updateFinishMusic,decoration: InputDecoration(labelText: '结束音乐',),),],),),);}
}

重点代码说明

              items: _exerciseMusics.map((String music) {return DropdownMenuItem<String>(value: music,child: Text(music),);}).toList(),

这段代码是使用 _exerciseMusics 列表中的元素来生成 DropdownMenuItem 列表,用于填充 DropdownButtonFormField 的下拉菜单选项。

_exerciseMusics.map((String music) { … }):
这里使用了列表 _exerciseMusics 的 map 方法。map 方法会将列表中的每个元素都映射为另一个值,返回一个新的迭代器。
(String music) 是一个参数,表示 map 方法中的每个元素都会作为 music 变量传递给后续的函数。

return DropdownMenuItem<String>(value: music, child: Text(music),):

在 map 方法的每次迭代中,针对列表中的每个 music 元素,会生成一个 DropdownMenuItem 对象。
value: music:这里将 DropdownMenuItem 的 value 属性设置为当前音乐元素的值。在用户选择此选项时,DropdownButtonFormField 将使用这个值。
child: Text(music):这里将 DropdownMenuItem 的 child 属性设置为一个 Text 组件,显示当前音乐元素的文本内容。
.toList():
map 方法返回一个迭代器,通过调用 .toList(),将迭代器转换为一个新的列表。
这个新的列表包含了 DropdownMenuItem 对象,每个对象都代表了 _exerciseMusics 列表中的一个元素对应的下拉菜单选项。
因此,整个代码段的作用是将 _exerciseMusics 列表中的每个音乐元素转换为 DropdownMenuItem 对象,这些对象构成了一个 `List

,可以用作 DropdownButtonFormField的items` 属性,用于显示下拉菜单中的选项。

属性解释

value: 当前选定的值。在组件初始化时,可以将其设置为表单字段的初始值。
items: 下拉菜单中显示的选项列表。这是一个 List <String>,每个元素都是一个 DropdownMenuItem<String> 对象,包含一个值和显示在下拉菜单中的文本部分。

onChanged: 当用户选择新值时触发的回调函数。可以在这里更新 value,以便在用户进行更改时更新表单字段的值。
decoration: 用于设置表单字段的装饰,比如添加标签文本、边框等。

注意事项

DropdownButtonFormField 可以嵌套在 Form 中,这样可以与其他表单字段一起使用,并且可以利用表单验证功能。
如果希望在选择列表中显示更复杂的项目,可以使用自定义 DropdownMenuItem。
可以根据需要设置 icon、iconSize、isExpanded 等属性来定制下拉菜单的外观和行为。
这是一个基本的 DropdownButtonFormField 示例,可以根据需要对其进行定制和扩展,以满足特定的应用程序需求和设计准则。


结束语
Flutter是一个由Google开发的开源UI工具包,它可以让您在不同平台上创建高质量、美观的应用程序,而无需编写大量平台特定的代码。我将学习和深入研究Flutter的方方面面。从基础知识到高级技巧,从UI设计到性能优化,欢饮关注一起讨论学习,共同进入Flutter的精彩世界!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/651947.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python之List列表

1. 高级数据类型 Python中的数据类型可以分为&#xff1a;数字型&#xff08;基本数据类型&#xff09;和非数字型&#xff08;高级数据类型&#xff09; 数字型包含&#xff1a;整型int、浮点型float、布尔型bool、复数型complex 非数字型包含&#xff1a;字符串str、列表l…

SkyWalking 自定义Span并接入告警

图容易被CSDN吞掉&#xff0c;我在掘金也发了&#xff1a;https://juejin.cn/post/7361821913398837248 我就是这么膨胀 最近在做 OpenAI API 套壳&#xff0c;当我使用 okhttp-sse 这个库进行流式内容转发的时候&#xff0c;我发现有些回调方法 SkyWalking 不能抓取到。这就…

【探索Java编程:从入门到入狱】Day2

&#x1f36c; 博主介绍&#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 hacker-routing &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【应急响应】 【Java、PHP】 【VulnHub靶场复现】【面试分析】 &#x1f389;点赞➕评论➕收…

打造智能语音机器人-用语音控制机器人

人工智能现已成为国家发展重大战略&#xff0c;智能语音技术作为人工智能产业链上的关键一环&#xff0c;AI应用成熟的技术之一&#xff0c;人工智能的发展也进入了一个崭新的阶段。那么打造智能语音机器人怎样实现用语音控制机器人呢&#xff1f;和小编一起来看看。 选择合适的…

开箱展示——深圳市雷龙发展的存储卡

最近收到了来自深圳市雷龙发展有限公司寄来的存储卡&#xff0c;奈何最近也没有好的嵌入式项目需要用到&#xff0c;哪这里就简单给大家展示一下吧。 原始包装大概就是这样子了垃&#xff0c;有两个存储芯片和一个简单的转接器&#xff0c;测试的时候可以把芯片焊接到转接器…

机器学习-保险花销预测笔记+代码

读取数据 import numpy as np import pandas as pddatapd.read_csv(rD:\人工智能\python视频\机器学习\5--机器学习-线性回归\5--Lasso回归_Ridge回归_多项式回归\insurance.csv,sep,) data.head(n6) EDA 数据探索 import matplotlib.pyplot as plt %matplotlib inlineplt.hi…

ENVI下基于劈窗算法从MODIS数据中反演海表温度

劈窗算法最初是为反演海面温度开发的&#xff0c;具体地说是针对NOAA/AVHRR的4和5通道设计的&#xff0c;后来也被用来反演地表温度&#xff0c;这种算法较成熟&#xff0c;精度也高。劈窗算法以地表热辐射传导方程为基础&#xff0c;利用10~13μm 大气窗口内&#xff0c;两个相…

【Qt】信号与槽

1 &#x1f351;信号和槽概述&#x1f351; 在 Qt 中&#xff0c;用户和控件的每次交互过程称为⼀个事件。⽐如 “⽤⼾点击按钮” 是⼀个事件&#xff0c;“⽤⼾关闭窗⼝” 也是⼀个事件。每个事件都会发出⼀个信号&#xff0c;例如⽤⼾点击按钮会发出 “按钮被点击” 的信号&…

基于数据挖掘的斗鱼直播数据可视化分析系统

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长 QQ 名片 :) 1. 项目简介 随着网络直播平台的兴起&#xff0c;斗鱼直播作为其中的佼佼者&#xff0c;吸引了大量用户和观众。为了更好地理解和分析斗鱼直播中的数据&#xff0c;本项目介绍了一个基于数据挖掘的斗鱼直播数据…

openjudge_2.5基本算法之搜索_200:Solitaire

题目 200:Solitaire 总时间限制: 5000ms 单个测试点时间限制: 1000ms 内存限制: 65536kB 描述 Solitaire is a game played on a chessboard 8x8. The rows and columns of the chessboard are numbered from 1 to 8, from the top to the bottom and from left to right resp…

架构师系列-Docker(二)-部署微服务

安装部署nacos Nacos是阿里巴巴开源的一款支持服务注册与发现&#xff0c;配置管理以及微服务管理的组件。用来取代以前常用的注册中心&#xff08;zookeeper , eureka等等&#xff09;&#xff0c;以及配置中心&#xff08;spring cloud config等等&#xff09;&#xff0c;N…

数据结构——二叉树练习(深搜广搜)

数据结构——二叉树练习 路径之和深度优先算法和广度优先算法二叉搜索树判断一棵二叉树是否为搜索二叉树和完全二叉树 我们今天来看二叉树的习题&#xff1a; 路径之和 https://leetcode.cn/problems/path-sum-ii/ 这是一个典型的回溯&#xff0c;深度优先算法的题&#xff0c…