flutter图片预览_Flutter photo_view 图片预览缩放 使用优化

photo_view 是一个处理图片缩放以及多图滑动查看的插件,在实际开发中像圈子,社交类型的APP,都会用到多图的查看以及缩放。

在这里我对photo_view进行一个再封装,在项目中可以直接使用,代码如下:

首先要在pubspec.yaml中添加:

dependencies:

photo_view: ^0.4.2

class PreviewImagesWidget extends StatefulWidget {

///图片Lst

final ListimageList;

///初始展示页数。默认0

int initialPage;

///选中的页的点的颜色

Color checkedColor;

///未选中的页的点的颜色

Color uncheckedColor;

PreviewImagesWidget(this.imageList,

{this.initialPage = 0,

this.checkedColor = Colors.white,

this.uncheckedColor = Colors.grey});

@override

_PreviewImagesWidgetState createState() =>

_PreviewImagesWidgetState(initialPage: initialPage);

}

class _PreviewImagesWidgetState extends State{

PageController pageController;

int nowPosition;

int initialPage;

ListdotWidgets;

_PreviewImagesWidgetState({this.initialPage = 0});

@override

void initState() {

// TODO: implement initState

super.initState();

nowPosition = initialPage;

pageController = PageController(initialPage: initialPage);

_initData();

}

void _initData() {

dotWidgets = [];

if (widget.imageList.length > 1) {

for (int i = 0; i < widget.imageList.length; i++) {

dotWidgets.add(_buildDots(i));

}

}

}

Widget _buildDots(int index) => Container(

margin: EdgeInsets.all(5),

child: ClipOval(

child: Container(

color: index == nowPosition

? widget.checkedColor

: widget.uncheckedColor,

width: 5.0,

height: 5.0,

),

),

);

@override

Widget build(BuildContext context) {

return GestureDetector(

onTap: () => Navigator.of(context).pop(),

child: Stack(

alignment: Alignment.bottomCenter,

children: [

PhotoViewGallery.builder(

onPageChanged: (index) {

setState(() {

nowPosition = index;

_initData();

});

},

scrollPhysics: const BouncingScrollPhysics(),

builder: (BuildContext context, int index) {

return PhotoViewGalleryPageOptions(

imageProvider: NetworkImage(widget.imageList[index]),

);

},

itemCount: widget.imageList.length,

pageController: pageController,

),

Container(

margin: EdgeInsets.only(bottom: 10),

child: Wrap(

children: dotWidgets,

),

),

],

),

);

}

@override

void dispose() {

// TODO: implement dispose

super.dispose();

pageController.dispose();

}

}

具体使用方式:

Navigator.of(ctx.context).push(PageRouteBuilder(

pageBuilder: (c, a, s) => PreviewImagesWidget(urls,initialPage: 1,)));

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值