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

news2024/11/25 16:30:13

先看效果

前言::::

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

还有的就是通过算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;

  // @override
  Path 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;
  }

  @override
  bool 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.coloradmin.cn/o/765008.html

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

相关文章

Spring Cloud Alibaba的组件(解决方案)

Spring Cloud Alibaba的组件&#xff08;解决方案&#xff09; 前言Spring CloudSpring Cloud Alibaba问题的解决方案面临的问题Spring Cloud Alibaba给出的解决方案 前言 在之前的文章里我们介绍了分布式微服务以及其需要解决的问题&#xff0c;现在我们看看在Spring Cloud A…

31. IO操作

一、概览二、磁盘操作三、字节操作 实现文件复制装饰者模式 四、字符操作 编码与解码String 的编码方式Reader 与 Writer实现逐行输出文本文件的内容 五、对象操作 序列化Serializabletransient 六、网络操作 InetAddressURLSocketsDatagram 七、NIO 流与块通道与缓冲区缓冲区状…

数据结构基本概念、线性表、顺序表

一、头文件 head.h #ifndef __HEAD_H__ #define __HEAD_H__#include <stdio.h> #include <string.h> #include <stdlib.h> #define MAXSIZE 8typedef int datatype; typedef struct {int len;datatype data[MAXSIZE]; }Seqlist;Seqlist * Request_space(voi…

利用python绘制对数坐标轴

利用python绘制对数坐标轴 1&#xff09;效果图 2&#xff09; 程序代码 import matplotlib.pyplot as plt import numpy as np# 设置图形的大小 plt.figure(figsize(8, 6))# 设置x轴的范围为10的-4次方到10的3次方 plt.xlim(1e-4, 1e3)# 绘制x轴的对数坐标轴 plt.xscale(log…

浅谈防火门监控系统在酒店防火安全中的重要应用

安科瑞 华楠 摘要&#xff1a;建筑防火问题已经引起人们的广泛关注&#xff0c;合理进行建筑消防设计成为了建筑设计的重要内容。防火门监控系统是建筑防火研究的新成果。对日常防火分区监控及发生火灾后对火势和有毒气体的控制起到关建作用。文章对防火门监控系统的组成和工…

网络安全(黑客技术)自学笔记+就业市场前景分析

一、针对网络安全市场分析 市场需求量高&#xff1b;则是发展相对成熟入门比较容易。所需要的技术水平国家政策环境 对于国家与企业的地位愈发重要&#xff0c;没有网络安全就没有国家安全 更有为国效力的正义黑客—红客联盟 可见其重视程度。 需要掌握的知识点偏多 外围打点…

18 - 堆栈 - 二项堆

前面我们学习了斐波那契堆, 今天我们来学习二项堆! 二项堆 二项堆是二项树的集合或是由一组二项树组成。 二项堆H由一组满足以下性质的二项树组成: 1) H中的每个二项树都遵循最小堆性质:节点的关键字不大于其子节点的关键字。因此,根的关键字最小 2) 对任意非负整数…

【ARM——当前程序状态寄存器 CPSR

文章目录 CPSRSPSRSPSRCPSR 各个位含义 CPSR Current Program Status Register 即 CPSR,当前程序状态寄存器&#xff0c;可以在任何处理器模式下被访问。它包含了条件标志位、中断禁止位&#xff0c;当前处理器模式标志以及其他的一些控制和状态位。 SPSR 除了 usr 和 sys 模…

【C++】list的使用及底层实现原理

本篇文章对list的使用进行了举例讲解。同时也对底层实现进行了讲解。底层的实现关键在于迭代器的实现。希望本篇文章会对你有所帮助。 文章目录 一、list的使用 1、1 list的介绍 1、2 list的使用 1、2、1 list的常规使用 1、2、2 list的sort讲解 二、list的底层实现 2、1 初构…

vue文件上传,文件打不开。文件上传 on-progress不触发

//文件上传带进度条<el-uploadv-model:file-list"fileList":limit"3":on-progress"beforeAvatarUpload"//on-progress 不触发&#xff0c;触发的关键在于覆盖原有的http请求:http-request"getFile":action"${app.api}/student…

