You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
103 lines
3.4 KiB
103 lines
3.4 KiB
import 'dart:io'; |
|
import 'package:flutter/material.dart'; |
|
import 'package:huixiang/utils/ImgCachePath.dart'; |
|
import 'package:network_to_file_image/network_to_file_image.dart'; |
|
import 'package:photo_view/photo_view_gallery.dart'; |
|
import 'package:path/path.dart' as p; |
|
|
|
class PhotoViewGalleryScreen extends StatefulWidget { |
|
List images=[]; |
|
int index=0; |
|
String heroTag; |
|
PageController controller; |
|
|
|
PhotoViewGalleryScreen({Key key,@required this.images,this.index,this.controller,this.heroTag}) : super(key: key){ |
|
controller=PageController(initialPage: index); |
|
} |
|
|
|
@override |
|
_PhotoViewGalleryScreenState createState() => _PhotoViewGalleryScreenState(); |
|
} |
|
|
|
class _PhotoViewGalleryScreenState extends State<PhotoViewGalleryScreen> { |
|
int currentIndex=0; |
|
|
|
@override |
|
void initState() { |
|
// TODO: implement initState |
|
super.initState(); |
|
currentIndex=widget.index; |
|
} |
|
File fileFromDocsDir(String filename) { |
|
String pathName = p.join(ImgCachePath.instance.path, filename); |
|
return File(pathName); |
|
} |
|
@override |
|
Widget build(BuildContext context) { |
|
return Scaffold( |
|
body: Stack( |
|
children: <Widget>[ |
|
Positioned( |
|
top: 0, |
|
left: 0, |
|
bottom: 0, |
|
right: 0, |
|
child: Container( |
|
child: PhotoViewGallery.builder( |
|
scrollPhysics: const BouncingScrollPhysics(), |
|
builder: (BuildContext context, int index) { |
|
return PhotoViewGalleryPageOptions( |
|
imageProvider: NetworkToFileImage( |
|
url: widget.images[index], |
|
file: fileFromDocsDir(widget.images[index].toString() |
|
.replaceAll("https://pos.upload.gznl.top/", "").replaceAll("/", "")), |
|
debug: true, |
|
), |
|
); |
|
}, |
|
itemCount: widget.images.length, |
|
loadingBuilder: (context, progress) => Center( |
|
child: Container( |
|
width: 20.0, |
|
height: 20.0, |
|
child: CircularProgressIndicator( |
|
value: progress == null |
|
? null |
|
: progress.cumulativeBytesLoaded / |
|
progress.expectedTotalBytes, |
|
), |
|
), |
|
), |
|
backgroundDecoration: null, |
|
pageController: widget.controller, |
|
enableRotation: false, |
|
onPageChanged: (index){ |
|
setState(() { |
|
currentIndex=index; |
|
}); |
|
}, |
|
) |
|
), |
|
), |
|
Positioned(//图片index显示 |
|
top: MediaQuery.of(context).padding.top+15, |
|
width: MediaQuery.of(context).size.width, |
|
child: Center( |
|
child: Text("${currentIndex+1}/${widget.images.length}",style: TextStyle(color: Colors.white,fontSize: 16)), |
|
), |
|
), |
|
Positioned(//右上角关闭按钮 |
|
right: 10, |
|
top: MediaQuery.of(context).padding.top, |
|
child: IconButton( |
|
icon: Icon(Icons.close,size: 30,color: Colors.white,), |
|
onPressed: (){ |
|
Navigator.of(context).pop(); |
|
}, |
|
), |
|
), |
|
], |
|
), |
|
); |
|
} |
|
}
|
|
|