Flutter文本打字效果插件typewrite_text的使用

发布于 1周前 作者 gougou168 来自 Flutter

Flutter文本打字效果插件typewrite_text的使用

typewrite_text

pub package

typewrite_text 是一个带有自定义功能的打字机文本动画包装器。它支持iOS、Android、Web、Windows、macOS和Linux平台。

动机

在创建个人网站时,我决定通过添加一个小而引人注目的文本动画来为网站增添魅力。这一细节不仅使我的网站更加美观,还带来了动态感,使其在众多网站中脱颖而出。虽然有一些包提供了几乎满足需求的功能,但它们并不能完全符合我的预期。

功能

  • 支持设置前进和反向动画的不同延迟。
  • 支持设置动画开始前和结束后的不同延迟。
  • 可以仅使用“前进”模式。
  • 任何Unicode符号都可以用作“光标”符号。
  • 可以选择是否使用动画文本光标。
  • 支持设置文本主题。
  • 在Android和iOS设备上可以使用振动效果。

使用方法

基本动画

只需添加文本行并指定文本样式:

TypewriteText(
  linesOfText: ['Hello World', 'Hello Flutter', 'Hello Dart'],
  textStyle: TextStyle(color: Colors.red),
  cursorSymbol: '|',
),

单边动画(不显示动画文本光标)

TypewriteText(
  linesOfText: ['Hello World', 'Hello Flutter', 'Hello Dart'],
  textStyle: TextStyle(color: Colors.blue, fontSize: 20, fontWeight: FontWeight.bold),
  reverseAnimationDuration: Duration.zero,
  beforeAnimationDuration: Duration.zero,
)

更多示例可以在包的"example"文件夹中找到。

文档

属性 目的
linesOfText 要显示的字符串列表。
textStyle 这些字符串的文本样式。
forwardAnimationDuration 符号出现的速度。
reverseAnimationDuration 符号消失的速度。
beforeAnimationDuration 符号初次出现前的间隔。
afterAnimationDuration 所有符号显示完毕后的暂停时间。
cursorBlinkingDuration 光标闪烁的时间间隔(如果cursorSymbol != null)。如果使用Duration.zero,则光标始终可见。
cursorSymbol 默认值是null,这意味着不会显示光标。否则,使用任何Unicode符号作为光标符号。
cursorColor 动画文本光标的颜色。
tryToVibrate 振动类型的枚举值,默认是"none"。
textAlign 基础小部件中的文本对齐方式。多行输出时很重要。
callback 当动画达到beforeAnimationDuration时的回调。这表示linesOfText的一个元素已显示并隐藏,并且我们即将显示下一个元素。
infiniteLoop 无限循环动画的标志,默认是true。

示例代码

以下是一个完整的示例代码,展示了如何在Flutter应用中使用typewrite_text

import 'package:flutter/material.dart';
import 'package:typewrite_text/typewrite_text.dart';

void main() => runApp(const TextPackageApp());

const list1 = [
  'Hello World',
  'Hello Flutter',
  'Hello Dart',
];

const list2 = [
  "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book.",
];

class TextPackageApp extends StatelessWidget {
  const TextPackageApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Text Package Demo',
      home: Scaffold(
        appBar: AppBar(
          title: const Text('typewrite_text demo'),
        ),
        body: const SingleChildScrollView(
          child: Padding(
            padding: EdgeInsets.all(24),
            child: Column(
              crossAxisAlignment: CrossAxisAlignment.start,
              children: [
                /// basic animation
                TypewriteText(
                  linesOfText: list1,
                  textStyle: TextStyle(color: Colors.red),
                  cursorSymbol: '|',
                ),
                SizedBox(height: 20),

                /// oneside animation (without reverse animation)
                TypewriteText(
                  linesOfText: list1,
                  textStyle: TextStyle(
                      color: Colors.blue,
                      fontSize: 20,
                      fontWeight: FontWeight.bold),
                  reverseAnimationDuration: Duration.zero,
                  beforeAnimationDuration: Duration.zero,
                ),
                SizedBox(height: 20),

                /// multiline text animation
                SizedBox(
                  height: 100,
                  child: TypewriteText(
                    linesOfText: list2,
                    textStyle: TextStyle(color: Colors.black),
                    forwardAnimationDuration: Duration(milliseconds: 50),
                    reverseAnimationDuration: Duration(milliseconds: 20),
                    cursorColor: Colors.red,
                    cursorSymbol: '|',
                  ),
                ),

                SizedBox(height: 20),
              ],
            ),
          ),
        ),
      ),
    );
  }
}

通过以上代码,您可以在Flutter应用中实现多种打字机文本动画效果。希望这对您有所帮助!


更多关于Flutter文本打字效果插件typewrite_text的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter文本打字效果插件typewrite_text的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,下面是一个关于如何在Flutter中使用typewrite_text插件来实现文本打字效果的代码示例。这个插件可以让你在Flutter应用中创建类似打字机效果的文本显示。

首先,你需要在你的pubspec.yaml文件中添加这个插件的依赖:

dependencies:
  flutter:
    sdk: flutter
  typewrite_text: ^x.y.z  # 请使用最新版本号替换x.y.z

然后,运行flutter pub get来安装依赖。

接下来,在你的Flutter应用中,你可以按照以下方式使用TypewriteText组件:

import 'package:flutter/material.dart';
import 'package:typewrite_text/typewrite_text.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Typewrite Text Example'),
        ),
        body: Center(
          child: TypewriteText(
            text: [
              "Hello, ",
              "this is a ",
              "typing effect ",
              "demo!",
            ],
            speed: Duration(milliseconds: 150),  // 每个字符的显示速度
            pauseBetweenLines: Duration(milliseconds: 500),  // 每行之间的暂停时间
            repeat: true,  // 是否重复显示文本
            onFinish: () {
              print("Typing finished!");
            },
            textStyle: TextStyle(
              fontSize: 24,
              color: Colors.blue,
            ),
            cursor: Cursor(
              active: true,
              blinking: true,
              width: 2.0,
              color: Colors.black,
            ),
          ),
        ),
      ),
    );
  }
}

代码说明:

  1. TypewriteText组件

    • text:一个字符串列表,表示要逐字显示的文本。
    • speed:每个字符显示的速度,这里设置为150毫秒。
    • pauseBetweenLines:每行文本之间的暂停时间,这里设置为500毫秒。
    • repeat:是否重复显示文本,这里设置为true
    • onFinish:当打字效果完成时调用的回调函数。
    • textStyle:文本的样式,包括字体大小和颜色。
    • cursor:光标样式,包括是否显示、是否闪烁、宽度和颜色。
  2. MaterialApp和Scaffold:用于构建基本的Flutter应用结构。

  3. Center:将TypewriteText组件居中对齐。

通过这段代码,你可以在你的Flutter应用中实现一个带有打字效果的文本显示。如果你需要更多自定义效果,可以查阅typewrite_text插件的官方文档。

回到顶部