You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Telegram动图贴纸.tgs移植到Flutter项目中?

在Flutter中展示Telegram .tgs动图贴纸的实现方案

.tgs本质是Telegram基于Lottie动画标准压缩的动图格式,直接用Flutter的lottie包就能实现展示,以下是具体步骤和代码示例:

1. 添加依赖

在项目的pubspec.yaml中引入lottie包(建议使用最新稳定版本):

dependencies:
  flutter:
    sdk: flutter
  lottie: ^2.7.0

执行flutter pub get完成依赖安装。

2. 加载并展示.tgs贴纸

方式一:加载本地.tgs文件

  1. 将.tgs文件放入项目的assets目录(比如assets/stickers/hello.tgs),然后在pubspec.yaml中声明资源:
flutter:
  assets:
    - assets/stickers/hello.tgs
  1. 使用Lottie.asset组件渲染:
import 'package:flutter/material.dart';
import 'package:lottie/lottie.dart';

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

  @override
  Widget build(BuildContext context) {
    return Lottie.asset(
      'assets/stickers/hello.tgs',
      width: 200,
      height: 200,
      fit: BoxFit.contain,
      repeat: true, // 控制是否循环播放,默认true
      animate: true, // 控制是否自动播放,默认true
    );
  }
}

方式二:加载网络.tgs文件

直接通过网络URL加载,无需本地资源配置:

Lottie.network(
  'https://your-domain.com/stickers/hello.tgs',
  width: 200,
  height: 200,
  fit: BoxFit.contain,
  // 可选:添加加载中和错误状态占位
  placeholder: (context) => const CircularProgressIndicator(),
  errorBuilder: (context, error, stackTrace) => const Icon(Icons.error_outline),
);

3. 自定义播放控制

如果需要手动控制播放、暂停、重置等操作,可使用LottieController:

class ControlledTgsSticker extends StatefulWidget {
  const ControlledTgsSticker({super.key});

  @override
  State<ControlledTgsSticker> createState() => _ControlledTgsStickerState();
}

class _ControlledTgsStickerState extends State<ControlledTgsSticker> with TickerProviderStateMixin {
  late final LottieController _controller;

  @override
  void initState() {
    super.initState();
    _controller = LottieController(vsync: this);
  }

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

  @override
  Widget build(BuildContext context) {
    return Column(
      children: [
        Lottie.asset(
          'assets/stickers/hello.tgs',
          controller: _controller,
          width: 200,
          height: 200,
        ),
        Row(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            IconButton(icon: const Icon(Icons.play_arrow), onPressed: () => _controller.play()),
            IconButton(icon: const Icon(Icons.pause), onPressed: () => _controller.pause()),
            IconButton(icon: const Icon(Icons.stop), onPressed: () => _controller.reset()),
          ],
        ),
      ],
    );
  }
}

4. 注意事项

  • .tgs是ZIP压缩的Lottie JSON文件,lottie包会自动完成解压和解析,无需手动处理。
  • 若加载失败,优先检查本地资源路径是否正确,或网络URL是否可正常访问。
  • 可通过LottieBuilder的options参数自定义动画渲染,比如替换颜色、调整帧率等。

内容的提问来源于stack exchange,提问作者aya Cangtip

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 23:25:17