Flutter RichText支持文本选择

extended text 相关文章

群花某天说,你咋不做下文本选择的需求呢,刚需呢。是吗? 我咋都没看到有人提过呢?

前面做了extended_text_field,里面有光标和文本选择的处理,本来想直接把改改,把光标去掉,然后不让修改。但是想了下,怎么能这么随便呢,还是拿起了extended_text魔改起来。

参数描述默认
selectionEnabled是否开启文本选择功能false
selectionColor文本选择的颜色Theme.of(context).textSelectionColor
dragStartBehavior文本选择的拖拽行为DragStartBehavior.start
textSelectionControls文本选择控制器,你可以通过重写,来定义工具栏和选择器extendedMaterialTextSelectionControls/extendedCupertinoTextSelectionControls

文本选择控制器

extended_text提供了默认的控制器extendedMaterialTextSelectionControls/extendedCupertinoTextSelectionControls

你可以通过重写,来定义工具栏和选择器

下面是一个自定义的工具栏

class MyExtendedMaterialTextSelectionControls
    extends ExtendedMaterialTextSelectionControls {
  @override
  Widget buildToolbar(BuildContext context, Rect globalEditableRegion,
      Offset position, TextSelectionDelegate delegate) {
    assert(debugCheckHasMediaQuery(context));
    assert(debugCheckHasMaterialLocalizations(context));
    return ConstrainedBox(
      constraints: BoxConstraints.tight(globalEditableRegion.size),
      child: CustomSingleChildLayout(
        delegate: ExtendedTextSelectionToolbarLayout(
          MediaQuery.of(context).size,
          globalEditableRegion,
          position,
        ),
        child: _TextSelectionToolbar(
          handleCopy: canCopy(delegate) ? () => handleCopy(delegate) : null,
          handleSelectAll:
              canSelectAll(delegate) ? () => handleSelectAll(delegate) : null,
          handleLike: () {
            //mailto:<email address>?subject=<subject>&body=<body>, e.g.
            launch(
                "mailto:zmtzawqlp@live.com?subject=extended_text_share&body=${delegate.textEditingValue.text}");
            delegate.hideToolbar();
          },
        ),
      ),
    );
  }
}

/// Manages a copy/paste text selection toolbar.
class _TextSelectionToolbar extends StatelessWidget {
  const _TextSelectionToolbar(
      {Key key, this.handleCopy, this.handleSelectAll, this.handleLike})
      : super(key: key);

  final VoidCallback handleCopy;
  final VoidCallback handleSelectAll;
  final VoidCallback handleLike;

  @override
  Widget build(BuildContext context) {
    final List<Widget> items = <Widget>[];
    final MaterialLocalizations localizations =
        MaterialLocalizations.of(context);

    if (handleCopy != null)
      items.add(FlatButton(
          child: Text(localizations.copyButtonLabel), onPressed: handleCopy));
    if (handleSelectAll != null)
      items.add(FlatButton(
          child: Text(localizations.selectAllButtonLabel),
          onPressed: handleSelectAll));
    if (handleLike != null)
      items.add(FlatButton(child: Icon(Icons.favorite), onPressed: handleLike));

    return Material(
      elevation: 1.0,
      child: Container(
        height: 44.0,
        child: Row(mainAxisSize: MainAxisSize.min, children: items),
      ),
    );
  }
}

复制代码

工具栏和选择器的控制

你可以通过将你的页面包裹到ExtendedTextSelectionPointerHandler里面来定义不同的行为效果。

默认行为

通过赋值ExtendedTextSelectionPointerHandler的child为你的页面,将会有默认的行为

 return ExtendedTextSelectionPointerHandler(
      //default behavior
       child: result,
    );
复制代码
  • 当点击extended_text之外的区域的时候,关闭工具栏和选择器
  • 滚动的时候,关闭工具栏和选择器
自定义行为

