Created
August 14, 2020 10:51
-
-
Save itwondersteam/a6e53b6e6e0dfb193d0e0fdb50560312 to your computer and use it in GitHub Desktop.
flutter slide show using PageView
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class ViewPage extends StatefulWidget { | |
@override | |
State<StatefulWidget> createState() => _ViewPageState(); | |
} | |
class _ViewPageState extends State<ViewPage> { | |
var imgList = [ | |
'https://ss1.bdstatic.com/70cFvXSh_Q1YnxGkpoWK1HF6hhy/it/u=2877516247,37083492&fm=26&gp=0.jpg', | |
'https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1582796218195&di=04ce93c4ac826e19067e71f916cec5d8&imgtype=0&src=http%3A%2F%2Fhbimg.b0.upaiyun.com%2F344fda8b47808261c946c81645bff489c008326f15140-koiNr3_fw658' | |
]; | |
PageController _pageController; | |
var _currPageValue = 0.0; | |
//缩放系数 | |
double _scaleFactor = .8; | |
//view page height | |
double _height = 230.0; | |
@override | |
void initState() { | |
super.initState(); | |
_pageController = PageController(viewportFraction: 0.9); | |
_pageController.addListener(() { | |
setState(() { | |
_currPageValue = _pageController.page; | |
}); | |
}); | |
} | |
@override | |
void dispose() { | |
super.dispose(); | |
_pageController.dispose(); | |
} | |
@override | |
Widget build(BuildContext context) { | |
return Container( | |
height: _height, | |
child: PageView.builder( | |
itemBuilder: (context, index) => _buildPageItem(index), | |
itemCount: 10, | |
controller: _pageController, | |
)); | |
} | |
_buildPageItem(int index) { | |
Matrix4 matrix4 = Matrix4.identity(); | |
if (index == _currPageValue.floor()) { | |
//当前的item | |
var currScale = 1 - (_currPageValue - index) * (1 - _scaleFactor); | |
var currTrans = _height * (1 - currScale) / 2; | |
matrix4 = Matrix4.diagonal3Values(1.0, currScale, 1.0) | |
..setTranslationRaw(0.0, currTrans, 0.0); | |
} else if (index == _currPageValue.floor() + 1) { | |
//右边的item | |
var currScale = | |
_scaleFactor + (_currPageValue - index + 1) * (1 - _scaleFactor); | |
var currTrans = _height * (1 - currScale) / 2; | |
matrix4 = Matrix4.diagonal3Values(1.0, currScale, 1.0) | |
..setTranslationRaw(0.0, currTrans, 0.0); | |
} else if (index == _currPageValue.floor() - 1) { | |
//左边 | |
var currScale = 1 - (_currPageValue - index) * (1 - _scaleFactor); | |
var currTrans = _height * (1 - currScale) / 2; | |
matrix4 = Matrix4.diagonal3Values(1.0, currScale, 1.0) | |
..setTranslationRaw(0.0, currTrans, 0.0); | |
} else { | |
//其他,不在屏幕显示的item | |
matrix4 = Matrix4.diagonal3Values(1.0, _scaleFactor, 1.0) | |
..setTranslationRaw(0.0, _height * (1 - _scaleFactor) / 2, 0.0); | |
} | |
return Transform( | |
transform: matrix4, | |
child: Padding( | |
padding: EdgeInsets.symmetric(horizontal: 10), | |
child: Container( | |
decoration: BoxDecoration( | |
borderRadius: BorderRadius.circular(12), | |
image: DecorationImage( | |
image: NetworkImage(imgList[index % 2]), fit: BoxFit.fill), | |
), | |
), | |
), | |
); | |
} | |
} | |
/* | |
作者:老孟Flutter | |
链接:https://juejin.im/post/6844904077776650254 | |
来源:掘金 | |
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 | |
*/ |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment