第三百零七回

文章目录

  • 1. 概念介绍
  • 2. 使用方法
  • 3. 示例代码
  • 4. 内容总结

我们在上一章回中介绍了"如何在输入框中提示错误"相关的内容,本章回中将介绍如何在输入框中处理光标.闲话休提,让我们一起Talk Flutter吧。

在这里插入图片描述

1. 概念介绍

我们在使用TextField组件作为输入框时默认情况下会自动获取光标(或者叫焦点),此时它会自动唤起系统中的输入法键盘。也可以通过组件的autoFocus属性来配置
是否自动获取光标。如果光标离开输入框时我们如何得知?这便是本章回中将要介绍的内容。

2. 使用方法

我们可以使用TextFiled组件的focusNode属性来监听光标在输入框中的变化,接下来我们将介绍详细的使用方法:

  • 创建一个FocusNode类型的对象;
  • 使用FocusNode对象的hasFocus成员来判断输入框是否获取到了光标;
  • 给FocusNode对象添加监听器,用来监听光标的变化;
  • 使用完毕后移除FocusNode对象中的监听器;
    我们常用的做法是把第二步中的内容封装成一个监听器,在监听器中判断是否获取到了光标,然后分别做不同的业务处理。我们将在后面的小节中通过示例代码来演示。

3. 示例代码

final FocusNode pwd1FocusNode = FocusNode();

void _handlePwd1FocusChanged() {
  if(!pwd1FocusNode.hasFocus) {
    setState(() {
      if(pwdValue == "" || pwdValue.isEmpty) {
        isPwdEmpty = true;
      }else {
        isPwdEmpty = false;
      }
    });
  }
}



void initState() {
  super.initState();
  ///添加监听器
  pwd1FocusNode.addListener(_handlePwd1FocusChanged);
}


void dispose() {
  ///移除监听器
  pwd1FocusNode.removeListener(_handlePwd1FocusChanged);
  pwd1FocusNode.dispose();

  super.dispose();
}

TextField(
  autofocus: true,
  keyboardType: TextInputType.number,

 ///添加光标监听器
 focusNode: pwd1FocusNode,

  ///这个值是输入框中所有的内容,而不是当前输入的某个内容
  onChanged: (value) {
    debugPrint("hello onchanged $value");
  },

 decoration: const InputDecoration(
    ///属性值不为空时(!= null)显示errorText,
    errorText: isPwdEmpty? "password is empty": null,

    ///失去焦点并且errorTest的值不为null时就显示
    errorBorder: OutlineInputBorder(
      borderSide: const BorderSide(color:Colors.red,width: 1),
      borderRadius: BorderRadius.circular(16),
    ),
    ///获得售点并且errorTest的值不为null时就显示
    focusedErrorBorder: OutlineInputBorder(
      borderSide: const BorderSide(color:Colors.red,width: 1),
      borderRadius: BorderRadius.circular(16),
    ),
 
  ),
  //是否显示为密码形式,true时显示为小圆点
  obscureText: false,
),

我们在上面的示例代码中创建了FocusNode类型的对象pwd1FocusNode,并且给他添加了监听器,在页面关闭时移除监听器。我们把监听器封装成了独立的方法,在方法
中更新isPwdEmpty变量的值,这样就可以依据光标的变化来判断输入框中的值是否为空。当输入框中的内容为空时focusedErrorBorder属性对应的内容就会生效,
此时会在输入框周围显示一个红色的方框。其实,本章回的内容主要源于上一章回中内容的bug:当输入中没有任何内容时,我们把光标从当前输入框切换到其它输入框时
当前输入框不会有任何的提示。因为,我们在上一章回中介绍的错误提示是基于输入框中的内容,内容有变化时才会有错误提示,如果内容没有任何变化,那么不会有任何
的错误提示。而此时就需要监听光标变化,当内容无变化,但是光标有变化时就去做业务逻辑相关的事情,因此,我们在示例代码中给focusedErrorBorder属性赋值,
它用来在光标发生变化时而且errorText属性的值不为null时会显示该属性对应的内容,也就是一个环绕输入框的红色方框。

4. 内容总结

