【老孟Flutter】自定义文本步进组件

智极领航
• 阅读 1785

【老孟Flutter】自定义文本步进组件

老孟导读:此文介绍一个自定义组件,欢迎大家到 Github 上给个小星星,Github 还有很多我整理的 Flutter 资源。

【老孟Flutter】自定义文本步进组件

WriteText 组件是一个文本步进组件,即字符一个一个显示,就像手写一样。

【老孟Flutter】自定义文本步进组件

pub 地址:https://pub.dev/packages/write_text

Github 地址:https://github.com/781238222/flutter-do/tree/master/write_text

引入软件包

pubspec.yaml 中添加如下依赖:

dependencies:
  write_text: ^0.0.1

执行命令:

flutter pub get

使用

WriteText(data: 'StepText 是一个步进文本组件,即字符一个一个显示,就像手写一样。'),

【老孟Flutter】自定义文本步进组件

默认情况下,每个字符出现时长是 300 ms,设置时长为 1 秒:

WriteText(
  data: 'StepText 是一个步进文本组件,即字符一个一个显示,就像手写一样。',
  perMillSeconds: 1000,
)

【老孟Flutter】自定义文本步进组件

设置字体样式

WriteText(
  data: 'StepText 是一个步进文本组件,即字符一个一个显示,就像手写一样。',
  textStyle: TextStyle(fontSize: 20, color: Colors.red),
)

【老孟Flutter】自定义文本步进组件

设置不显示光标:

WriteText(
  data: 'StepText 是一个步进文本组件,即字符一个一个显示,就像手写一样。',
  showCursor: false,
),

设置自定义光标:

WriteText(
  data: 'StepText 是一个步进文本组件,即字符一个一个显示,就像手写一样。',
  cursor: Container(
    width: 2,
    height: 16,
    color: Colors.red,
  ),
)

【老孟Flutter】自定义文本步进组件

主动控制组件的启动和暂停:

WriteTextController _controller = WriteTextController();
bool starting = false;

RaisedButton(
              onPressed: () {
                if (starting) {
                  starting = false;
                  _controller.stop();
                } else {
                  starting = true;
                  _controller.start();
                }
                setState(() {});
              },
              child: Text('${starting ? '暂停' : '启动'}'),
            ),
            WriteText(
              data: _data,
              controller: _controller,
              autoStart: false,
            ),

【老孟Flutter】自定义文本步进组件

看下面的效果

完整代码如下:

class Demo extends StatefulWidget {
  @override
  _DemoState createState() => _DemoState();
}

class _DemoState extends State<Demo> with SingleTickerProviderStateMixin {
  AnimationController _controller;

  @override
  void initState() {
    _controller =
        AnimationController(vsync: this, duration: Duration(seconds: 2));
    _controller.forward();
    super.initState();
  }

  @override
  void dispose() {
    _controller.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(),
      body: Center(
        child: AnimatedBuilder(
          animation: _controller,
          builder: (BuildContext context, Widget child) {
            return Container(
              padding: EdgeInsets.symmetric(horizontal: 10),
              decoration: BoxDecoration(
                  color: Colors.lightBlue,
                  borderRadius: BorderRadius.circular(4)),
              height: 45,
              width: _controller.value * 200,
              alignment: Alignment.center,
              child: _controller.value == 1.0
                  ? WriteText(
                      data: '老孟 Flutter',
                      perMillSeconds: 200,
                      textStyle: TextStyle(fontSize: 16, color: Colors.white),
                      cursor: Container(
                        height: 2,
                        width: 8,
                        color: Colors.white,
                      ),
                    )
                  : Container(),
            );
          },
        ),
      ),
    );
  }
}

交流

老孟Flutter博客(330个控件用法+实战入门系列文章):http://laomengit.com

添加微信或者公众号领取 《330个控件大全》和 《Flutter 实战》PDF。

欢迎加入Flutter交流群(微信:laomengit)、关注公众号【老孟Flutter】:

