新人正在学习Flutter,使用wechat_assets_picker上传多张图片,使用extended_image做图片浏览,浏览图片时,删除单张图片后extended_image怎样跳转到下一张图片?
post.dart页面代码:
import 'dart:io';import 'package:extended_image/extended_image.dart';import 'package:flutter/material.dart';import 'package:wechat_assets_picker/wechat_assets_picker.dart';class Post extends StatefulWidget { const Post({super.key}); @override State<Post> createState() => _PostState();}class _PostState extends State<Post> { // 已选中图片列表 List<AssetEntity> selectedAssets = []; // 相册图片初始化索引 int currentIndex = 0; /// 从相册选取图片 pickImage(BuildContext context) async { final List<AssetEntity>? result = await AssetPicker.pickAssets( context, pickerConfig: AssetPickerConfig( maxAssets: 4, requestType: RequestType.image, textDelegate: const AssetPickerTextDelegate(), selectedAssets: selectedAssets ), ); if (result != null) { setState(() { selectedAssets = result; }); } } /// 上传的图片列表(小图预览) Widget _imagesList() { return LayoutBuilder( builder: (BuildContext context, BoxConstraints constraints) { final double width = (constraints.maxWidth - 5 * 3) / 4; return Wrap( spacing: 5, children: [ for (final asset in selectedAssets) InkWell( onTap: () { setState(() { currentIndex = selectedAssets.indexOf(asset); }); Get.to(() => gallery()); // 单击单张缩略图进入预览组件 }, child: Container( clipBehavior: Clip.antiAlias, decoration: BoxDecoration( borderRadius: BorderRadius.circular(5) ), child: AssetEntityImage( asset, width: width, height: width, fit: BoxFit.cover, isOriginal: false, //是否原图,否 ), ), ), if(selectedAssets.length < 4) InkWell( onTap: () => pickImage(context), child: Container( width: width, height: width, decoration: BoxDecoration( color: const Color.fromRGBO(242, 242, 244, 1), borderRadius: BorderRadius.circular(5) ), child: const Icon(Fonts.tianjia, color: Color.fromRGBO(178, 178, 180, 1)), ), ) ], ); } ); } // 图片浏览 Widget gallery() { return Scaffold( extendBodyBehindAppBar: true, appBar: AppBar( title: Row( crossAxisAlignment: CrossAxisAlignment.baseline, textBaseline: TextBaseline.alphabetic, mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ InkWell( onTap: () => Get.back(), child: const Icon(Fonts.fanhui) ), // 删除按钮 InkWell( onTap: () { setState(() { selectedAssets.remove(selectedAssets[currentIndex]); }); //当选中的图片被删除干净后,关掉图片查看器 if(selectedAssets.isEmpty) { Get.back(); } }, child: const Icon(Fonts.shanchu, size: 20, color: Color.fromRGBO(50, 50, 52, 1)), ), ], ), ), body: ExtendedImageGesturePageView.builder( controller: ExtendedPageController( // 传入图片初始位置 initialPage: currentIndex, ), onPageChanged: (int index) { setState(() { currentIndex = index; }); }, itemCount: selectedAssets.length, itemBuilder: (BuildContext context, int index) { AssetEntity item = selectedAssets[index]; return ExtendedImage( image: AssetEntityImageProvider( item, isOriginal: true ), fit: BoxFit.cover, mode: ExtendedImageMode.gesture, clearMemoryCacheWhenDispose: true, initGestureConfigHandler: ((state) { return GestureConfig( minScale: 0.9, maxScale: 3.0, animationMinScale: 0.7, animationMaxScale: 3.5, speed: 1.0, inertialSpeed: 100.0, initialScale: 1.0, inPageView: true ); }), ); } ), ); } @override Widget build(BuildContext context) { return Scaffold( body: Column( crossAxisAlignment: CrossAxisAlignment.start, children: _imagesList() ) ); }}
目前能正常删除已选中的图片,但是在删除成功后,图片查看器没办法自动转到在一张图片。
假如当前在第1页,执行setState((){selectedAssets.remove(selectedAssets[currentIndex]); }); 后就会显示第2页的内容 ;代码应该没有问题的
class Chome extends StatefulWidget { const Chome({super.key}); @override State<Chome> createState() => _ChomeState();}class _ChomeState extends State<Chome> { var currentIndex = 0; var selectedAssets = [ 'A', 'B', 'C', ]; PageController ctl = PageController(initialPage: 0); @override Widget build(BuildContext context) { return Scaffold( extendBodyBehindAppBar: true, appBar: AppBar( title: Row( crossAxisAlignment: CrossAxisAlignment.baseline, textBaseline: TextBaseline.alphabetic, mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ InkWell(onTap: () => () {}, child: const Icon(Icons.arrow_back)), InkWell( onTap: () { setState(() { selectedAssets.remove(selectedAssets[currentIndex]); }); }, child: const Icon( Icons.delete, ), ), ], ), ), body: ExtendedImageGesturePageView.builder( controller: ctl, onPageChanged: (int index) { setState(() { currentIndex = index; }); }, itemCount: selectedAssets.length, itemBuilder: (BuildContext context, int index) { return Center( child: Container( color: Colors.grey, child: Text( 'Page: ${selectedAssets[index]}', style: const TextStyle(color: Colors.red, fontSize: 40), ), ), ); }), ); }
看看这个例子是有改变的
从互联网下载图片,并显示。下载图片过程中显示进度条。支持图片缩放,运用了ASI、SDWebImage。支持图片缓存。 [Code4App.com]
使用图片浏览器,你需要在 sm.js 和 sm.css 之后额外引入如下两个文件: <link rel="stylesheet" href="//g.alicdn.com/msui/sm/0.6.2/css/sm-extend.min.css"> <script type='text/javascript' src='//g.alicdn.com/msui/sm/0.6.2/js/sm-exte
图片浏览器是一个像iOS图片浏览器一样用来展示图片的组件。图片可以被缩放或者平移 (可选)。 图片浏览器使用 幻灯片组件来展现图片。 创建一个图片浏览器实例 图片浏览器只需通过javaScript就可以被创建和初始化。我们需要使用App封装好的方法: myApp.photoBrowser(parameters) - 带参初始化图片浏览器 parameters - object - 图片浏览器参数对
雪梦图片浏览器是一款界面简单,功能强大的 android 图片浏览器。 特性 双击放大/缩小图片 动态滑屏翻页 分享图片至邮件,蓝牙,环聊,QQ,微信,Google+等 将图片设置为壁纸或者联系人图标 支持动态播放Gif图片 支持显示SVG图片 支持格式:JPEG (.jpg);GIF (.gif);PNG (.png);BMP (.bmp);WebP (.webp) (Android 4.0+);SVG (.svg)
本文向大家介绍怎样去除图片自带的边距?相关面试题,主要包含被问及怎样去除图片自带的边距?时的应答技巧和注意事项,需要的朋友参考一下 空隙产生的原因,换行符,空格符,制表符等你空白符,字体不为0的情况下,都会产生一个字符的空隙,空格符好会占据一定宽度,使用inline-block会产生元素间的空隙。 解决方法: 1.父元素设置:font-size=0 2.使用flexbox 不清楚图片去除自带边距的
问题内容: 我目前正在使用Twitter Bootstrap开发一个响应式网站。 该网站在移动设备/平板电脑/桌面上具有全屏背景图片。这些图像使用两个div旋转并逐渐淡入。 除了一个问题,它几乎是完美的。使用iOS Safari,Android浏览器或Android上的Chrome,当用户向下滚动页面并导致地址栏隐藏时,背景会略微跳动。 在移动设备上访问它并向下滚动,您应该会看到图像调整大小/移动