【从零开始学习JAVA | 第二十九篇】Stream流

目录 前言&#xff1a; Stram流&#xff1a; 设计目标&#xff1a; 使用步骤&#xff1a; 1.先得到一条Stream流&#xff0c;并把数据放上去。 2.利用Stream流中的各种API进行操作。 使用Stream流的注意事项&#xff1a; 总结: 前言&#xff1a; 本文我们将学习Stream流…

Windows用户注意!LokiBot恶意软件正通过Office文档传播

Windows用户再次成为被称为LokiBot恶意软件的攻击目标&#xff0c;该恶意软件通过Office文档进行传播。 根据Fortinet安全研究员Cara Lin的最新报告&#xff0c;攻击者利用已知漏洞&#xff0c;如CVE-2021-40444和CVE-2022-30190&#xff0c;在微软Office文档中嵌入恶意宏。 …

Eulaceura 版本 23H1:RISC-V 架构新的里程碑

近日&#xff0c;RISC-V SIG 发布了 Eulaceura 版本 23H1&#xff0c;这是发行版的一次重大更新&#xff0c;新版本搭建了 linux kernel 6.1 版本内核&#xff0c;适用于矽速科技 LicheePi 4A 的映像也已公布。Eulaceura 是首个将 RISC-V 架构纳入第一级支持范围的 openEuler 发…

深入理解网络栈

网络路径 发送端 应用层 1、socket 各种网络应用程序基本上都是通过 Linux Socket 编程接口来和内核空间的网络协议栈通信的 socket 是网络编程的入口&#xff0c;它提供了大量的系统调用&#xff0c;构成了网络程序的主体 udp UDP 是面向无连接的协议&#xff0c;不需要与…

CycleGAN论文的阅读与翻译,无监督风格迁移、对抗损失

CycleGAN论文的阅读与翻译&#xff0c;无监督风格迁移 CycleGAN 论文原文 arXiv CycleGAN junyanz&#xff0c;作者自己用 lua 在 GitHub 上的实现 CycleGAN tensorflow PyTorch by LynnHo&#xff0c;一个简单的 TensorFlow 实现 0. 摘要&#xff1a; 图像到图像的翻译 (Ima…

黑马大数据学习笔记2-HDFS基本操作

目录 进程启停管理一键启停脚本单进程启停 文件系统操作命令HDFS文件系统基本信息介绍创建文件夹查看指定目录下内容上传文件到HDFS指定目录查看HDFS文件内容下载HDFS文件拷贝HDFS文件追加数据到HDFS文件HDFS数据移动HDFS数据删除其他命令HDFS WEB浏览 HDFS权限修改权限 https:…

如何设计一个注册中心?(2)实现注册接口

1. 创建SpringBoot工程 创建父工程及三个子模块&#xff0c;其中一个模块作为注册中心&#xff0c;另外两个作为服务提供者。 pom <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns…

OpenCV for Python 入坑第三天 :图片处理(2)

上一篇博客我们了解了图像在OpenCV中的保存方式。并且我们自己上手创建了一张灰度图像和一张彩色图像。除此之外&#xff0c;我们还了解到了彩色图像通道在OpenCV中和我们日常所了解的不一样&#xff0c;是通过BGR的顺序进行编码的。咱们一定要记清楚哦~ 那么今天&#xff0c;我…

tinymce编辑器导入docx、doc格式Word文档完整版

看此文章之前需要注意一点 在前端使用导入Word文档并自动解析成html再插入到tinymce编辑器中&#xff0c;在这里我使用的是mammoth.js识别Word内容&#xff0c;并set到编辑器中&#xff0c;使用mammoth只可解析.docx格式的Word&#xff0c;目前的mammoth不支持.doc格式&#x…

Ghost Buster Pro for mac(快速清理卸载的应用残存文件)

Ghost Buster Pro for mac可从您已卸载的应用程序中查找并删除文件。该应用程序速度快如闪电&#xff0c;可立即释放内存。 许多应用程序都安装在计算机上&#xff0c;但它们通常只会在您的计算机上停留很短的时间。每个应用程序都会创建文件&#xff0c;但删除应用程序不会删…