你可以通过builder方法获取到页面上面的全部的selectionStates(ExtendedTextSelectionState),并且通过自己获取点击事件来处理工具栏和选择器

 return ExtendedTextSelectionPointerHandler(
      //default behavior
      // child: result,
      //custom your behavior
      builder: (states) {
        return Listener(
          child: result,
          behavior: HitTestBehavior.translucent,
          onPointerDown: (value) {
            for (var state in states) {
              if (!state.containsPosition(value.position)) {
                //clear other selection
                state.clearSelection();
              }
            }
          },
          onPointerMove: (value) {
            //clear other selection
            for (var state in states) {
              state.clearSelection();
            }
          },
        );
      },
    );
复制代码

关于extended_text的readme

最近重新整理了一下readme,并且提供了中文文档,因为大家老是吐槽不容易看,希望新的readme能帮助大家更好地使用这个组件。

最后放上 extended_text,如果你有什么不明白或者对这个方案有什么改进的地方,请告诉我,欢迎加入Flutter Candies,一起生产可爱的Flutter 小糖果(QQ群:181398081)

最最后放上Flutter Candies全家桶,真香。

转载于:https://juejin.im/post/5cff71d46fb9a07ea6486a0e

Flutter】SelectionArea之实现文本全选复制功能 SelectionArea实现一个可复用的文本的全选、复制功能的widget组件 阅读详情

相关推荐

R语言实战:从Raw Counts到TPM/FPKM的完整转换指南(含代码调试技巧)

本文详细介绍了在R语言环境中将RNA-seq原始计数(raw counts)转换为TPM/FPKM值的完整流程,包含代码实现和常见错误调试技巧。通过具体案例演示如何正确处理基因长度和测序深度因素,实现表达量标准化,为生物信息学分析提供可靠数据基础。特别适合需要进行转录组数据分析的研究人员和实验室技术人员参考。

weixin_28559803的博客 446

extended_text:Flutter的功能强大的扩展正式文本支持特殊文本(图像,@ somebody),自定义背景,自定义溢出,文本选择

