一个九宫格图片查看器

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九宫格图片查看器相关推荐

  1. flutter 九宫格菜单_flutter九宫格看图加强版

    九宫格看图,效果如下图 Screenshot_1571750889.png import 'package:flutter/material.dart'; import 'dart:math'; // ...

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

    class LXPhotosView extends StatefulWidget { //数据资源 final List list; //主轴间距 final double mainAxisPadd ...

  3. win10照片查看器_图片打开方式中找不到Windows图片查看器怎么办

    如何在电脑中使用默认的windows图片查看器来打开图片进行查看的?有时我们可能无法找到Windows图片查看器工具,接下来小编就与大家分享,一种简单的利用windows图片查看器查看图片的具体方法. ...

  4. Win10 LTSB/LTSC 录音机、图片查看器、便签

    Win10 LTSB/LTSC 录音机.图片查看器.便签 文章目录 Win10 LTSB/LTSC 录音机.图片查看器.便签 示例 录音机 图片查看器 便签 示例 文件下载地址 链接: https:/ ...

  5. 如何将Windows图片查看器的背景颜色改成浅色?

    现在大家基本都在使用Win10系统,我们在双击查看图片时,系统默认使用系统自带的图片(照片)查看器去打开图片.图片查看器的背景色默认是黑色的,如下所示:(因为大家可能会遇到同样的问题,所以在此记录并分 ...

  6. 【React组件】写一个模仿蓝湖的图片查看器

    前言 最近公司让写一个可以自由拖拽放大的图片查看器,我寻思这还不简单,一顿操作猛如虎,俩小时后: 事实证明,一旦涉及到 DOM 的变换操作,如果很多细节考虑不全,抓过来就写,那基本就凉了.于是我仔细分 ...

  7. 图片html代码查看器,360度全景商品图片查看器

    360 Degrees Product Viewer360度全景商品图图片查看器是个非常简单的轻松展示图片全景插件. HTML Handle CSS .cd-product-viewer-wrappe ...

  8. 强大的jQuery图片查看器插件Viewer.js

    简介 Viewer.js 是一款强大的图片查看器 Viewer.js 有以下特点: 支持移动设备触摸事件 支持响应式 支持放大/缩小 支持旋转(类似微博的图片旋转) 支持水平/垂直翻转 支持图片移动 ...

  9. Win7图片查看器打印不了图片怎么办

    当我们想浏览电脑中的图片文件时,可以选择系统自带的图片查看器或者第三方看图工具打开,但是有些win7用户发现自己想通过windows图片查看器打印图片却没有反应,Win7图片查看器打印不了图片怎么办? ...

最新文章

  1. 青源 Forum | 人工智能的数理基础前沿系列报告 · 第 4 期
  2. 手机与笔记本蓝牙配对
  3. python怎么打开一个窗口_python – 使按钮一次只打开一个窗口(通过关闭Toplevel窗口启用按钮)...
  4. React组件-事件、状态和生命周期
  5. Python笔记-Json转DataFrame(基金主题Json数据)
  6. qtreewidgetitem 文字内存太长换行_table文字溢出显示省略号问题
  7. oracle 查询脚本分析,一个oracle数据查询脚本
  8. mysql 程序编码_MySql编码
  9. VCIP2020:基于深度学习合成参考帧
  10. 分区模式:MBR和GPT
  11. C语言编程练习----山东理工大学ACM平台实验一A--I题解
  12. DailyTopic_4/16 B站:最有YouTube气质的视频网站
  13. 易语言删除全部空白字符
  14. Mysql常用逻辑及函数大全
  15. 中式装修之美,呈现出东方的诗意与唯美
  16. 微机原理 || MOV 指令使用规则(详细+例题)
  17. 常见开放api平台-OpenAPI
  18. CSS中的标准盒子模型和怪异盒子模型
  19. 2021年这些高频面试知识点最后再发一次,大厂面经合集
  20. java递归函数返回值_Java基础——方法返回值递归

热门文章

  1. 钉钉开会使用虚拟摄像头
  2. 基于李雅普诺夫函数的跟踪控制(二)
  3. 1024 发福利,送你一份珍藏依旧的 Java,大数据礼包,确定不收藏 ?拒绝白嫖 !
  4. python随机生成邮箱、自我介绍、地址、时间等
  5. golang多版本管理工具g(gvm)使用(windows)
  6. cadence 通孔焊盘_[转载]Cadence学习3(通孔类焊盘的建立)(转)
  7. RC电路(积分电路,微分电路)
  8. 比较不同利率下的贷款
  9. 给笔记本添加第二块显示屏
  10. 双11狂欢与价值战,苏宁悟空榜给你真实的数据