iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Flutter如何实现文本滚动高亮效果
  • 436
分享到

Flutter如何实现文本滚动高亮效果

2023-06-29 13:06:09 436人浏览 薄情痞子
摘要

这篇文章主要介绍“Flutter如何实现文本滚动高亮效果”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Flutter如何实现文本滚动高亮效果”文章能帮助大家解决问题。功能实现因为在Text中会存在两

这篇文章主要介绍“Flutter如何实现文本滚动高亮效果”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Flutter如何实现文本滚动高亮效果”文章能帮助大家解决问题。

功能实现

因为在Text中会存在两段文本, 所以就不能单只用Text组件, 而改用Text.rich. 通过textSpan生成一个数组然后放到text.rich中. 所以本文需要处理, 而不是自己一个个拼接, 所以需要先有一个解析的类来负责处理.

需要在项目中加入第三方插件 string_scanner 用于扫描文本.

class StringParser {  // 导入的文本  final String content;  // 高亮部分尾部索引, 也就是两段的区分位置  final int endIndex;  StringParser({required this.content, required this.endIndex});  late StringScanner _scanner;  // 解析函数  InlineSpan parser() {    _scanner = StringScanner(content);    parseContent();    final List<InlineSpan> spans = [];    int currentPosition = 0;    // 需要高亮的部分    spans.add(TextSpan(style: _spans.style, text: _spans.text(content)));    currentPosition = _spans.end;    // 未高亮的部分    if (currentPosition != content.length) {      spans.add(          TextSpan(text: content.substring(currentPosition, content.length)));    }    return TextSpan(style: TextStyleSupport.defaultStyle, children: spans);  }  late SpanBean _spans;  // 解析需要变成高亮的字符  void parseContent() {    int startIndex = 0;    _spans = SpanBean(startIndex, endIndex);    if (!_scanner.isDone) {      _scanner.position++;    }  }}

之后需要定义一个高亮的数据类型, 用于方便修改之后想要高亮的文本样式和默认样式.

class SpanBean {  SpanBean(this.start, this.end);  final int start;  final int end;  String text(String src) {    return src.substring(start, end);  }  TextStyle get style => TextStyleSupport.highLightStyle;}class TextStyleSupport {  static const defaultStyle = TextStyle(color: Colors.black, fontSize: 36);  static const highLightStyle = TextStyle(color: Colors.green, fontSize: 36);}

至此文本高亮和非高亮处理完成, 只需要在文件中导入后使用.

滚动效果则需要实现一个play函数里通过 Future.delayed来控制延时递归执行.

_starPlay(flag) {// flag用于判断是 执行还是暂停    if (this.endIndex == content.length + 1 || !flag) {      return;    }    parser = StringParser(content: content, endIndex: this.endIndex++);    span = parser.parser();    setState(() {});    Future.delayed(Duration(milliseconds: 100)).then((value) {      _starPlay(this.flag);    });  }

最终在文件里的代码则是

import 'package:flutter/material.dart';import 'string_parser.dart';void main() {  runApp(MyApp());}class MyApp extends StatelessWidget {  // This widget is the root of your application.  @override  Widget build(BuildContext context) {    return MaterialApp(      title: 'Flutter Demo',      home: MyHomePage(),    );  }}class MyHomePage extends StatefulWidget {  MyHomePage({Key? key}) : super(key: key);  @override  _MyHomePageState createState() => _MyHomePageState();}class _MyHomePageState extends State<MyHomePage> {  late InlineSpan span;  final String content =      """一点不错,”狐狸说。“对我来说,你还只是一个小男孩,就像其他千万个小男孩一样。我不需要你。你也同样用不着我。对你来说,我也不过是一只狐狸,和其他千万只狐狸一样。但是,如果你驯服了我,我们就互相不可缺少了。对我来说,你就是世界上唯一的了;我对你来说,也是世界上唯一的了。""";  late StringParser parser;  int endIndex = 0;  bool flag = true;  @override  void initState() {    super.initState();    parser = StringParser(content: content, endIndex: endIndex);    span = parser.parser();  }  @override  Widget build(BuildContext context) {    return Scaffold(        appBar: AppBar(          title: Text("滚动高亮文本"),          actions: [            ElevatedButton(                onPressed: () {                  this.flag = true;                  _starPlay(flag);                  print('开始');                },                child: Text("开始")),            ElevatedButton(                onPressed: () {                  this.flag = false;                  // _starPlay(flag);                  print('暂停');                },                child: Text("暂停"))          ],        ),        body: Padding(          padding: const EdgeInsets.all(20.0),          child: Text.rich(span),        ));  }  _starPlay(flag) {    if (this.endIndex == content.length + 1 || !flag) {      return;    }    parser = StringParser(content: content, endIndex: this.endIndex++);    span = parser.parser();    setState(() {});    Future.delayed(Duration(milliseconds: 100)).then((value) {      _starPlay(this.flag);    });  }}

实现效果:

Flutter如何实现文本滚动高亮效果

关于“Flutter如何实现文本滚动高亮效果”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注编程网精选频道,小编每天都会为大家更新不同的知识点。

--结束END--

本文标题: Flutter如何实现文本滚动高亮效果

本文链接: https://www.lsjlt.com/news/325114.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Flutter如何实现文本滚动高亮效果
    这篇文章主要介绍“Flutter如何实现文本滚动高亮效果”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Flutter如何实现文本滚动高亮效果”文章能帮助大家解决问题。功能实现因为在Text中会存在两...
    99+
    2023-06-29
  • Flutter实现文本滚动高亮效果的示例讲解
    目录前言功能实现前言 最近有个需求是人工语音播放时文本能随语音朗读时像歌词滚动的效果. 原本第一考虑的时能随时间字体渐变成更改后的颜色, 有比较流畅的走马灯效果. 但最终实践了几次后...
    99+
    2024-04-02
  • HTML如何实现滚动文字效果
    小编给大家分享一下HTML如何实现滚动文字效果,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!在HTML中,可以使用marquee标签实现滚动文字效果,该标签可以向...
    99+
    2023-06-15
  • Android Flutter如何实现有趣的页面滚动效果
    本文小编为大家详细介绍“Android Flutter如何实现有趣的页面滚动效果”,内容详细,步骤清晰,细节处理妥当,希望这篇“Android Flutter如何实现有趣的页面滚动效果”文章能帮助大家解决疑惑,下面跟着小...
    99+
    2023-07-02
  • Flutter实现Android滚动悬浮效果过程
    目录1、计算每个区块的高度2、实现分析-tabBar透明度渐变3、实现分析-app上下滚动触发tabBar4、实现分析-tabBar切换触发app滚动5、源码有以下几种效果 1、ta...
    99+
    2023-01-29
    Flutter滚动悬浮 Flutter滚动悬浮效果
  • Android如何实现文字动态高亮读取进度效果
    小编给大家分享一下Android如何实现文字动态高亮读取进度效果,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!具体内容如下1、效果图类似歌词的效果。播放下面文字的音频,同时音频播放的进度和文字高亮进度保持一致。2、代码结构...
    99+
    2023-06-15
  • js如何实现文字滚动的效果
    这篇文章主要介绍“js如何实现文字滚动的效果”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“js如何实现文字滚动的效果”文章能帮助大家解决问题。1、取值:(1)writing-mode:horizon...
    99+
    2023-07-02
  • 如何用javascript实现文字滚动效果
    这篇文章主要介绍“如何用javascript实现文字滚动效果”,在日常操作中,相信很多人在如何用javascript实现文字滚动效果问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解...
    99+
    2024-04-02
  • jQuery如何实现滚动效果
    这篇文章主要介绍了jQuery如何实现滚动效果,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。1. 图片轮播:原理如下: 假设有三张图片,三张...
    99+
    2024-04-02
  • css如何实现滚动效果
    本篇内容主要讲解“css如何实现滚动效果”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“css如何实现滚动效果”吧!css通过overflow属性设置滚动条示例:<html><h...
    99+
    2023-07-04
  • Android Flutter实现有趣的页面滚动效果
    目录CustomScrollView 简介改造原代码让导航栏更有趣改造后的代码其他效果总结在Flutter 高仿一个某支付价值几个亿的页面这一篇中,我们使用了 ListVi...
    99+
    2024-04-02
  • vue实现文字滚动效果
    本文实例为大家分享了vue实现文字滚动效果的具体代码,供大家参考,具体内容如下 项目需求:系统公告,要从右忘左循环播放的牛皮广告效果。 实现: 方案一:使用定时器和CSS3的过渡属性...
    99+
    2024-04-02
  • css如何实现文字循环滚动效果
    这篇文章主要介绍“css如何实现文字循环滚动效果”,在日常操作中,相信很多人在css如何实现文字循环滚动效果问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”css如何实现文字循...
    99+
    2024-04-02
  • 如何运用CSS3动画实现高亮光弧效果
    小编给大家分享一下如何运用CSS3动画实现高亮光弧效果,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!代码如下:<!Doct...
    99+
    2024-04-02
  • Android实现文字动态高亮读取进度效果
    本文实例为大家分享了Android实现文字动态高亮读取进度的具体代码,供大家参考,具体内容如下 1、效果图 类似歌词的效果。播放下面文字的音频,同时音频播放的进度和文字高亮进度保持一...
    99+
    2024-04-02
  • js实现文字滚动的效果
    本文实例为大家分享了js实现文字滚动的效果的具体代码,供大家参考,具体内容如下 在之前小编已经和大家介绍了一些常用的js动画效果,在此,和大家介绍一种可能不太常用的动画效果。该动画效...
    99+
    2024-04-02
  • Android Flutter如何实现3D动画效果
    这篇文章主要讲解了“Android Flutter如何实现3D动画效果”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Android Flutter如何实现3D动画效果”吧...
    99+
    2023-06-29
  • jQuery如何实现滚动刷新效果
    这篇文章给大家分享的是有关jQuery如何实现滚动刷新效果的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Jquery实现简单的滚动刷新效果: 实际情况使用Ajax获取后台数据更新...
    99+
    2024-04-02
  • Qt如何实现字幕滚动效果
    这篇文章主要介绍“Qt如何实现字幕滚动效果”,在日常操作中,相信很多人在Qt如何实现字幕滚动效果问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Qt如何实现字幕滚动效果”的疑惑有所帮助!接下来,请跟着小编一起来...
    99+
    2023-07-02
  • JavaScript如何实现视差滚动效果
    本文小编为大家详细介绍“JavaScript如何实现视差滚动”,内容详细,步骤清晰,细节处理妥当,希望这篇“JavaScript如何实现视差滚动”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。概念视差滚动效果是一种...
    99+
    2023-07-05
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作