Flutter GIF图片显示插件flutter_gifimage的使用

Flutter GIF图片显示插件flutter_gifimage的使用

在Flutter开发过程中,有时候我们需要显示GIF动画。虽然Flutter本身支持通过Image来显示GIF,但是它不支持对GIF进行更复杂的控制,比如改变播放速度、循环播放范围等。flutter_gifimage插件提供了这些功能,并且可以帮助你缓存GIF,避免每次加载时都重新渲染每一帧。

截图

使用(简单)

pubspec.yaml文件中添加依赖

dependencies:
  flutter_gifimage: ^1.0.0

简单使用

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

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text('GIF动画演示')),
        body: Center(
          child: GifController(
            vsync: this,
            child: GifImage(
              controller: GifController(vsync: this),
              image: AssetImage("images/animate.gif"),
            ),
          ),
        ),
      ),
    );
  }
}

GifController中一些常用操作

// 从第0帧循环到第29帧
controller.repeat(min: 0, max: 29, period: Duration(milliseconds: 300));

// 跳转到第三帧(索引从0开始)
controller.value = 0;

// 从当前帧移动到第26帧
controller.animateTo(26);

预加载GIF

如果你需要提前缓存GIF图像,可以这样做:

// 将`ImageProvider`放入缓存
fetchGif(AssetImage("images/animate.gif"));

感谢

感谢以下项目给我的启发:

许可证

MIT License

Copyright (c) 2019 Jpeng

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

更多关于Flutter GIF图片显示插件flutter_gifimage的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter GIF图片显示插件flutter_gifimage的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


flutter_gifimage 是一个用于在 Flutter 应用中显示 GIF 图片的插件。它提供了简单易用的 API,可以轻松地将 GIF 图片加载到应用中。

以下是 flutter_gifimage 的基本使用方法:

1. 添加依赖

首先,在 pubspec.yaml 文件中添加 flutter_gifimage 依赖:

dependencies:
  flutter:
    sdk: flutter
  flutter_gifimage: ^latest_version

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

2. 导入库

在需要使用 flutter_gifimage 的 Dart 文件中导入库:

import 'package:flutter_gifimage/flutter_gifimage.dart';

3. 使用 GifImage 组件

GifImageflutter_gifimage 提供的主要组件,用于显示 GIF 图片。你可以通过以下方式使用它:

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

class GifExample extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('GIF Example'),
      ),
      body: Center(
        child: GifImage(
          image: AssetImage('assets/example.gif'), // 加载本地GIF图片
          width: 200,
          height: 200,
        ),
      ),
    );
  }
}

4. 控制 GIF 动画

GifImage 组件还提供了一些方法来控制 GIF 动画的播放、暂停和停止。你可以通过 GifImageController 来实现这些功能。

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

class GifControllerExample extends StatefulWidget {
  @override
  _GifControllerExampleState createState() => _GifControllerExampleState();
}

class _GifControllerExampleState extends State<GifControllerExample> with TickerProviderStateMixin {
  GifImageController gifController;

  @override
  void initState() {
    super.initState();
    gifController = GifImageController(vsync: this);
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('GIF Controller Example'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            GifImage(
              controller: gifController,
              image: AssetImage('assets/example.gif'),
              width: 200,
              height: 200,
            ),
            SizedBox(height: 20),
            Row(
              mainAxisAlignment: MainAxisAlignment.center,
              children: [
                ElevatedButton(
                  onPressed: () {
                    gifController.play();
                  },
                  child: Text('Play'),
                ),
                SizedBox(width: 20),
                ElevatedButton(
                  onPressed: () {
                    gifController.pause();
                  },
                  child: Text('Pause'),
                ),
                SizedBox(width: 20),
                ElevatedButton(
                  onPressed: () {
                    gifController.stop();
                  },
                  child: Text('Stop'),
                ),
              ],
            ),
          ],
        ),
      ),
    );
  }

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

5. 加载网络 GIF 图片

flutter_gifimage 也支持从网络加载 GIF 图片。你可以使用 NetworkImage 来加载网络图片。

GifImage(
  image: NetworkImage('https://example.com/path/to/your/gif.gif'),
  width: 200,
  height: 200,
);

6. 其他属性

GifImage 组件还提供了其他一些属性,例如 fitalignmentrepeat 等,可以用于控制 GIF 图片的显示方式。

GifImage(
  image: AssetImage('assets/example.gif'),
  width: 200,
  height: 200,
  fit: BoxFit.cover, // 控制图片的填充方式
  alignment: Alignment.center, // 控制图片的对齐方式
  repeat: ImageRepeat.repeat, // 控制图片的重复方式
);
回到顶部