flutter 九宫格菜单_Flutter 九宫格及Hero动画

class LXPhotosView extends StatefulWidget {

//数据资源

final List list;

//主轴间距

final double mainAxisPaddingSize;

//交叉轴间距

final double crossAxisPaddingSize;

// 圆角大小(默认没有圆角)

final double radiusSize;

//交叉轴个数 (默认值 根据九宫格个数决定)

final int currentCrossAxisCount;

//背景颜色

final Color bgColor;

///构造方法

LXPhotosView({

Key key,

@required this.list,

this.mainAxisPaddingSize = 5,

this.crossAxisPaddingSize = 5,

this.radiusSize = 0.0,

this.bgColor = Colors.white,

int currentCrossAxisCount

}) : this.currentCrossAxisCount = currentCrossAxisCount ?? (list.length == 4 ? 2 : 3),

super(key: key);

@override

_PhotosViewState createState() => _PhotosViewState();

}

class _PhotosViewState extends State {

@override

Widget build(BuildContext context) {

// TODO: implement build

return Center(

child: Container(

child: GridView.builder(

gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(

crossAxisCount: this.widget.currentCrossAxisCount,

crossAxisSpacing: this.widget.crossAxisPaddingSize,

mainAxisSpacing: this.widget.mainAxisPaddingSize,

),

itemBuilder: (BuildContext context, int index){

return GestureDetector(

child: Hero(

tag: widget.list[index].imgUrl,

child: Container(

color: widget.bgColor,

child: ClipRRect(

borderRadius: BorderRadius.circular(widget.radiusSize),

child: Image(

image: NetworkImage(widget.list[index].imgUrl),

fit: BoxFit.fitWidth,

),

),

),

),

onTap: () {

Navigator.of(context).push(PageRouteBuilder(

pageBuilder: (context,animation, secondaryAnimation) {

return FadeTransition(

opacity: animation,

child: LXScrollPhotosView(currentIndex: index,currentList: widget.list,)

);

}

)

);

} ,

);

},

itemCount: widget.list.length,

),

),

);

}

}

3.跳转界面界面,存在Hero动画,注意细节九宫格tag要保持与详情界面保持一致才能实现此效果,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值