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.
117 lines
3.4 KiB
117 lines
3.4 KiB
|
|
import 'dart:convert'; |
|
|
|
import 'package:flutter/material.dart'; |
|
import 'package:flutter_swiper/flutter_swiper.dart'; |
|
import 'package:huixiang/retrofit/data/banner.dart'; |
|
import 'package:huixiang/view_widget/custom_image.dart'; |
|
import 'package:flutter_screenutil/flutter_screenutil.dart'; |
|
|
|
class PointMallBanner extends StatefulWidget { |
|
|
|
final List<BannerData> bannerData; |
|
|
|
PointMallBanner(this.bannerData); |
|
|
|
@override |
|
State<StatefulWidget> createState() { |
|
return _PointMallBanner(); |
|
} |
|
|
|
} |
|
|
|
class _PointMallBanner extends State<PointMallBanner> { |
|
@override |
|
Widget build(BuildContext context) { |
|
return Container( |
|
margin: EdgeInsets.only(top: 16.h), |
|
child: AspectRatio( |
|
aspectRatio: 2.0, |
|
child: Swiper( |
|
pagination: SwiperPagination( |
|
alignment: Alignment.bottomCenter, |
|
builder: DotSwiperPaginationBuilder( |
|
size: 8, |
|
activeSize: 8, |
|
space: 5, |
|
activeColor: Colors.black, |
|
color: Colors.black.withAlpha(76), |
|
), |
|
), |
|
viewportFraction: 0.7, |
|
scale: 0.7, |
|
physics: BouncingScrollPhysics(), |
|
itemBuilder: (context, position) { |
|
return InkWell( |
|
onTap: () { |
|
bannerClick(widget.bannerData[position]); |
|
}, |
|
child: Container( |
|
margin: EdgeInsets.only(bottom: 40.h), |
|
decoration: BoxDecoration( |
|
borderRadius: BorderRadius.circular(8), |
|
), |
|
child: MImage( |
|
widget.bannerData != null && position < widget.bannerData.length |
|
? widget.bannerData[position].imgUrl |
|
: "", |
|
radius: BorderRadius.circular(8), |
|
fit: BoxFit.cover, |
|
errorSrc: "assets/image/default_2_1.webp", |
|
fadeSrc: "assets/image/default_2_1.webp", |
|
), |
|
), |
|
); |
|
}, |
|
itemCount: (widget.bannerData != null && widget.bannerData.length > 0) ? widget.bannerData.length : 1, |
|
), |
|
), |
|
); |
|
} |
|
|
|
/// contentType 跳转类型(0:不跳转,1:积分商品,2:活动,3:文章,4:页面跳转,5:课程) |
|
bannerClick(BannerData bannerData) async { |
|
switch (bannerData.contentType) { |
|
case 1: |
|
Navigator.of(context).pushNamed('/router/integral_store_page', |
|
arguments: {"goodsId": bannerData.content}); |
|
break; |
|
case 2: |
|
Navigator.of(context) |
|
.pushNamed('/router/web_page', arguments: { |
|
"activityId": bannerData.content, |
|
}); |
|
break; |
|
case 3: |
|
Navigator.of(context) |
|
.pushNamed('/router/web_page', arguments: { |
|
"articleId": bannerData.content, |
|
}); |
|
break; |
|
case 4: |
|
String router = bannerData.content; |
|
if (router.contains("?")) { |
|
String params = router.substring(router.indexOf("?")); |
|
params = params.replaceAll("?", ""); |
|
Map map = jsonDecode(params); |
|
Navigator.of(context).pushNamed(router, arguments: map); |
|
} else { |
|
Navigator.of(context).pushNamed(router); |
|
} |
|
break; |
|
case 5: |
|
Navigator.of(context) |
|
.pushNamed('/router/class_details', arguments: { |
|
"id": bannerData.content, |
|
}); |
|
break; |
|
} |
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|