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

2023-12-12 09:04

本文主要是介绍第二百零一回 介绍一个三方包open_settings,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 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";elsereturn null;
}

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

这篇关于第二百零一回 介绍一个三方包open_settings的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/484033

相关文章

Java中HashMap的用法详细介绍

《Java中HashMap的用法详细介绍》JavaHashMap是一种高效的数据结构,用于存储键值对,它是基于哈希表实现的,提供快速的插入、删除和查找操作,:本文主要介绍Java中HashMap... 目录一.HashMap1.基本概念2.底层数据结构:3.HashCode和equals方法为什么重写Has

Springboot项目构建时各种依赖详细介绍与依赖关系说明详解

《Springboot项目构建时各种依赖详细介绍与依赖关系说明详解》SpringBoot通过spring-boot-dependencies统一依赖版本管理,spring-boot-starter-w... 目录一、spring-boot-dependencies1.简介2. 内容概览3.核心内容结构4.

setsid 命令工作原理和使用案例介绍

《setsid命令工作原理和使用案例介绍》setsid命令在Linux中创建独立会话,使进程脱离终端运行,适用于守护进程和后台任务,通过重定向输出和确保权限,可有效管理长时间运行的进程,本文给大家介... 目录setsid 命令介绍和使用案例基本介绍基本语法主要特点命令参数使用案例1. 在后台运行命令2.

MySQL常用字符串函数示例和场景介绍

《MySQL常用字符串函数示例和场景介绍》MySQL提供了丰富的字符串函数帮助我们高效地对字符串进行处理、转换和分析,本文我将全面且深入地介绍MySQL常用的字符串函数,并结合具体示例和场景,帮你熟练... 目录一、字符串函数概述1.1 字符串函数的作用1.2 字符串函数分类二、字符串长度与统计函数2.1

zookeeper端口说明及介绍

《zookeeper端口说明及介绍》:本文主要介绍zookeeper端口说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、zookeeper有三个端口(可以修改)aVNMqvZ二、3个端口的作用三、部署时注意总China编程结一、zookeeper有三个端口(可以

Python中win32包的安装及常见用途介绍

《Python中win32包的安装及常见用途介绍》在Windows环境下,PythonWin32模块通常随Python安装包一起安装,:本文主要介绍Python中win32包的安装及常见用途的相关... 目录前言主要组件安装方法常见用途1. 操作Windows注册表2. 操作Windows服务3. 窗口操作

c++中的set容器介绍及操作大全

《c++中的set容器介绍及操作大全》:本文主要介绍c++中的set容器介绍及操作大全,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录​​一、核心特性​​️ ​​二、基本操作​​​​1. 初始化与赋值​​​​2. 增删查操作​​​​3. 遍历方

HTML img标签和超链接标签详细介绍

《HTMLimg标签和超链接标签详细介绍》:本文主要介绍了HTML中img标签的使用,包括src属性(指定图片路径)、相对/绝对路径区别、alt替代文本、title提示、宽高控制及边框设置等,详细内容请阅读本文,希望能对你有所帮助... 目录img 标签src 属性alt 属性title 属性width/h

MybatisPlus service接口功能介绍

《MybatisPlusservice接口功能介绍》:本文主要介绍MybatisPlusservice接口功能介绍,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友... 目录Service接口基本用法进阶用法总结:Lambda方法Service接口基本用法MyBATisP

MySQL复杂SQL之多表联查/子查询详细介绍(最新整理)

《MySQL复杂SQL之多表联查/子查询详细介绍(最新整理)》掌握多表联查(INNERJOIN,LEFTJOIN,RIGHTJOIN,FULLJOIN)和子查询(标量、列、行、表子查询、相关/非相关、... 目录第一部分:多表联查 (JOIN Operations)1. 连接的类型 (JOIN Types)