Flutter文本形态变换插件morphing_text的使用

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

Flutter文本形态变换插件morphing_text的使用

简介

Morphing Text 是一个受 LTMorphingLabel 启发的文本动画集合。

动画类型

ScaleMorphingText

以下是 ScaleMorphingText 的示例:

scale.gif

// 创建一个缩放形态变换文本
ScaleMorphingText(
    texts: text, // 文本列表
    loopForever: true, // 是否无限循环
    onComplete: () {}, // 完成时的回调函数
    textStyle: TextStyle(fontSize: 40.0), // 文本样式
),
EvaporateMorphingText

以下是 EvaporateMorphingText 的示例:

evaporate.gif

// 创建一个蒸发形态变换文本
EvaporateMorphingText(
    texts: text, // 文本列表
    loopForever: true, // 是否无限循环
    onComplete: () {}, // 完成时的回调函数
    yDisplacement: 1.2, // y方向位移因子
    textStyle: TextStyle(fontSize: 40.0), // 文本样式
),

所有参数

以下是所有可用参数的详细信息:

类型 参数 描述 默认值
List<String> texts 显示的文本列表 -
TextStyle textStyle 文本样式 DefaultTextStyle
Duration speed 每个文本切换的速度 500毫秒
Duration pause 每次过渡之间的暂停时间 1500毫秒
bool loopForever 如果为 true,动画将无限重复 false
int loopCount 动画重复的次数 1
void onComplete loopCount 完成时调用 -
Curve fadeInCurve 控制从0到1的透明度变化曲线 Curves.easeInExpo
Curve fadeOutCurve 控制从1到0的透明度变化曲线 Curves.easeOut
Curve progressCurve 控制文本移动和缩放变化的曲线 Curves.easeIn

注意: 更改曲线是纯粹实验性的,请根据需要选择适当的曲线或保留默认值。

自定义动画

  1. 要创建自定义动画,请扩展您的类 MorphingText
class CustomFooMorphingText extends MorphingText {
  ...
}
  1. 覆盖 incomingTextoutgoingText 方法以分别处理下一个文本的进入和前一个文本的退出,并将 texttextStyleprogress 传递给父类。
class CustomFooMorphingText extends MorphingText {
  CustomFooMorphingText(
      String text,
      TextStyle textStyle,
      double progress,
  ) : super(text, textStyle, progress);

  [@override](/user/override)
  TextProperties morphingText(TextProperties textProperties) {
    // 可选:更改移动文本的运动方式
  }

  [@override](/user/override)
  TextProperties incomingText(TextProperties textProperties) {
    // 编写下一个文本的逻辑
  }

  [@override](/user/override)
  TextProperties outgoingText(TextProperties textProperties) {
    // 编写离开文本的逻辑
  }
}
  1. 在构建方法中将您的自定义动画传递给 CustomMorphingText
CustomMorphingText(
  morphingText: CustomFooMorphingText(
    texts[index],
    DefaultTextStyle.of(context).style.merge(widget.textStyle),
    _progress.value,
  ),
);
  1. 例如,您可以在 GitHub 上查看 CustomScaleMorphingText 的实现。

示例代码

以下是一个完整的示例 demo,展示如何在 Flutter 应用中使用 morphing_text 插件。

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

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Morhing text',
      theme: ThemeData(
        visualDensity: VisualDensity.adaptivePlatformDensity,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key? key}) : super(key: key);

  [@override](/user/override)
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  static const List<String> text = [
    "Design",
    "Design is not just",
    "what it looks like",
    "and feels like.",
    "Design",
    "Design is how it works.",
    "- Steve Jobs",
  ];

  List<Widget> animations = [
    EvaporateMorphingText(
      texts: text, // 文本列表
      loopForever: true, // 是否无限循环
      onComplete: () {
        print("Completed"); // 完成时的回调函数
      },
      textStyle: TextStyle(fontSize: 30.0), // 文本样式
    ),
    ScaleMorphingText(
      texts: text, // 文本列表
      loopForever: true, // 是否无限循环
      onComplete: () {
        print("Completed"); // 完成时的回调函数
      },
      textStyle: TextStyle(fontSize: 30.0), // 文本样式
    ),
  ];

  int index = 0;

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: animations[index % animations.length], // 显示当前索引的动画
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: () {
          setState(() {
            index++; // 点击按钮后增加索引
          });
        },
        child: Icon(Icons.arrow_forward_ios), // 按钮图标
      ),
    );
  }
}

更多关于Flutter文本形态变换插件morphing_text的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter文本形态变换插件morphing_text的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是一个关于如何使用Flutter中的morphing_text插件来实现文本形态变换的示例代码。这个插件允许你在Flutter应用中平滑地从一个文本变换到另一个文本。

首先,确保你已经在pubspec.yaml文件中添加了morphing_text依赖:

dependencies:
  flutter:
    sdk: flutter
  morphing_text: ^x.y.z  # 请替换为最新版本号

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

接下来,你可以在你的Flutter应用中使用MorphingText小部件。以下是一个完整的示例代码:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Morphing Text Example',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: Scaffold(
        appBar: AppBar(
          title: Text('Morphing Text Example'),
        ),
        body: Center(
          child: MorphingTextExample(),
        ),
      ),
    );
  }
}

class MorphingTextExample extends StatefulWidget {
  @override
  _MorphingTextExampleState createState() => _MorphingTextExampleState();
}

class _MorphingTextExampleState extends State<MorphingTextExample> with SingleTickerProviderStateMixin {
  late AnimationController _controller;
  late Animation<double> _animation;

  @override
  void initState() {
    super.initState();
    _controller = AnimationController(
      duration: const Duration(seconds: 2),
      vsync: this,
    )..repeat(reverse: true);

    _animation = Tween<double>(begin: 0, end: 1).animate(_controller);
  }

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

  @override
  Widget build(BuildContext context) {
    return MorphingText(
      text1: 'Hello',
      text2: 'World',
      animation: _animation,
      style: TextStyle(fontSize: 32, color: Colors.black),
    );
  }
}

在这个示例中:

  1. MyApp是应用的主入口,它定义了一个基本的Material应用结构。
  2. MorphingTextExample是一个有状态的widget,它持有AnimationControllerAnimation对象,用于控制文本的变换动画。
  3. initState方法中,我们初始化了AnimationController并设置了一个持续时间为2秒的动画,该动画会无限次地正向和反向播放。
  4. MorphingText小部件接收两个文本字符串text1text2,以及一个animation对象来控制变换过程。你还可以自定义文本的样式。

运行这个示例,你将看到一个平滑地从"Hello"变换到"World"的文本动画。你可以根据需要调整动画的持续时间、文本的样式等。

回到顶部