【老孟Flutter】自定义文本步进组件【老孟Flutter】自定义文本步进组件
点赞
收藏
评论区
推荐文章
Wesley13 Wesley13
4年前
PPDB:今晚老齐直播
【今晚老齐直播】今晚(本周三晚)20:0021:00小白开始“用”飞桨(https://www.oschina.net/action/visit/ad?id1185)由PPDE(飞桨(https://www.oschina.net/action/visit/ad?id1185)开发者专家计划)成员老齐,为深度学习小白指点迷津。
Stella981 Stella981
4年前
Flutter vs React Native vs Native:深度性能比较
!(https://oscimg.oschina.net/oscnet/up5410e759aa8ea7d5747ab3d9dcc200d3ffe.png)老孟导读:这是老孟翻译的付费文章,文章所有权归原作者所有。欢迎加入老孟Flutter交流群,每周翻译23篇付费文章,精彩不容错过。原文地址:https:/
Stella981 Stella981
4年前
React Hooks实现异步请求实例—useReducer、useContext和useEffect代替Redux方案
<blockquote本文是学习了2018年新鲜出炉的ReactHooks提案之后,针对<strong异步请求数据</strong写的一个案例。注意,本文假设了:<br1.你已经初步了解<codehooks</code的含义了,如果不了解还请移步<ahref"https://reactjs.org/docs/hooksintro.html
Stella981 Stella981
4年前
Flutter 完美的验证码输入框
!(https://oscimg.oschina.net/oscnet/3aec3c948f265202e5e08f1a1253447e89b.png)老孟导读:刚开始看到这个功能的时候一定觉得soeasy,开始的时候我也是这么觉得的,这还不简单,然而真正写的时候才发现并没有想象的那么简单。先上图,不上图你们都不想看,
Stella981 Stella981
4年前
Flutter 实现酷炫的3D效果
!(https://oscimg.oschina.net/oscnet/2a34303ee391c70540d1747e4aa521b0b5e.png)老孟导读:此文讲解3个酷炫的3D动画效果。下面是要实现的效果:!(https://oscimg.oschina.net/oscnet/cacf46143ca941c8a
Stella981 Stella981
4年前
Flutter中如何使用WillPopScope
!(https://oscimg.oschina.net/oscnet/up39de92df7002d3e246160ac64f08f7e582b.png)老孟导读:在Flutter中如何实现点击2次Back按钮退出App,如何实现App中多个Route(路由),如何实现Back按钮只退出指定页面,此篇文章将告诉你。WillPopScope
可莉 可莉
4年前
14Flutter StatefulWidget有状态组件、页面上绑定数据、改变页面数据、实现计数器功能、动态列表
/FlutterStatefulWidget有状态组件、页面上绑定数据、改变页面数据在Flutter中自定义组件其实就是一个类,这个类需要继承StatelessWidget/StatefulWidgetStatelessWidget是无状态组件,状态不可变得widgetStatef
Stella981 Stella981
4年前
Flutter 中不得不会的 mixin
!(https://oscimg.oschina.net/oscnet/de312342adb941da9ada2db32bcfc2f5.png)老孟导读:mixin是Dart中非常重要的概念,对于未接触过此概念的Coder来说尤其重要,最近看源码的时候,由于对mixin不熟悉导致理解出现偏差,走了很多弯路,所以
Wesley13 Wesley13
4年前
Java日期时间API系列36
  十二时辰,古代劳动人民把一昼夜划分成十二个时段,每一个时段叫一个时辰。二十四小时和十二时辰对照表:时辰时间24时制子时深夜11:00凌晨01:0023:0001:00丑时上午01:00上午03:0001:0003:00寅时上午03:00上午0
Stella981 Stella981
4年前
FLutter父子组件通信
本文介绍flutter父子组件数据传递和回调.还是以之前的代码为例Flutter\_DayByDay(https://gitee.com/Royce_he/Flutter_DayByDay)由于之前用ReactNative写项目,顺便对比一下RN父组件直接在xml标签中写属性{值/方法},子组件通过props去取属性和方法
Stella981 Stella981
4年前
Flutter 粘合剂CustomScrollView控件
!(https://img2020.cnblogs.com/other/467322/202005/467322202005062053524221060909673.png)老孟导读:快乐的51假期结束了,切换为努力模式,今天给大家分享CustomScrollView组件,此组件在以后的项目中会经常用到,CustomScrollView就像