flutter 九宫格菜单_flutter九宫格图片查看器
一个九宫格图片查看器
Screenshot_1542963454.png
Screenshot_1542963645.png
import 'package:cached_network_image/cached_network_image.dart';
import 'package:flutter/material.dart';
class PictureShow extends StatelessWidget {
final List picList;
PictureShow({this.picList});
Widget build(BuildContext context) {
return Container(
child: GridView.count(
crossAxisCount: picList.length >= 3 ? 3 : picList.length < 2 ? 1 : 2,
children: List.generate(
picList.length,
(index) => GestureDetector(
child: Center(
child: Padding(
padding: const EdgeInsets.all(1.0),
child: CachedNetworkImage(
key: Key(index.toString()),
imageUrl: picList[index],
),
),
),
onTap: () {
Navigator.of(context).push(
NinePicture(picList, index),
);
},
),
),
),
);
}
}
class NinePicture extends PopupRoute {
final String barrierLabel;
final List picList;
final int index;
int startX;
int endX;
NinePicture(this.picList, this.index, {this.barrierLabel});
@override
Duration get transitionDuration => Duration(milliseconds: 2000);
@override
@override
Color get barrierColor => Colors.black54;
@override
bool get barrierDismissible => true;
AnimationController _animationController;
@override
AnimationController createAnimationController() {
assert(_animationController == null);
_animationController =
BottomSheet.createAnimationController(navigator.overlay);
return _animationController;
}
@override
Widget buildPage(BuildContext context, Animation animation,
Animation secondaryAnimation) {
return MediaQuery.removePadding(
removeTop: true,
context: context,
child: GestureDetector(
child: AnimatedBuilder(
animation: animation,
builder: (BuildContext context, Widget child) => GestureDetector(
onTap: () {
Navigator.pop(context);
},
child: _PictureWidget(picList, index),
),
),
),
);
}
}
class _PictureWidget extends StatefulWidget {
final List picList;
final int index;
_PictureWidget(this.picList, this.index);
@override
State createState() {
return _PictureWidgetState();
}
}
class _PictureWidgetState extends State<_picturewidget> {
int startX = 0;
int endX = 0;
int index = 0;
@override
void initState() {
// TODO: implement initState
super.initState();
index = widget.index;
}
@override
Widget build(BuildContext context) {
return new Material(
color: Colors.transparent,
child: new Container(
width: double.infinity,
child: Stack(
children: [
GestureDetector(
child: Center(
child: CachedNetworkImage(
imageUrl: widget.picList[index],
fit: BoxFit.cover,
),
),
onHorizontalDragDown: (detail) {
startX = detail.globalPosition.dx.toInt();
},
onHorizontalDragUpdate: (detail) {
endX = detail.globalPosition.dx.toInt();
},
onHorizontalDragEnd: (detail) {
_getIndex(endX - startX);
setState(() {});
},
onHorizontalDragCancel: () {},
),
Align(
alignment: Alignment.bottomCenter,
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceAround,
children: List.generate(
widget.picList.length,
(i) => GestureDetector(
child: CircleAvatar(
foregroundColor: Theme.of(context).primaryColor,
radius: 8.0,
backgroundColor: index == i
? Theme.of(context).primaryColor
: Colors.white,
),
onTap: () {
setState(() {
startX = endX = 0;
index = i;
});
},
),
).toList(),
),
)
],
),
alignment: Alignment.center,
),
);
}
void _getIndex(int delta) {
if (delta > 50) {
setState(() {
index--;
index = index.clamp(0, widget.picList.length - 1);
});
} else if (delta < 50) {
setState(() {
index++;
index = index.clamp(0, widget.picList.length - 1);
});
}
}
}
flutter 九宫格菜单_flutter九宫格图片查看器相关推荐
- flutter 九宫格菜单_flutter九宫格看图加强版
九宫格看图,效果如下图 Screenshot_1571750889.png import 'package:flutter/material.dart'; import 'dart:math'; // ...
- flutter 九宫格菜单_Flutter 九宫格及Hero动画
class LXPhotosView extends StatefulWidget { //数据资源 final List list; //主轴间距 final double mainAxisPadd ...
- win10照片查看器_图片打开方式中找不到Windows图片查看器怎么办
如何在电脑中使用默认的windows图片查看器来打开图片进行查看的?有时我们可能无法找到Windows图片查看器工具,接下来小编就与大家分享,一种简单的利用windows图片查看器查看图片的具体方法. ...
- Win10 LTSB/LTSC 录音机、图片查看器、便签
Win10 LTSB/LTSC 录音机.图片查看器.便签 文章目录 Win10 LTSB/LTSC 录音机.图片查看器.便签 示例 录音机 图片查看器 便签 示例 文件下载地址 链接: https:/ ...
- 如何将Windows图片查看器的背景颜色改成浅色?
现在大家基本都在使用Win10系统,我们在双击查看图片时,系统默认使用系统自带的图片(照片)查看器去打开图片.图片查看器的背景色默认是黑色的,如下所示:(因为大家可能会遇到同样的问题,所以在此记录并分 ...
- 【React组件】写一个模仿蓝湖的图片查看器
前言 最近公司让写一个可以自由拖拽放大的图片查看器,我寻思这还不简单,一顿操作猛如虎,俩小时后: 事实证明,一旦涉及到 DOM 的变换操作,如果很多细节考虑不全,抓过来就写,那基本就凉了.于是我仔细分 ...
- 图片html代码查看器,360度全景商品图片查看器
360 Degrees Product Viewer360度全景商品图图片查看器是个非常简单的轻松展示图片全景插件. HTML Handle CSS .cd-product-viewer-wrappe ...
- 强大的jQuery图片查看器插件Viewer.js
简介 Viewer.js 是一款强大的图片查看器 Viewer.js 有以下特点: 支持移动设备触摸事件 支持响应式 支持放大/缩小 支持旋转(类似微博的图片旋转) 支持水平/垂直翻转 支持图片移动 ...
- Win7图片查看器打印不了图片怎么办
当我们想浏览电脑中的图片文件时,可以选择系统自带的图片查看器或者第三方看图工具打开,但是有些win7用户发现自己想通过windows图片查看器打印图片却没有反应,Win7图片查看器打印不了图片怎么办? ...
最新文章
- 青源 Forum | 人工智能的数理基础前沿系列报告 · 第 4 期
- 手机与笔记本蓝牙配对
- python怎么打开一个窗口_python – 使按钮一次只打开一个窗口(通过关闭Toplevel窗口启用按钮)...
- React组件-事件、状态和生命周期
- Python笔记-Json转DataFrame(基金主题Json数据)
- qtreewidgetitem 文字内存太长换行_table文字溢出显示省略号问题
- oracle 查询脚本分析,一个oracle数据查询脚本
- mysql 程序编码_MySql编码
- VCIP2020:基于深度学习合成参考帧
- 分区模式:MBR和GPT
- C语言编程练习----山东理工大学ACM平台实验一A--I题解
- DailyTopic_4/16 B站:最有YouTube气质的视频网站
- 易语言删除全部空白字符
- Mysql常用逻辑及函数大全
- 中式装修之美,呈现出东方的诗意与唯美
- 微机原理 || MOV 指令使用规则(详细+例题)
- 常见开放api平台-OpenAPI
- CSS中的标准盒子模型和怪异盒子模型
- 2021年这些高频面试知识点最后再发一次,大厂面经合集
- java递归函数返回值_Java基础——方法返回值递归