flutter如何实现文本滚动高亮效果-mile米乐体育

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

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

功能实现

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

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

classstringparser{//导入的文本finalstringcontent;//高亮部分尾部索引,也就是两段的区分位置finalintendindex;stringparser({requiredthis.content,requiredthis.endindex});latestringscanner_scanner;//解析函数inlinespanparser(){_scanner=stringscanner(content);parsecontent();finallistspans=[];intcurrentposition=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)));}returntextspan(style:textstylesupport.defaultstyle,children:spans);}latespanbean_spans;//解析需要变成高亮的字符voidparsecontent(){intstartindex=0;_spans=spanbean(startindex,endindex);if(!_scanner.isdone){_scanner.position ;}}}

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

classspanbean{spanbean(this.start,this.end);finalintstart;finalintend;stringtext(stringsrc){returnsrc.substring(start,end);}textstylegetstyle=>textstylesupport.highlightstyle;}classtextstylesupport{staticconstdefaultstyle=textstyle(color:colors.black,fontsize:36);staticconsthighlightstyle=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';voidmain(){runapp(myapp());}classmyappextendsstatelesswidget{//thiswidgetistherootofyourapplication.@overridewidgetbuild(buildcontextcontext){returnmaterialapp(title:'flutterdemo',home:myhomepage(),);}}classmyhomepageextendsstatefulwidget{myhomepage({key?key}):super(key:key);@override_myhomepagestatecreatestate()=>_myhomepagestate();}class_myhomepagestateextendsstate{lateinlinespanspan;finalstringcontent="""一点不错,”狐狸说。“对我来说,你还只是一个小男孩,就像其他千万个小男孩一样。我不需要你。你也同样用不着我。对你来说,我也不过是一只狐狸,和其他千万只狐狸一样。但是,如果你驯服了我,我们就互相不可缺少了。对我来说,你就是世界上唯一的了;我对你来说,也是世界上唯一的了。""";latestringparserparser;intendindex=0;boolflag=true;@overridevoidinitstate(){super.initstate();parser=stringparser(content:content,endindex:endindex);span=parser.parser();}@overridewidgetbuild(buildcontextcontext){returnscaffold(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:constedgeinsets.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如何实现文本滚动高亮效果”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注恰卡编程网行业资讯频道,小编每天都会为大家更新不同的知识点。

展开全文
内容来源于互联网和用户投稿,文章中一旦含有米乐app官网登录的联系方式务必识别真假,本站仅做信息展示不承担任何相关责任,如有侵权或涉及法律问题请联系米乐app官网登录删除

最新文章

网站地图