w-R
3 years ago
5 changed files with 119 additions and 11 deletions
@ -0,0 +1,93 @@
|
||||
import 'package:flutter/material.dart'; |
||||
import 'package:photo_view/photo_view.dart'; |
||||
import 'package:photo_view/photo_view_gallery.dart'; |
||||
|
||||
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; |
||||
} |
||||
|
||||
@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: NetworkImage(widget.images[index]), |
||||
|
||||
); |
||||
}, |
||||
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: true, |
||||
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(); |
||||
}, |
||||
), |
||||
), |
||||
], |
||||
), |
||||
); |
||||
} |
||||
} |
Loading…
Reference in new issue