|
|
|
|
|
|
|
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 HomeBanner extends StatefulWidget {
|
|
|
|
|
|
|
|
final List<BannerData> bannerData;
|
|
|
|
final SwiperController controller;
|
|
|
|
|
|
|
|
HomeBanner(this.bannerData, this.controller);
|
|
|
|
|
|
|
|
@override
|
|
|
|
State<StatefulWidget> createState() {
|
|
|
|
return _HomeBanner();
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
class _HomeBanner extends State<HomeBanner> {
|
|
|
|
@override
|
|
|
|
Widget build(BuildContext context) {
|
|
|
|
return Container(
|
|
|
|
child: AspectRatio(
|
|
|
|
aspectRatio: 2,
|
|
|
|
child: Swiper(
|
|
|
|
pagination: SwiperPagination(
|
|
|
|
margin: EdgeInsets.only(bottom: 20.h),
|
|
|
|
alignment: Alignment.bottomCenter,
|
|
|
|
builder: DotSwiperPaginationBuilder(
|
|
|
|
size: 8,
|
|
|
|
activeSize: 8,
|
|
|
|
space: 5,
|
|
|
|
activeColor: Colors.white,
|
|
|
|
color: Colors.white.withAlpha(76),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
controller: widget.controller,
|
|
|
|
physics: BouncingScrollPhysics(),
|
|
|
|
itemBuilder: (context, position) {
|
|
|
|
return InkWell(
|
|
|
|
onTap: () {
|
|
|
|
bannerClick(widget.bannerData[position]);
|
|
|
|
},
|
|
|
|
child: Container(
|
|
|
|
margin: EdgeInsets.all(16),
|
|
|
|
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.png",
|
|
|
|
fadeSrc: "assets/image/default_2_1.png",
|
|
|
|
),
|
|
|
|
),
|
|
|
|
);
|
|
|
|
},
|
|
|
|
itemCount: (widget.bannerData != null && widget.bannerData.length > 0)
|
|
|
|
? widget.bannerData.length
|
|
|
|
: 1,
|
|
|
|
),
|
|
|
|
),
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
/// contentType 跳转类型(0:不跳转,1:积分商品,2:活动,3:文章)
|
|
|
|
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;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|