最后,我们对本章回的内容做一个全面的总结:

  • 创建一个FocusNode对象并且把它赋值给TextFiele组件的focusNode属性可以监听光标的状态;
  • 在FocusNode对象中添加监听器,可以随时监听光标的状态,使用完成后记得删除监听器;
  • 监听到光标状态变化后可以配合errorText和focusedErrorBorder属性在输入框周围显示红色方框;
  • 注意:如果一个页面中有多个TextField组件,那么最好创建多个FocusNode对象来监听光标的状态;
    看官们,与"如何在输入框中处理光标"相关的内容就介绍到这里,欢迎大家在评论区交流与讨论!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

OpenCV 配置选项参考

介绍 注意 我们假设您已经阅读了 OpenCV 安装概述教程或具有使用 CMake 的经验。 可以通过几种不同的方式设置配置选项: 命令行:cmake -Doptionvalue ...初始缓存文件:cmake -C my_options.txt ...通过 GUI 进行交互 在本参考中&#xff…

InstantID:一张照片,无需训练,秒级个人写真生成

1. 引言 InstantID是一种基于扩散模型的强大解决方案。设计的即插即用模块仅使用单个面部图像就能熟练地处理各种风格的图像个性化,同时确保高保真度。它的核心是设计了一个新颖的 IdentityNet,通过强加语义和弱空间条件,将面部和地标图像与…

jmeter-04创建请求

文章目录 一、发送请求-查看响应流程二、新建请求三、选择请求方式,填写url1.发送get请求当只有请求方式不一样的时候,参数都填写在参数栏里面,GET请求与POST请求的区别? 2.发送post请求2.1 application/x-www-form-urlencoded2.2…

ele-h5项目使用vue3+vite+vant4开发:第四节、业务组件-SearchView组件开发

需求分析 展示切换动画搜索框输入文字&#xff0c;自动发送请求搜索结果展示搜索状态维护历史搜索展示&#xff0c;点击历史搜索后发送请求历史搜索更多切换动画效果 <script setup lang"ts"> import OpSearch from /components/OpSearch.vue import { ref } f…

Jenkins(本地Windows上搭建)上传 Pipeline构建前端项目并将生成dist文件夹上传至指定服务器

下载安装jdk https://www.oracle.com/cn/java/technologies/downloads/#jdk21-windows 下载jenkins window版 双击安装 https://www.jenkins.io/download/thank-you-downloading-windows-installer-stable/ 网页输入 http://localhost:8088/ 输入密码、设置账号、安装推…

Ainx框架实现 一

&#x1f4d5;作者简介&#xff1a; 过去日记&#xff0c;致力于Java、GoLang,Rust等多种编程语言&#xff0c;热爱技术&#xff0c;喜欢游戏的博主。 &#x1f4d7;本文收录于Ainx系列&#xff0c;大家有兴趣的可以看一看 &#x1f4d8;相关专栏Rust初阶教程、go语言基础系列…

Mysql+MybatisPlus+Vue实现基础增删改查CRUD

数据库 设计数据库 设计几个字段&#xff0c;主键id自动增长且不可为空 create table if not exists user (id bigint(20) primary key auto_increment comment 主键id,username varchar(255) not null comment 用户名,sex char(1) not null comment 性…

C++弹球游戏:Jump Ball Game

一、下载压缩包 请查看网站C弹球游戏&#xff1a;Jump Ball Game并且下载&#xff0c;可以看到如下界面&#xff1a; 二、匹配图标 把压缩包解压了&#xff1a; 右键点击Jump Ball Game.lnk&#xff0c;点击“属性”它将会是我们要运行的文件。 点击“更改图标”&#xff0c;选…

【HarmonyOS 4.0 应用开发实战】ArkTS 快速入门

个人名片&#xff1a; &#x1f43c;作者简介&#xff1a;一名大三在校生&#xff0c;喜欢AI编程&#x1f38b; &#x1f43b;‍❄️个人主页&#x1f947;&#xff1a;落798. &#x1f43c;个人WeChat&#xff1a;hmmwx53 &#x1f54a;️系列专栏&#xff1a;&#x1f5bc;️…

344. Reverse String(反转字符串)

