[英]flutter image carousel change border radius
Hello I am trying to make an image carousel using carousel_slider package and attaching a gesture detector to each carousel item.I wanted to make the slider image curved.I tried to used border radius but not working.What am i missing here您好,我正在尝试使用 carousel_slider package 制作图像轮播并将手势检测器附加到每个轮播项目。我想让 slider 图像弯曲。我尝试使用边框半径但不工作。我在这里缺少什么
class BuildCarousel extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Container(
decoration: BoxDecoration(borderRadius: BorderRadius.circular(10)),
child: CarouselSlider(
options: CarouselOptions(
height: 200,
initialPage: 2,
enableInfiniteScroll: false,
reverse: false,
autoPlay: true,
autoPlayInterval: Duration(seconds: 3),
autoPlayAnimationDuration: Duration(milliseconds: 800),
enlargeCenterPage: true,
scrollDirection: Axis.horizontal,
),
items: [
'https://charlielawrance.com/wp-content/uploads/2017/10/13-Ad-Examples.jpg',
'https://webcdn-adespressoinc.netdna-ssl.com/wp-content/uploads/2019/09/fb-collection-ads-2019-1024x536.jpg',
].map((i) {
return Builder(
builder: (BuildContext context) {
return Container(
decoration:
BoxDecoration(borderRadius: BorderRadius.circular(10)),
padding: EdgeInsets.all(0.0),
height: MediaQuery.of(context).size.height * 0.30,
width: MediaQuery.of(context).size.width,
child: GestureDetector(
child: CachedNetworkImage(
imageUrl: i,
placeholder: (context, url) => CupertinoActivityIndicator(),
errorWidget: (context, url, error) => Icon(Icons.error),
),
onTap: () => Navigator.push<Widget>(
context,
CupertinoPageRoute(
builder: (context) =>
CollectionToProduct(category: 'watch'),
),
),
),
);
},
);
}).toList(),
),
);
}
} }
Wrap your Image
widget with a ClipRRect
widget and give border-radius to ClipRRect
用
ClipRRect
小部件包装您的Image
小部件,并为ClipRRect
提供边框半径
GestureDetector(
child: ClipRRect(
borderRadius: BorderRadius.circular(10)
child:CachedNetworkImage(
imageUrl: i,
placeholder: (context, url) => CupertinoActivityIndicator(),
errorWidget: (context, url, error) => Icon(Icons.error),),
onTap: () => Navigator.push<Widget>(
context,
CupertinoPageRoute(
builder: (context) =>
CollectionToProduct(category: 'watch'),
)),
)
Instead of most outer Container
wrap everything inside ClipRRect
widget而不是大多数外部
Container
将所有内容包装在ClipRRect
小部件中
class BuildCarousel extends StatelessWidget {
@override
Widget build(BuildContext context) {
return ClipRRect(
borderRadius: BorderRadius.circular(10),
child: CarouselSlider(
options: CarouselOptions(
height: 200,
initialPage: 2,
enableInfiniteScroll: false,
reverse: false,
autoPlay: true,
autoPlayInterval: Duration(seconds: 3),
autoPlayAnimationDuration: Duration(milliseconds: 800),
enlargeCenterPage: true,
scrollDirection: Axis.horizontal,
),
items: [
'https://charlielawrance.com/wp-content/uploads/2017/10/13-Ad-Examples.jpg',
'https://webcdn-adespressoinc.netdna-ssl.com/wp-content/uploads/2019/09/fb-collection-ads-2019-1024x536.jpg',
].map((i) {
return Builder(
builder: (BuildContext context) {
return Container(
decoration:
BoxDecoration(borderRadius: BorderRadius.circular(10)),
padding: EdgeInsets.all(0.0),
height: MediaQuery.of(context).size.height * 0.30,
width: MediaQuery.of(context).size.width,
child: GestureDetector(
child: CachedNetworkImage(
imageUrl: i,
placeholder: (context, url) => CupertinoActivityIndicator(),
errorWidget: (context, url, error) => Icon(Icons.error),
),
onTap: () => Navigator.push<Widget>(
context,
CupertinoPageRoute(
builder: (context) =>
CollectionToProduct(category: 'watch'),
),
),
),
);
},
);
}).toList(),
),
);
}
}
ClipRRect
is a widget that clips a corner of the Rects as you want ClipRRect
是一个小部件,可以根据需要剪辑 Rects 的角
For more info about ClipRRect
and other clipping methods visithere有关
ClipRRect
和其他剪辑方法的更多信息,请访问此处
Carousel slider with rounded network image
带圆角网络图像的轮播 slider
class _CarouselWithIndicatorState extends State<CarouselWithIndicator> {
int _current = 0;
@override
Widget build(BuildContext context) {
Widget image_carousel = new Container(
height: 345.0,
child: CarouselSlider(
options: CarouselOptions(
height: 250,
reverse: false,
autoPlay: true,
autoPlayInterval: Duration(seconds: 5),
autoPlayAnimationDuration: Duration(milliseconds: 800),
autoPlayCurve: Curves.fastOutSlowIn,
enlargeCenterPage: false,
onPageChanged: null,
scrollDirection: Axis.horizontal,
),
items: [
'http://pic3.16pic.com/00/55/42/16pic_5542988_b.jpg',
'http://photo.16pic.com/00/38/88/16pic_3888084_b.jpg',
'http://pic3.16pic.com/00/55/42/16pic_5542988_b.jpg',
'http://photo.16pic.com/00/38/88/16pic_3888084_b.jpg'
].map((i) {
return Builder(
builder: (BuildContext context) {
return Container(
child: Container(
width: MediaQuery.of(context).size.width,
margin: EdgeInsets.symmetric(horizontal: 5.0),
decoration: BoxDecoration(
color: Colors.amber,
boxShadow: [ //background color of box
BoxShadow(
color: Colors.black12,
blurRadius: 8.0, // soften the shadow
spreadRadius: 8.0, //extend the shadow
offset: Offset(
-15.0, // Move to right 10 horizontally
-15.0, // Move to bottom 10 Vertically
),
)
],
borderRadius: BorderRadius.all(Radius.circular(30.0)),
image:DecorationImage(
image: NetworkImage(i),
fit: BoxFit.fill
),
),
child: GestureDetector(
//child: Image.network(i, fit: BoxFit.fill ),
onTap: () {
// Navigator.push<Widget>(
// context,
// MaterialPageRoute(
// //builder: (context) => ImageScreen(i),
// ),
// );
})),
);
},
);
}).toList(),
));
return Column(
children: <Widget>[
image_carousel,
],
);
} } } }
Wrap the Carousel container with ClipRRect() and add the borderRadius for it.用 ClipRRect() 包裹 Carousel 容器并为其添加边框半径。
child: Column(
children: [
SizedBox(
height: MediaQuery.of(context).size.height / 10,
),
ClipRRect(
borderRadius: BorderRadius.circular(20.0),
child: Container(
height: MediaQuery.of(context).size.height / 5,
width: MediaQuery.of(context).size.width / 1.2,
child: Carousel(
images: [
NetworkImage(
'https://cdn-images-1.medium.com/max/2000/1*GqdzzfB_BHorv7V2NV7Jgg.jpeg'),
NetworkImage(
'https://cdn-images-1.medium.com/max/2000/1*wnIEgP1gNMrK5gZU7QS0-A.jpeg'),
NetworkImage(
'https://cdn-images-1.medium.com/max/2000/1*wnIEgP1gNMrK5gZU7QS0-A.jpeg')
],
showIndicator: false,
borderRadius: false,
moveIndicatorFromBottom: 180.0,
noRadiusForIndicator: true,
overlayShadow: true,
overlayShadowColors: Color(0xff0D6EFD),
overlayShadowSize: 0.7,
radius: Radius.circular(30.0),
),
),
),
SizedBox(
height: MediaQuery.of(context).size.height / 10,
),
],
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.