第二百零一回 介绍一个三方包open_settings

news2024/12/25 12:31:42

文章目录

  • 1. 概念介绍
  • 2 使用方法
  • 3 代码与效果
    • 3.1 示例代码
    • 3.2 运行效果
  • 4. 经验分享

我们在上一章回中介绍了Form Widget相关的内容,本章回中将介绍Form系列组件的验证与提交功能.闲话休提,让我们一起Talk Flutter吧。

1. 概念介绍

我们在这里说的的验证功能与提交功能是指对Form组件中的内容进行验证和提交,它不像TextField一样对单个组件进行验证同,而是对Form组件中的所有组件进行统
一的验证与提交。这也是我们使用Form组件最大的优点。

2 使用方法

整体的思路:先在Form的子组件中实现验证方法和数据保存方法,也就是给子组件(通常是TextFormField组件)的validator和onSaved属性赋值;然后统一进行
验证数据的合法性并且对数据进行保存,这个操作由FormState对象方来完成。
FormState是Form的State类,主要用来对Form中的所有FormField进行统一操作,比如保存数据的操作。我们可以通过Form.of()或者GlobalKey获取该类型
的对象。该类型提供了相关的方法对数据进行统一操作,下面是这些方法的详细内容:

  • validate()方法:主要用来验证数据的合法性;
  • save()方法:主要用来保存数据;
  • reset()方法:主要用来重置数据;

3 代码与效果

3.1 示例代码

final formKey = GlobalKey<FormState>();
AutovalidateMode _autoValidate = AutovalidateMode.disabled;
String? _name = "Default Name";
String? _pwd = "Default Pwd";

//验证和提交和方法,虽然只验证和提交一次,但是它会回调Form中所有子组件的验证和提交方法。
//相当于一次对所有的输入内容进行了验证和提交。
void loginWithForm() {
  //合法性验证成功则保存数据,否则打开自动验证功能,这样在用户输入后会自动关闭错误提示,这种体验比较好
  if (formKey.currentState!.validate()) {
    // _autoValidate = AutovalidateMode.disabled;
    //它会回调TextFormFiled中的onSave方法
    formKey.currentState?.save();
  } else {
    setState(() {
      _autoValidate = AutovalidateMode.always;
    });
  }
  //它会回调validator对应的回方法,成功返回true,错误返回错误信息(在验证方法中),显示在helperText位置
  // formKey.currentState?.validate();
  debugPrint("login clicked");
}

上面的代码中我们主要演示了如何获取FormState对象,并且通过该对象来调用数据验证和保存方法。此外,该对象需要赋值给Form组件的key属性才有效果。详细内容
可以参考上一章回中的示例代码,Form子组件中的数据验证和保存方法也在上一章回的示例代码中。FormState对象不会自动去验证和保存数据,我们把该对象的操作封
装成一个方法,也就是代码中的loginWithForm()方法,然后把该方法赋值给Button的onPress属性,最后把Button组件和Form组件放到同一页面上,点击Button
时就会调用loginWithForm()方法去验证和保存Form组件中的数据,下面是Button的示例代码:

Container(
  width: double.infinity,
  height: 56.0,
  child: ElevatedButton(
    onPressed: () => loginWithForm(),
    child: Text("Login"),
  ),
),

3.2 运行效果

下面是程序的运行效果图,请大家参考:

在这里插入图片描述

4. 经验分享

下面分享一些我在验证数据合法性方法的经验:在Form组件的子组件TextFormField中不要打开自动验证功能(默认关闭),当验证错误时再打开自动验证功能,示例代
码可以参考上一小节中loginWithForm()方法内SetState相关的代码。这样做的好处有以下几点:- 只有主动点击按钮时才会验证数据的合法性; - 如果打开自动验
证会显示helpText中的内容,会让人以为是错误了; - 在验证出错后再开启自动验证,输入正确后就会让helpText中的错误内容消失,因为Form中包含多个子组件,
一个子组件的错误提示内容消失后不会影响其它子组件;下面是验证合法性的示例代码,请大家参考:

//返回有内容时会显示在help位置,而且边框颜色变成红色,返回为Null时不会显示出来
String? _validateName(String? n) {
  if (n!.isEmpty)
    return "name is empty";
  else
    return null;
}

