前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >【Flutter 实战】自定义文本步进组件

【Flutter 实战】自定义文本步进组件

作者头像
老孟Flutter
发布2020-11-26 16:12:10
发布2020-11-26 16:12:10
51800
代码可运行
举报
文章被收录于专栏:FlutterFlutter
运行总次数:0
代码可运行

老孟导读:此文介绍一个自定义组件,欢迎大家到 Github 上给个小星星,Github 还有很多我整理的 Flutter 资源。 Github 地址:https://github.com/781238222/flutter-do

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

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

引入软件包

pubspec.yaml 中添加如下依赖:

代码语言:javascript
代码运行次数:0
复制
dependencies:
  write_text: ^0.0.1

执行命令:

代码语言:javascript
代码运行次数:0
复制
flutter pub get

使用

代码语言:javascript
代码运行次数:0
复制
WriteText(data: 'StepText 是一个步进文本组件,即字符一个一个显示,就像手写一样。'),

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

代码语言:javascript
代码运行次数:0
复制
WriteText(
  data: 'StepText 是一个步进文本组件,即字符一个一个显示,就像手写一样。',
  perMillSeconds: 1000,
)

设置字体样式

代码语言:javascript
代码运行次数:0
复制
WriteText(
  data: 'StepText 是一个步进文本组件,即字符一个一个显示,就像手写一样。',
  textStyle: TextStyle(fontSize: 20, color: Colors.red),
)

设置不显示光标:

代码语言:javascript
代码运行次数:0
复制
WriteText(
  data: 'StepText 是一个步进文本组件,即字符一个一个显示,就像手写一样。',
  showCursor: false,
),

设置自定义光标:

代码语言:javascript
代码运行次数:0
复制
WriteText(
  data: 'StepText 是一个步进文本组件,即字符一个一个显示,就像手写一样。',
  cursor: Container(
    width: 2,
    height: 16,
    color: Colors.red,
  ),
)

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

代码语言:javascript
代码运行次数:0
复制
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,
            ),

看下面的效果

完整代码如下:

代码语言:javascript
代码运行次数:0
复制
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(),
            );
          },
        ),
      ),
    );
  }
}
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-11-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 老孟Flutter 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 引入软件包
  • 使用
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档