extended_text 语言:| 扩展了官方文本,可快速构建特殊文本,例如嵌入式图像或@somebody,它还支持自定义背景,自定义流程和自定义选择工具栏和句柄。 目录 特殊文字 创建特殊文字 扩展文本有助于将您的文本快速转换为特殊textSpan。 例如,下面的代码演示了如何创建@xxxx特殊textSpan。 class AtText extends SpecialText { AtText ( TextStyle textStyle, SpecialTextGestureTapCallback onTap, { this .showAtBackground = false , this .start}) : super (flag, ' ' , textStyle, onTap : onTap); static const String fl

YOLOv11模型改进全攻略:利用轻量化模块实现精度与速度双跃升

如果你在实操中遇到模块替换导致的精度骤降或部署报错,不妨尝试调整轻量化模块的替换比例,或针对性地保留关键层的原始结构。记住,轻量化的核心是“在精度损失可接受的范围内最大化提升效率”,只要结合业务场景灵活取舍,你也能让YOLOv11在资源受限的环境中大放异彩。接下来,我们从模块选型到代码集成,一步步带你打造“轻量且能打”的YOLOv11,真正帮你解决工业落地中的效率与精度痛点。训练过程中关注模型的mAP和推理速度,若精度下降过多,可调整模块替换的比例(如仅替换Backbone的部分卷积层)。

m0_64661770的博客 472

Flutter 中可选择文本

Flutter中正常的文本都是不可选择的:如下面这段代码在虚拟机中显示文本后,不论你如何尝试选择都是无法选中的: 所以就有了下面的这个文本组件:他是可被选中复制粘贴的: 可以看到直接使用Text写出来的文本是无法被选中的,但是如果使用SelectableText写出来的文本是可以被选中

的博客 1685

Flutter 中的 RichText 小部件:全面指南

RichText

smileKH的博客 2628

微信小程序富文本标签rich-text的使用

wxml: <!-- rich-text 富文本标签 1 nodes属性来实现 1 接收标签字符串 2 接收对象数组 --> 接收对象数组 <rich-text nodes="{{html}}"></rich-text> js: Page({ data:{ // 1 接收标签字符串 // html:'<div style="border: 0px solid black; position: relative; box-s

笑到世界都狼狈的博客 6374

推荐使用ExtendedText:强大的Flutter文本处理库

移动应用开发中,文本的呈现方式往往决定了用户体验的质量。Flutter提供了一套完整的文本渲染系统,但其内置的功能可能无法满足所有复杂需求。这就是`extended_text`库的用武之地——它是对Flutter官方`Text`组件的扩展,提供了一系列高级特性,让您的应用程序的文本展示更加丰富多彩。 ## 项目介绍 `extended_text`是一个由Flutter社区贡献的开源项目,专门

gitblog_00076的博客 907

Flutter RichText支持自定义文本溢出效果

extended text 相关文章 Flutter RichText支持图片显示和自定义图片效果 Flutter RichText支持自定义文本溢出效果 Flutter RichText支持自定义文字背景 Flutter RichText支持特殊文字效果 之前介绍过了Extended text的图片功能 ,今天要讲的还是跟产品设计有关系,老规矩上图 产品说,那个文本溢出的点点点后面给我加个...

weixin_33766805的博客 629

flutter适配openHarmony RichText文本

摘要 本文介绍了FlutterRichText组件的使用方法,通过多个示例展示富文本的实现技巧。基础示例演示了TextSpan的嵌套样式,链接文本示例展示可点击文本的实现,复杂富文本示例组合多种样式和交互。还包含关键词高亮和格式化文本的实现方法,以及高级应用场景如响应式设计、动画效果等。RichText通过TextSpan树结构支持多样式文本组合,配合手势识别器可实现丰富的文本交互效果。

ZH1545589131的博客 912

RealRichText核心原理揭秘:突破Flutter RichText限制的巧妙方案

RealRichText是一个专为Flutter开发者设计的终极解决方案,它巧妙突破了Flutter原生RichText组件不支持文本内联图片的限制,让开发者能够轻松实现图文混排效果。这个强大的插件通过创新的技术手段,解决了Flutter社区长期存在的图文混排难题,为移动应用开发带来了全新的可能性。 ## 为什么需要RealRichTextFlutter RichText的痛点分析 Flut

gitblog_01186的博客 816

Flutter RichText支持自定义文字背景

extended text 相关文章 Flutter RichText支持图片显示和自定义图片效果 Flutter RichText支持自定义文本溢出效果 Flutter RichText支持自定义文字背景 Flutter RichText支持特殊文字效果 之前介绍过了Extended text,老规矩上图 UI设计说,那个字可以加个卟呤卟呤闪闪的背景吗? 当然可以啊,没问题,我就去加,不就...

weixin_33730836的博客 584

Flutter 初识:文本控件

简单文本: 使用 Text。富文本: 使用 RichText 或 Text.rich。可选择文本: 使用 SelectableText。iOS 风格文本: 使用 DefaultTextStyle 配合 Cupertino 风格。如果你只需要显示文本,大多数情况下 Text 已经能够满足需求,而对于更复杂的样式和功能,你可以选择 RichText、SelectableText 等控件。

yang_6799的博客 1798

Flutter 学习 - Widget 之 RichText

前言 我们在进行开发的时候经常会遇到一段文本中会有不同的字体,不同的颜色展示,在Android开发中我们会使用SpannableString或者Html.fronHtml来进行处理,那么在Flutter中如何处理来做这样的展示呢,Flutter为我们提供了一个可以展示多中样式的Widget - RichText。 使用 首先先看下在最简单的使用方法 RichText( ...

迷途小顽童 656

Flutter适配OpenHarmony富文本RichText组件实践

通过合理使用RichText和TextSpan,结合HarmonyCandies等跨平台库,我们成功将Flutter文本功能无缝迁移到OpenHarmony平台。在实际项目中,我们发现关键在于理解两个平台的差异,并在代码中进行适当的适配。对于初学者,建议先从基础富文本开始,逐步实现更复杂的样式和交互。在OpenHarmony生态快速发展的今天,掌握Flutter与OpenHarmony的深度集成技术,将成为跨平台开发者的竞争优势。

2401_85571293的博客 569

鸿蒙Flutter文本RichText

本文介绍了FlutterRichText组件的使用方法,重点讲解了如何通过TextSpan实现富文本效果。内容包括基础用法、TextSpan属性详解(text、children、style、recognizer)、WidgetSpan嵌入图片和自定义Widget的方法,以及RichText的常用属性设置(textAlign、maxLines等)。文章还提供了实际应用示例,如带表情的文本和价格显示效果,帮助开发者快速掌握富文本的实现技巧。该组件特别适用于需要混合多种样式或嵌入Widget的文本展示场景。

世人万千丶的博客 228

关于flutter使用extended_text_field来让表情显示在输入框中

关于flutter使用extended_text_field来让表情显示在输入框中

Wuxiaoming135的博客 1435

Flutter 支持图片以及特殊文字的输入框(二)实现过程

extended_text_field 相关文章 Flutter 支持图片以及特殊文字的输入框(一)使用方法 Flutter 支持图片以及特殊文字的输入框(二)实现过程 上一篇关于extended_text_field的文章主要介绍下用法,这篇文章介绍下,实现的过程。 过程 文字中插入图片 键盘与输入框的关联 绘制过程 光标以及交互的处理 其他的坑 广告时间 文...

weixin_34161029的博客 1628

Flutter 基础控件 Text

Flutter 基础控件 Text /// 文本的案例 class TextDemo extends StatelessWidget{ @override Widget build(BuildContext context) { return Container( child: Column( children: <Widg...

小小熊的博客 271

TextField及富文本框的用法

flutter中,要用到富文本框,可以用extended_text_field第三方插件 class _MyHomePageState extends State<MyHomePage> { TextEditingController controller = new TextEditingController(); String result; @override Widget build(BuildContext context) { return Scaffo

Leove的专栏 1526

Flutter 扩展文本库 extended_text 使用指南

`extended_text` 是一个为 Flutter 开发的强大官方文本扩展库,它增强了标准 `Text` 组件的功能,支持内联图像、@提及功能等特殊文本处理,并提供了定制背景、文本溢出、自定义选择工具栏等特性。 下面是该仓库的基础目录结构概述: ``` extended_text/ ├── lib/ # 核心代码所在目录,包括扩展文本的主要实现。 │

gitblog_00024的博客 657

垃圾目标检测数据集.zip

垃圾目标检测数据集数据集名称:垃圾目标检测数据集 图片数量: - 训练集:231张图片 - 验证集:14张图片 - 总计:245张真实场景图片 分类类别: - Trash(垃圾):包含各类常见废弃物,适用于识别不同环境中的垃圾目标。标注格式: YOLO格式,包含标准化边界框坐标及类别标签,专为目标检测任务优化设计。 数据特性:真实场景拍摄图片,覆盖多样化垃圾形态与环境背景。1. 智能垃圾分类系统开发: 构建可自动识别垃圾目标的AI模型,适用于智能垃圾桶、垃圾处理厂分拣系统等应用场景。1. 环境清洁机器人视觉模块: 为清洁机器人提供垃圾定位能力,支持街道、公园等公共场所的自动化清扫。1. 环保监测解决方案: 集成至环境监测平台,自动识别违规倾倒垃圾行为,提升环保执法效率。1. 计算机视觉教学实践: 适用于目标检测算法教学与实验,提供真实场景的单类别检测训练数据。• 场景真实性强: 采集自实际环境中的垃圾目标,覆盖多样光照、角度和背景条件,确保模型泛化能力。• 标注规范统一: 采用标准化YOLO标注格式,所有边界框经过严格校验,确保空间定位准确性。• 任务适配度高: 专注单类别目标检测,可直接应用于YOLO系列、Faster R-CNN等主流检测框架。• 环保应用价值突出: 为解决城市垃圾识别与分类痛点提供核心数据支持,助力环保科技产品落地。

上一篇: Neo4j
下一篇: 天盟(IGG)今日香港上市
weixin_34400525
博客等级 码龄10年 5839粉丝 138原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值