题目描述 编写一个函数&#xff0c;其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。 不要给另外的数组分配额外的空间&#xff0c;你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。 问题分析 以中间字符为轴&#xff0c;将两边的字符对换…

Python 轻量级定时任务调度:APScheduler

简述 APscheduler (Advanced Python Scheduler)&#xff0c;作用为按指定的时间规则执行指定的作业。提供了基于日期date、固定时间间隔interval 、以及类似于Linux上的定时任务crontab类型的定时任务。该框架不仅可以添加、删除定时任务&#xff0c;还可以将任务存储到数据库…

浅谈Zookeeper及windows下详细安装步骤

1. Zookeeper介绍 1.1 分布式系统面临的问题 分布式系统是一个硬件或软件组件分布在不同的网络计算机上&#xff0c;彼此之间仅仅通过消息传递进行通信和协调的系统。 面临的问题&#xff1a;系统每个节点之间信息同步及共享 以一个小团队为例,面临的问题 通过网络进行信息…

蓝桥杯---生日蜡烛

某君从某年开始每年都举办一次生日party&#xff0c;并且每次都要吹熄与年龄相同根数的蜡烛&#xff0c;现在算起来&#xff0c;他一共吹熄了236根蜡烛。请问,他从多少岁开始过生日party的? 请填写他开始过生日 party的年龄数。 注意:你提交的应该是一个整数&#xff0c;不要…

二分查找第二弹

目录 力扣852.山脉数组的峰顶索引 力扣162.寻找峰值 力扣153.寻找旋转排序数组中的最小值 力扣剑指Offer53.0-n-1缺失的数字 力扣852.山脉数组的峰顶索引 峰顶之前的全部比他小&#xff0c;峰顶之后的也比他小&#xff0c;把小于等于和大于分成两段 class Solution {publi…

TQ15EG开发板教程:使用vivado2023.1建立hello world工程

1:打开软件建立工程 2:使用vivado创建设计模块并生成bit文件 3:导出硬件平台&#xff0c;使用vitis建立工程 4:使用vitis创建应用程序项目 5:硬件设置与调试 1:打开软件建立工程 打开VIVADO2023.1 创建一个新的工程 输入项目名称和地址&#xff0c;下面那个选项为是否…

深入了解关联查询和子查询

推荐阅读 给软件行业带来了春天——揭秘Spring究竟是何方神圣&#xff08;一&#xff09; 给软件行业带来了春天——揭秘Spring究竟是何方神圣&#xff08;二&#xff09; 文章目录 推荐阅读关联查询子查询 关联查询 关联查询 从多张表中查询对应记录的信息&#xff0c;关联查…

网络原理-TCP/IP(5)

TCP协议 延迟应答 它也是基于滑动窗口,提高效率的一种机制,结合滑动窗口以及流量控制,能够以延迟应答ACK的方式,把反馈的窗口,搞大.核心在于允许范围内,让窗口尽可能大. 如果接收数据的主机立刻返回ACK应答,这时候返回的窗口可能比较小. 1.假设接收端缓冲区为1M.一次收到了5…

Java特别篇--关于线程创建的三种方式的总结对比

文章目录 一、常见3种创建线程的方式&#xff08;1&#xff09;方式1&#xff1a;继承Thread类的方式&#xff08;2&#xff09;方式2&#xff1a;实现Runnable接口的方式&#xff08;3&#xff09;方式3&#xff1a;通过Callable和Future接口创建线程 二、对比三种方式&#x…

CUDA/TensorRT部署知识点

CUDA相关: 1、CUDA核函数嵌套核函数的用法多吗? 答:这种用法非常少,主要是因为启动一个kernel本身就有一定延迟,会造成执行的不连续性。 2、如下代码里的 grid/block 对应硬件上的 SM 的关系是什么? 答:首先需要理解grid/block是软件层的概念,而SM是硬件层的概念。所…

python脚本将照片按时间线整理

说明&#xff1a;有一次自己瞎折腾&#xff0c;然后把服务器相册搞崩了&#xff0c;后来做了备份同步给找了回来&#xff0c;但是相册的时间线全乱了&#xff0c;看起来非常难受。所以就想通过文件夹的形式把照片重新分类&#xff0c;分类后的结构如下(红色字体为文件夹)&#…