我们把验证数据合法性的代码封装成了一个方法,把该方法赋值给TextFormField组件的validator属性后就可以使用了。上面的代码只验证了输入内容是否为空,大
家可以依据项目的需求来做其它的验证,比如输入内容是否为邮件格式等。注意:只有验证不合法时才返回文字内容,验证合法时返回空对象,因为这里返回的文字内容会
显示在TextFormField组件的helpText位置。关于经验分享中的内容,我建议大家自己动手实践,因为这部分内容是动态的,需要实际操作才能体会到它的好处,
此外,大家可以调整错误提示文字的颜色,以及TextFormField组件获取焦点后的颜色,我把这样内容添加到了代码的注释中,大家可以参考注释进行调整。
看官们,关于"Form系列组件的验证与提交功能"相关的内容就介绍到这里,欢迎大家在评论区交流与讨论!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【JAVA基础】----第一天

【JAVA基础】----第一天 命名规则注释方式对HelloWorld代码进行解释常量&#xff0c;进制转换和机器码展现计算过程常量类型1.字符串常量2.整数常量 提供了四种表现形式2.1 二进制2.2 八进制2.3 十进制2.4 十六进制2.5 进制之间的转化2.5.1 其他进制转化为十进制2.5.2 十进制转…

阿里云大数据工程师ACP认证,今天终于搞定了,87分

为啥我得去考个阿里云大数据工程ACP证书&#xff1f; 首先得声明&#xff0c;这不是因为我对阿里有多痴迷&#xff0c;也不是因为我想把我的简历装饰得花里胡哨。实际上&#xff0c;这更像是一场自我挑战的游戏。我就是一根筋&#xff0c;当时公司要求考阿里云大数据工程师认证…

基于FPGA的视频接口之高速IO

简介 相对于其他视频接口来说,高速IO接口(以Xilinx公司为例,spartan 6系列的GTP、Artix7系列的GTP,KENTEX7系列的GTX和GTH等)具有简化设计、充分利用FPGA资源、降低设计成本等功能。 高速IO接口传输视频,一般会被拓展为万兆以太网、40G以太网、10G光纤、40G光纤、3G-SDI、…

【单调栈】【二分查找】LeetCode: 2454.下一个更大元素 IV

作者推荐 【动态规划】【广度优先】LeetCode2258:逃离火灾 本文涉及的基础知识点 二分查找算法合集 单调栈 题目 给你一个下标从 0 开始的非负整数数组 nums 。对于 nums 中每一个整数&#xff0c;你必须找到对应元素的 第二大 整数。 如果 nums[j] 满足以下条件&#xff…

极狐GitLab CI/CD 变量黑魔法之预定义变量

目录 预定义变量 commit 相关 Job 相关 Pipeline 相关 镜像仓库有关 极狐GitLab CI/CD 变量是指一系列的环境变量&#xff0c;用来帮助我们控制 CI/CD Job 或 Pipeline 的行为&#xff0c;存储一些可以复用的信息&#xff0c;避免在 .gitlab-ci.yml 中形成硬编码。 极狐G…

2024年湖北省高空作业证报名考试取证周期些许夸张

2024年湖北省高空作业证报名考试取证周期些许夸张 湖北省高空作业证报名考试取证周期些许夸张&#xff0c;快的话一周左右也是可以的。湖北省高空作业证一般指的都是湖北省应急管理厅下发的高空作业“特种作业操作证”。主要分为&#xff1a;高处安装拆除维修作业和登高架设作…

基于laravel、vue开发的医院手术麻醉管理系统源码,自主版权,二开快捷。

医院手术麻醉管理系统源码&#xff0c;自主版权&#xff0c;二开快捷&#xff0c;有演示 技术架构&#xff1a;PHP、 js 、mysql、laravel、vue2 手术麻醉临床信息管理系统是数字化手段应用于手术过程中的重要组成部分&#xff0c;用数字形式获取并存储手术相关信息&#xff…

Mybatis之自定义映射resultMap

学习的最大理由是想摆脱平庸&#xff0c;早一天就多一份人生的精彩&#xff1b;迟一天就多一天平庸的困扰。各位小伙伴&#xff0c;如果您&#xff1a; 想系统/深入学习某技术知识点… 一个人摸索学习很难坚持&#xff0c;想组团高效学习… 想写博客但无从下手&#xff0c;急需…

【愚公系列】2023年12月 HarmonyOS教学课程 015-ArkUI组件(Radio)

