Flutter动态图片展示插件gif_view的使用
Flutter动态图片展示插件gif_view的使用
GifView
GifView
是一个用于加载 GIF | APNG 图像并可以设置帧率的Flutter插件。
特性
- 从
Assets
加载; - 从
Network
加载; - 从
Memory
加载; - 设置帧率;
- 在加载 GIF 时设置
progress
。
入门指南
在你的 pubspec.yaml
文件中添加 gif_view
依赖:
dependencies:
gif_view: ^latest_version
使用方法
从资源文件加载 GIF
GifView.asset(
'assets/gif1.gif',
height: 200,
width: 200,
frameRate: 30,
)
从网络加载 GIF
GifView.network(
'https://www.showmetech.com.br/wp-content/uploads/2015/09/happy-minion-gif.gif',
height: 200,
width: 200,
)
从内存加载 GIF
GifView.memory(
_bytes,
height: 200,
width: 200,
)
属性
名称 | 描述 | 默认值 |
---|---|---|
controller | - | - |
frameRate | 帧率 | - |
height | 高度 | - |
width | 宽度 | - |
fit | - | - |
color | - | - |
colorBlendMode | - | - |
alignment | 对齐方式 | Alignment.center |
imageRepeat | 图像重复方式 | ImageRepeat.noRepeat |
centerSlice | - | - |
matchTextDirection | 匹配文本方向 | false |
invertColors | 反转颜色 | false |
filterQuality | 滤镜质量 | FilterQuality.low |
isAntiAlias | 抗锯齿 | false |
onFinish | - | - |
onStart | - | - |
onFrame | - | - |
onLoaded | - | - |
loop | - | - |
playInverted | - | - |
errorBuilder | 发生错误时返回的 widget | - |
progressBuilder | 加载时显示的 widget | - |
scale | 缩放 | 1.0 |
headers | - | - |
控制器
GifController controller = GifController();
controller.play({bool? inverted, int? initialFrame});
controller.pause();
controller.stop();
controller.seek(34);
GifStatus status = controller.status;
// GifStatus { loading, playing, stoped, paused, reversing }
控制器使用简单示例
class MyPage extends StatelessWidget {
final controller = GifController();
MyPage({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return Scaffold(
body: GifView.network(
'https://www.showmetech.com.br/wp-content/uploads/2015/09/happy-minion-gif.gif',
controller: controller,
),
floatingActionButton: FloatingActionButton(
onPressed: () {
if (controller.status == GifStatus.playing) {
controller.pause();
} else {
controller.play();
}
},
),
);
}
}
缓存管理
预加载图像
await GifView.preFetch(ImageProvider());
自定义缓存提供者
class MyCustomCacheProvider implements GifCacheProvider {
@override
Future<void> add(String key, Uint8List bytes) async {
// Custom cache implementation
}
@override
Future<Uint8List?> get(String key) async {
// Custom retrieval implementation
}
@override
Future<void> clear() async {
// Custom clear implementation
}
}
GifView.setCacheProvider(MyCustomCacheProvider());
// Revert to default provider
GifView.setCacheProvider(null);
示例代码
import 'package:flutter/material.dart';
import 'package:gif_view/gif_view.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: const MyHomePage(title: 'GifView Demo'),
);
}
}
class MyHomePage extends StatefulWidget {
const MyHomePage({Key? key, required this.title}) : super(key: key);
final String title;
@override
State<MyHomePage> createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: ListView(
children: [
Padding(
padding: const EdgeInsets.all(8.0),
child: Text(
'Gif load from asset',
style: Theme.of(context).textTheme.headlineMedium,
),
),
const Divider(),
GifView.asset(
'assets/gif1.gif',
height: 200,
frameRate: 30,
),
Padding(
padding: const EdgeInsets.all(8.0),
child: Text(
'Gif load from network',
style: Theme.of(context).textTheme.headlineMedium,
),
),
const Divider(),
GridView.count(
crossAxisCount: 2,
shrinkWrap: true,
physics: const NeverScrollableScrollPhysics(),
children: [
GifView.network(
'https://media.giphy.com/media/11sBLVxNs7v6WA/giphy.gif?cid=790b7611inzoz5yw2ba2rp3pjak43bxvun5rjnrzj6ybli8g&ep=v1_gifs_search&rid=giphy.gif&ct=g',
height: 200,
),
GifView.network(
'https://user-images.githubusercontent.com/53127751/201799963-23725770-a848-42a4-9593-20b835c7e238.png',
height: 200,
progressBuilder: (context) => const Center(
child: CircularProgressIndicator(),
),
errorBuilder: (context, error, tryAgain) {
return InkWell(
onTap: tryAgain,
child: const Icon(Icons.error),
);
},
onLoaded: (totalFrames) {
print(totalFrames);
},
onStart: () {
print('onStart');
},
),
GifView.network(
'https://media.giphy.com/media/rdma0nDFZMR32/giphy.gif?cid=790b7611vcvs5r1arjpbqdgmame2a11h3w6pkn5wbi2aeugl&ep=v1_gifs_search&rid=giphy.gif&ct=g',
height: 200,
),
],
),
],
),
);
}
}
class MyPage extends StatelessWidget {
final controller = GifController();
MyPage({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return Scaffold(
body: GifView.network(
'https://www.showmetech.com.br/wp-content/uploads/2015/09/happy-minion-gif.gif',
controller: controller,
),
floatingActionButton: FloatingActionButton(
onPressed: () {
if (controller.status == GifStatus.playing) {
controller.pause();
} else {
controller.play();
}
},
),
);
}
}
更多关于Flutter动态图片展示插件gif_view的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter动态图片展示插件gif_view的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是一个关于如何在Flutter应用中使用gif_view
插件来展示动态图片的示例代码。这个插件允许你更高效地在Flutter应用中播放GIF文件。
首先,确保你已经在pubspec.yaml
文件中添加了gif_view
依赖:
dependencies:
flutter:
sdk: flutter
gif_view: ^0.0.2 # 请注意版本号,根据最新的pub.dev上的版本进行调整
然后,运行flutter pub get
来安装依赖。
接下来,在你的Flutter应用中,你可以使用GifView
组件来展示GIF图片。以下是一个完整的示例代码,展示如何在一个简单的Flutter应用中实现这一点:
import 'package:flutter/material.dart';
import 'package:gif_view/gif_view.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter GIF View Example',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: GifViewExample(),
);
}
}
class GifViewExample extends StatelessWidget {
@override
Widget build(BuildContext context) {
// 这里是你的GIF图片的URL
final String gifUrl = 'https://example.com/path/to/your/gif/image.gif';
return Scaffold(
appBar: AppBar(
title: Text('GIF View Example'),
),
body: Center(
child: GifView(
gifUrl: gifUrl,
// 你可以根据需要调整这些参数
loopCount: GifLoopCount.infinite, // GIF播放次数,这里设置为无限循环
quality: GifQuality.defaultQuality, // GIF质量
behavior: GifBehavior.playing, // GIF行为,这里设置为播放
// 你还可以设置其他参数,如背景颜色等
),
),
);
}
}
在这个示例中,我们创建了一个简单的Flutter应用,其中包含一个GifView
组件,用于展示一个在线的GIF图片。你可以根据需要调整GifView
的参数,例如loopCount
(GIF播放次数)、quality
(GIF质量)和behavior
(GIF行为)。
请注意,gif_view
插件的具体参数和方法可能会随着版本的更新而变化,因此请参考最新的官方文档或pub.dev页面以获取最准确的信息。
此外,如果你打算展示本地的GIF图片,可以将GIF文件放在assets
文件夹中,并在pubspec.yaml
中声明它,然后使用本地文件路径而不是URL。例如:
flutter:
assets:
- assets/your_gif_image.gif
然后在代码中:
final String gifUrl = 'assets/your_gif_image.gif';
希望这个示例代码对你有所帮助!