「这是我参与2022首次更文挑战的第8天,活动详情查看:2022首次更文挑战」。
本文翻译自pub: photo_view | Flutter Package (flutter-io.cn)
译时版本: photo_view 0.13.0
photo_view
一个用于Flutter的简单可缩放的图像/内容组件。
PhotoView 使图像变得可根据用户手势(如捏合、旋转和拖拽)进行缩放和平移。
它还可以显示任意组件而不是图像,例如 Container 、 Text 或 SVG 。
尽管使用起来超级简单,但 PhotoView 通过其选项和控制器使其具有极强的可定制性。
安装
在 pubspec.yaml 文件中添加 photo_view 依赖项:
dependencies:
photo_view: ^0.13.0
导入 Photo View:
import 'package:photo_view/photo_view.dart';
文档和API
API 文档有关于如何使用 PhotoView 的详细信息。
如果你想在实践中看到它,可以通过查看示例应用或在发布页面上下载最新版的 APK 来浏览 Photo View 的大多数的使用场景。
(非常)基本的用法
设置一个 ImageProvider imageProvider (例如: AssetImage 或 NetworkImage):
@override
Widget build(BuildContext context) {
return Container(
child: PhotoView(
imageProvider: AssetImage("assets/large-image.jpg"),
)
);
}
结果:
关于 PhotoView 的更多信息可以查看这里。
Gallery(画廊)
要显示一系列图像并让用户在它们之间进行切换,请使用 PhotoViewGallery 。
有关 gallery 的更多信息可以查看这里。
import 'package:photo_view/photo_view.dart';
import 'package:photo_view/photo_view_gallery.dart';
// ...
@override
Widget build(BuildContext context) {
return Container(
child: PhotoViewGallery.builder(
scrollPhysics: const BouncingScrollPhysics(),
builder: (BuildContext context, int index) {
return PhotoViewGalleryPageOptions(
imageProvider: AssetImage(widget.galleryItems[index].image),
initialScale: PhotoViewComputedScale.contained * 0.8,
heroAttributes: PhotoViewHeroAttributes(tag: galleryItems[index].id),
);
},
itemCount: galleryItems.length,
loadingBuilder: (context, event) => Center(
child: Container(
width: 20.0,
height: 20.0,
child: CircularProgressIndicator(
value: event == null
? 0
: event.cumulativeBytesLoaded / event.expectedTotalBytes,
),
),
),
backgroundDecoration: widget.backgroundDecoration,
pageController: widget.pageController,
onPageChanged: onPageChanged,
)
);
}
示例应用中的 Gallery 示例:
代码参考这里。
和控制器一起使用
当需要与 PhotoView 的内部状态值进行交互时,可以使用PhotoViewController 和 PhotoViewScaleStateController 。
控制器,当将其指定给 PhotoView 组件时,作者(你)可以通过 Stream 来监听状态更新,并在外部改变这些值。
关于控制器的更多信息参考这里。
在示例应用中,我们可以看到使用控制器能够实现的效果:
更多屏幕截图
| 自定义背景、小图像和自定义对齐方式 | 有限缩放 | Hero动画 |
|---|---|---|
| 屏幕的一部分 | 自定义子组件 | |
支持我们
你可以通过成为Patreon的赞助人来支持我们,任何支持都非常感谢。