&#x1f3c6; 作者简介&#xff0c;愚公搬代码 &#x1f3c6;《头衔》&#xff1a;华为云特约编辑&#xff0c;华为云云享专家&#xff0c;华为开发者专家&#xff0c;华为产品云测专家&#xff0c;CSDN博客专家&#xff0c;CSDN商业化专家&#xff0c;阿里云专家博主&#xf…

【51单片机系列】文字取模软件使用

软件链接&#xff1a;https://pan.baidu.com/s/1k-ND9vJReW_KHMWx8uwpcQ?pwdgz8w 提取码&#xff1a;gz8w 双击打开软件&#xff0c;选择【基本操作】->【新建图像】&#xff0c;设置图像的宽度和高度为8。点击确定后将在显示窗口出现一个8x8的白色格子&#xff0c;类似于…

jupyter报错KeyError: ‘icosapent‘

指的是未找到关键词 代码想在一个pkl文件里找到关键词对应的值&#xff0c;然后报了这个错 尝试直接双击pkl文件&#xff0c;显示&#xff1a; 这个意思不是说这个文件保存失败&#xff0c;也不是说这个文件是坏的&#xff0c;而是jupyter无法读取这个格式。 换成pycharm运行…

Chrome谷歌浏览器安装VUE调试插件

访问gitee的vue-devtools 并下载 gitee地址&#xff1a;https://gitee.com/zhang_banglong/vue-devtools 也可以访问git的地址&#xff1a;https://github.com/vuejs/devtools 解压&#xff0c;放到自己的目录下 打开控制面板&#xff08;管理员&#xff09;&#xff0c;进入…

STM32超声波——HC_SR04

文章目录 一.超声波图片二.时序图三.超声波流程四.单位换算五.取余计算六.换算距离七.超声波代码 一.超声波图片 测量距离&#xff1a;2cm——400cm 二.时序图 (1).以下时序图要先提供一个至少10us的脉冲触发信号&#xff0c;告诉单片机我准备好了&#xff0c;然后该超声波…

WordPress如何搭建多站点

这边之前有讲到过wordpress站中站&#xff08;栏目站&#xff09;建站教程&#xff0c;同样的也有讲到过WordPress开启多站点配置&#xff0c;两种方法都是用来搭建子站点的&#xff0c;而开启多站点的方式不同于普通搭建站中站&#xff0c;多站点配置开启&#xff0c;是可以实…

进程的同步和异步、进程互斥

一、进程同步和异步 同步&#xff08;Synchronous&#xff09;&#xff1a; 同步指的是程序按照顺序执行&#xff0c;一个操作完成后才能进行下一个操作。在多进程或多线程的环境中&#xff0c;同步意味着一个进程&#xff08;或线程&#xff09;在执行某个任务时&#xff0c;…

AttributeError: module ‘scrapy‘ has no attribute ‘Filed‘

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

02-Nacos和Eureka的区别与联系

Nacos和Eureka的区别 联系 Nacos和Eureka整体结构类似: 都支持服务注册, 服务拉取, 采用心跳方式对服务提供者做健康监测的功能 区别 Nacos支持服务端主动检测服务提供者状态: 临时实例采用心跳模式,非临时实例采用主动检测模式但对服务器压力比较大(不推荐) 心跳模式: 服务…

使用NCNN在华为M5部署MobileNet-SSD

一、下载ncnn-android-vulkan ncnn-android-vulkan.zip 文件是一个压缩文件&#xff0c;其中包含了 ncnn 框架在 Android 平台上使用 Vulkan 图形库加速的相关文件和代码。 在 Android 平台上&#xff0c;ncnn 框架可以利用 Vulkan 的并行计算能力来进行神经网络模型的推理计…

智能优化算法应用:基于混合蛙跳算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于混合蛙跳算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于混合蛙跳算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.混合蛙跳算法4.实验参数设定5.算法结果6.…

西工大网络空间安全学院计算机系统基础实验二(phase_2下——漫漫深夜过后的黎明!!!)

内存地址内存地址中的数注释指向这块内存的寄存器0xffffd0e8函数phase_2的栈帧0xffffd0e40xffffd0f4函数phase_2的栈帧0xffffd0e00x5655b7b0函数phase_2的栈帧0xffffd0dc0x565566ca函数read_six_numbers的返回地址&#xff0c;函数phase_2的栈帧0xffffd0d80x5655af64旧%ebx的值…