Flutter输入框换行后自适应高度

Flutter输入框换行后输入框高度随之增加

效果

请添加图片描述
请添加图片描述

设计思想

通过TextEditingController在build中监听输入框,输入内容后计算输入框高度然后自定义适合的值,并且改变外部容器高度达到自适应高度的目的

参考代码

//以下代码中的值只适用于案例,实际情况还需改为自己需要的实际值//自定义输入框高度double inputH=25; Widget build(BuildContext context) {_textEditingController.addListener(() {String textvalue=_textEditingController.text;final textStyle = TextStyle(fontSize: 16,fontWeight: FontWeight.bold);final textPainter = TextPainter(text: TextSpan(text:textvalue, style: textStyle),textDirection: TextDirection.ltr,);textPainter.layout(maxWidth: 260 * Global.widthX); // 减去/加上的数值根据自己需求调整,下同setState(() {if(textPainter.height<=25.0){ //只有一行的情况this.inputH=25.0;}else if(25.0<textPainter.height && textPainter.height<=95){ //大于一行小于等于4行的情况this.inputH=textPainter.height;}else if(textPainter.height>=95){ //大于四行后固定高度,输入框内容滑动展示this.inputH=95.0;}});});return Container();}Widget _bottom(){return SizedBox(height:inputH*Global.heightY+80*Global.heightY,child:Container(//输入框外部容器高度constraints: BoxConstraints.tightFor(width: Global.screenWidth,height:inputH*Global.heightY+50*Global.heightY),child: Container(constraints: BoxConstraints(maxHeight: 100.0,maxWidth: 265 * Global.widthX,minHeight: 20*Global.heightY,minWidth: 265 * Global.widthX),decoration: BoxDecoration(color: Colors.white,border: Border.all(  //边框,颜色以及宽度// color: Color(0xFFFCCCCCC),width: 1.0,color: Colors.black12),borderRadius: BorderRadius.circular(10.0),),margin: EdgeInsets.fromLTRB(9* Global.widthX, 0, 0, 0),padding: EdgeInsets.fromLTRB(5* Global.widthX,0, 0, 0),child: Center(child: TextField(// focusNode: _focusNode1,maxLines: null,// maxLength: 170,keyboardType: TextInputType.multiline,controller: _textEditingController,// textAlign: TextAlign.center,textAlignVertical: TextAlignVertical.center,decoration: InputDecoration.collapsed(hintText: _hintText,),),),),)
);
}

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

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

相关文章

MyBatis 学习(一)之 MyBatis 概述

目录 1 MyBatis 介绍 2 MyBatis 的重要组件 3 MyBatis 执行流程 4 参考文档 1 MyBatis 介绍 MyBatis 是一个半自动化的 ORM &#xff08;Object-Relational Mapping&#xff0c;对象关系映射&#xff09;持久层框架&#xff0c;它允许开发者通过 XML 或注解将对象与数据库中…

docker的简介--安装--操作命令

1.docker的简介 1.1docker是什么 用一句话来说docker就是一个新一代虚拟化技术 Docker是一种开源的平台&#xff0c;用于开发、交付和运行应用程序。它允许开发人员将应用程序和它们的依赖打包在一个容器中&#xff0c;然后部署到任何支持Docker的环境中。Docker的主要特点包括…

【React架构 - Scheduler中的MessageChannel】

前序 我们都知道JS代码是在浏览器5个进程(下面有介绍)中渲染进程中的Js引擎线程执行的&#xff0c;其他还有GUI渲染线程、定时器线程等&#xff0c;而页面的布局和绘制是在GUI线程中完成的&#xff0c;这些线程之间是互斥的&#xff0c;所以在执行Js的同时会阻塞页面的渲染绘制…

android应用开发基础知识,安卓面试2020

第一章&#xff1a;设计思想与代码质量优化 1、设计思想六大原则 2、三大设计模式 3、数据结构 4、算法 第二章&#xff1a;程序性能优化 1、启动速度和执行效率优化 2、布局检测与优化 3、内存优化 4、耗电优化 5、网络传输与数据存储优化 6、APK大小优化 7、屏幕适配 8、…

用Java语言创建的Spring Boot项目中,如何传递List集合呢?

前言&#xff1a; 在上篇文章中&#xff0c;用Java语言创建的Spring Boot项目中&#xff0c;如何传递数组呢&#xff1f;&#xff1f;-CSDN博客&#xff0c;我们了解到Spring Boot项目中如何传递数组&#xff0c;但是&#xff0c;对于同类型的List集合&#xff0c;我们又该如何…

高频更新使用sse好还是WebSocket

在实现高频更新的系统时&#xff0c;选择Server-Sent Events (SSE)还是WebSocket主要取决于应用的具体需求、数据传输的方向性、以及实现的复杂性。 一.Server-Sent Events (SSE) SSE是一种允许服务器向客户端发送更新的技术&#xff0c;但不允许客户端向服务器发送消息&…

Centos7:自动化配置vim | suoders信任列表添加普通用户

Centos7&#xff1a;自动化配置vim | suoders信任列表添加普通用户 vim 配置原理sudoers系统可信任列表中添加普通用户自动化配置vim vim 配置原理 在目录/etc下有一个vimrc文件&#xff0c;该文件是系统中公共的vim配置文件&#xff0c;对所有用户都成立。  而在每个普通用户…

