flutter 自适应宽高气泡框,聊天气泡框

先看效果

前言::::

网上好多气泡框,都让写固定宽高,无法自适应文本内容。

还有的就是通过算child 然后动态计算气泡框宽高,脱裤子💨,放到listview 刷新数据还会丢ui,因为要算某一个widget 的大小,必须是已经加载过,然后你再刷新listview然后更新大小。会被回收ui。不管是text内容,还是布局大小你要计算那就GG。不想多言

源码

import 'package:flutter/material.dart';class BubbleViewClip extends CustomClipper<Path> {/// 夹角宽度static double ARRWIDTH = 15;/// 夹角高度double arrHeight = 10;/// 气泡框圆角 /// 夹角圆角自己写去吧double radius = 5;/// 夹角Y位置double arrPointY  = 15;// @overridePath getClip(Size size) {double height = size.height;double width = size.width;var controllPoint = Offset(width, arrPointY + arrHeight / 2);var endPoint = Offset(width - 15, arrPointY + arrHeight / 4 * 3);Path zone = Path()..addRRect(RRect.fromLTRBR(0, 0, width - ARRWIDTH, height, Radius.circular(radius)))// ..close()..moveTo(width - ARRWIDTH, arrPointY)..lineTo(width - (ARRWIDTH / 2), arrPointY + arrHeight /4 )..quadraticBezierTo(controllPoint.dx, controllPoint.dy, endPoint.dx, endPoint.dy)..lineTo(width - ARRWIDTH, arrPointY + arrHeight)..lineTo(width - ARRWIDTH, arrPointY)..close();return zone;}@overridebool shouldReclip(covariant CustomClipper oldClipper) {return true;}
}

使用

ClipPath(clipper: BubbleViewClip(),child: Container(color: Colors.red,constraints: BoxConstraints(/// 这里我建议给一下,放到row里面如果加入Spacer 可能不换行。/// 然后 Display.screenWidth 是屏幕宽度。 mainPicSize 是头像大小 50是已读宽度。maxWidth: Display.screenWidth - mainPicSize - 50, // 最大宽度),padding: EdgeInsets.only(left: 10,right: BubbleViewClip.ARRWIDTH + 10,top: 5,bottom: 5),child: Text(message.textElem!.text!,softWrap: true,style: TextStyle(color: Colors.white, fontSize: 23,)),),);

原理 ======为啥如此简单:

来 关注点赞一下我告告你为啥如此简单

Container  红色正方形  然后 你剪切绘制成 气泡框的样子,然后 夹角长, 你直接Container padding 个夹角长度 ,内容不就显示全了么?,不就完美解决了吗?

别人都是直接绘制成气泡框Widget 。罗里吧嗦不看。

看看我发表时间,我真的潦草一下博客吧。困了😴:2023.07.18 04:32

-所以我只写了 右侧夹角,左侧夹角自己搞吧。忘记了

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

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

相关文章

xss跨站脚本攻击总结

XSS(跨站脚本攻击) 跨站脚本攻击&#xff08;Cross Site Scripting&#xff09;&#xff0c;为了不和层叠样式表&#xff08;Cascading Style Sheets &#xff09;CSS的缩写混淆&#xff0c;故将跨站脚本攻击缩写为XSS。恶意攻击者往Web页面里插入恶意Script代码&#xff0c;当…

mybatis-plus 支持不同数据源sql切换

mybatis-plus 支持不同数据源sql切换 本篇内容主要讲解的是mybatis-plus 支持不同数据源sql切换 直接上代码 1、结构代码 2、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactI…

用html+javascript打造公文一键排版系统6:三级标题排版

正文中的标题分为四级&#xff0c;文中结构层次序数依次可以用“一、”“&#xff08;一&#xff09;”“1.”“&#xff08;1&#xff09;”标注&#xff1b;一般第一层用黑体字、第二层用楷体字加粗、第三层和第四层用仿宋体字标注。 对于以阿拉伯数字开头、后接英文点号.及…

2019年 iMac 21.5寸升级内存条和硬盘

硬件更换 CPU&#xff1a;i5-8500&#xff0c;最高可换到i7&#xff0c;算了&#xff0c;挤牙膏厂&#xff0c;性能提升不如换内存和SSD&#xff0c;i9散热不太好&#xff08;主要是穷&#xff09;显卡&#xff1a;焊在里面换不了&#xff08;外置显卡&#xff0c;主要是穷&am…

Prometheus实现钉钉报警

1、Prometheus实现钉钉报警 1.1 Prometheus环境 # my global config global:scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute…

opencv -10 基础运算之 图像加权和(图像融合图像修复视频合成)

什么是图像加权和&#xff1f; 所谓图像加权和&#xff0c;就是在计算两幅图像的像素值之和时&#xff0c;将每幅图像的权重考虑进来&#xff0c;可以用公式表示为&#xff1a; dst saturate(src1 &#x1d6fc; src2 &#x1d6fd; &#x1d6fe;)式中&#xff0c;satu…

Elasticsearch:语义搜索、知识图和向量数据库概述

结合对你自己的私有数据执行语义搜索的概述 什么是语义搜索&#xff1f; 语义搜索是一种使用自然语言处理算法来理解单词和短语的含义和上下文以提供更准确的搜索结果的搜索技术。 这种方法基于这样的想法&#xff1a;搜索引擎不仅应该匹配查询中的关键字&#xff0c;还应该尝…

C# Sdcb.Paddle2Onnx Paddle模型通过C#转换为ONNX模型

https://github.com/sdcb/PaddleSharp/blob/feature/2.5/docs/paddle2onnx.md 效果 项目 代码 using Sdcb.Paddle2Onnx; using System; using System.Collections; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing…

代码随想录算法训练营day6 | 242. 有效的字母异位词,349. 两个数组的交集,202. 快乐数,1. 两数之和

目录 242. 有效的字母异位词 349. 两个数组的交集 202. 快乐数 1. 两数之和 242. 有效的字母异位词 242. 有效的字母异位词 难度&#xff1a;easy 类型&#xff1a;哈希表 思路&#xff1a; 代码&#xff1a; class Solution {public boolean isAnagram(String s, St…

STM32(HAL库)驱动GY30光照传感器通过串口进行打印

目录 1、简介 2、CubeMX初始化配置 2.1 基础配置 2.1.1 SYS配置 2.1.2 RCC配置 2.2 软件IIC引脚配置 2.3 串口外设配置 2.4 项目生成 3、KEIL端程序整合 3.1 串口重映射 3.2 GY30驱动添加 3.3 主函数代 3.4 效果展示 1、简介 本文通过STM32F103C8T6单片机通过HAL库方…

DOM编程

DOM编程 DOM树&#xff1a; 获取DOM对象的方式&#xff1a; 通过id直接获取 id禁止使用&#xff0c;因为项目都是css、html、js分离的 2、通过API&#xff0c;doucument.getElementById 3、通过class&#xff0c;doucument.getElementsByClassName 4、通过标签名称&#xff0…

Vue收集表单数据

收集表单数据&#xff1a; 若&#xff1a;<input type"text"/>&#xff0c;则v-model收集的是value值&#xff0c;用户输入的就是value值。 若&#xff1a;<input type"radio"/>&#xff0c;则v-model收集的是value值&#xff0c;且要给标签配…