【Kafka系列 06】Kafka Producer源码解析

温馨提示&#xff1a;本文基于 Kafka 2.3.1 版本。 一、Kafka Producer 原理图 生产者的 API 使用还是比较简单&#xff0c;创建一个 ProducerRecord 对象&#xff08;这个对象包含目标主题和要发送的内容&#xff0c;当然还可以指定键以及分区&#xff09;&#xff0c;然后调…

Git 分布式版本控制系统

Git是一个分布式版本控制系统&#xff0c;可以记录项目文件的变动并管理项目的不同版本。以下是Git的基本概念和使用方式&#xff1a; 仓库&#xff08;Repository&#xff09;&#xff1a;Git用仓库来存储项目文件。仓库可以是本地仓库&#xff0c;也可以是远程仓库&#xff0…

poi 设置允许西文在单词中间换行

说明本文是CSDN-问答模块,题主提问。问题描述:poi 设置允许西文在单词中间换行 一、问题描述 poi 设置允许西文在单词中间换行? // 创建一个新的文档XWPFDocument document = new XWPFDocument();// 创建段落XWPFParagraph firstParagraph = document.createParagraph();fir…

2022《OpenScene: 3D Scene Understanding with Open Vocabularies》阅读笔记2

A. Implementation Details 3D Distillation. 我们基于PyTorch实现。为了提取,我们使用Adam[26]作为优化器,初始学习率为1e−4,并训练100个epochs。对于MinkowskiNet,我们对ScanNet和Matterport3D实验使用2cm的体素大小,对nuScenes使用5cm的体素尺寸。对于室内数据集,我…

RTSPServer推流服务

RTSPServer推流服务 1.开发原因 由于项目需要使用&#xff0c;虽然有现成的RTSPServer推流服务&#xff0c;由于是闭源代码&#xff0c;无法查看了解内部的逻辑处理流程&#xff0c;所以急需要一套较为稳定并可以使用的推流服务&#xff0c;并且从网上看大部分的RTSPServer推流…

Java 18中简单 Web 服务器

从 Java 18 开始&#xff0c;我们可以访问JEP 408中引入的简单 Web 服务器。我们可以通过命令行工具和 API 访问其功能。 简单 Web 服务器提供了一个提供静态文件服务的基本 Web 服务器。它被描述为对于测试、原型设计和教育很有用。该服务器有意使其设置和运行非常简单&#…

Azure DevOps和Jira比较

最近需要对管理工具调研&#xff0c;客户现在使用范围较广的就是Azure DevOps&#xff0c;使用的是一个免费版本&#xff0c;需要对工具自身的特长和客户的使用情况&#xff0c;进行一个调研。 查了一下资料&#xff0c;还有客户现在的使用情况&#xff0c;做一个总结。 两者…

IntelliJ IDEA 常用快捷键和下载链接

下载链接&#xff08;windows&#xff09; 下载 IntelliJ IDEA – 领先的 Java 和 Kotlin IDE 编码时&#xff1a; 跳转到引用方法的地方 &#xff08;有多个引用时会出现下拉列表&#xff09; ctrl鼠标左键 跳转后回到原来的地方 …

vscode windows 免密登录 powershell.sh

Linux 生成秘钥 ssh-keygenwindows powershell.sh $HOST_IP"zhang192.168.1.1" $PUBPATH"$HOME\.ssh\id_rsa.pub" $KEY(Get-Content "$PUBPATH" | Out-String); ssh "$HOST_IP" "mkdir -p ~/.ssh && chmod 700 ~/.ssh …

微信小程序 --- mobx-miniprogram miniprogram-computed

1.1 mobx-miniprogram 介绍 目前已经学习了 6 种小程序页面、组件间的数据通信方案&#xff0c;分别是&#xff1a; 数据绑定&#xff1a;properties获取组件实例&#xff1a;this.selectComponent()事件绑定&#xff1a;this.triggerEvent()获取应用实例&#xff1a;getApp(…

LeetCode 2120.执行所有后缀指令

现有一个 n x n 大小的网格&#xff0c;左上角单元格坐标 (0, 0) &#xff0c;右下角单元格坐标 (n - 1, n - 1) 。给你整数 n 和一个整数数组 startPos &#xff0c;其中 startPos [startrow, startcol] 表示机器人最开始在坐标为 (startrow, startcol) 的单元格上。 另给你…

动态给vue的data添加新属性页面不更新的原因分析以及解决方法

直接添加属性的问题 我们从一个例子触发 定义一个p标签&#xff0c;通过v-for指令进行遍历&#xff0c;然后通过绑定事件&#xff0c;触发事件的时候&#xff0c;将动态添加哟个属性。 预期结果&#xff1a;动态增加的属性也被遍历显示在页面上 <p v-for"(value,ke…

Android 15 第一个开发者预览版-Android15的新变化

版本说明 发布日期2024 年 2 月 16 日buildAP31.240119.016模拟器支持x86&#xff08;64 位&#xff09;、ARM (v8-A)安全补丁级别2024 年 2 月Google Play 服务2015 年 2 月 24 日API diffAPI 34 → V DP1 Android 15 将继续致力于构建一个平台&#xff0c;在帮助提高效率的…