import 'dart:typed_data'; import 'package:flutter/material.dart'; import 'package:zhiying_base_widget/models/app_config_model.dart'; import 'package:flutter_swiper/flutter_swiper.dart'; import 'package:zhiying_base_widget/widgets/home/home_quick_entry/cached_network_image_util.dart'; import 'package:zhiying_comm/zhiying_comm.dart'; class GuidePage extends StatefulWidget { final GuideData model; final List<Uint8List> imageDatas; final List<Uint8List> bgImageDatas; const GuidePage(this.model, this.imageDatas, this.bgImageDatas, {Key key}) : super(key: key); @override State<StatefulWidget> createState() => _GuidePageState(); } class _GuidePageState extends State<GuidePage> { @override Widget build(BuildContext context) { bool isShowIndicator = (widget.model?.indicatorType ?? '0') == '1'; List<int> list = List.generate(widget.imageDatas?.length, (index) => index); return WillPopScope( onWillPop: () async => false, // 拦截Android返回键 child: Material( child: Swiper( itemBuilder: (BuildContext context, int index) { // return CachedNetworkImage(imageUrl: widget.model.images[index],fit: BoxFit.cover,); Uint8List bgImage; if (widget.bgImageDatas.length > index) { bgImage = widget?.bgImageDatas[index]; } return Stack( alignment: Alignment.center, children: <Widget>[ Container( width: double.infinity, height: double.infinity, decoration: BoxDecoration( image: DecorationImage( image: Image.memory( bgImage, ).image, fit: BoxFit.fill)), child: Center( child: Image.memory( widget.imageDatas[index], fit: BoxFit.fitWidth, ))), index == widget?.bgImageDatas?.length - 1 ? Positioned( left: 0, right: 0, bottom: 110, child: Center( child: Row( mainAxisAlignment: MainAxisAlignment.center, children: <Widget>[ Container( alignment: Alignment.center, height: 46, width: 180, decoration: BoxDecoration( color: HexColor.fromHex(widget?.model?.btnBgColor ?? ""), borderRadius: BorderRadius.circular(45), boxShadow: [BoxShadow(color: HexColor.fromHex(widget?.model?.btnBgColor), offset: Offset(1, 2), blurRadius: 6)]), child: Text( widget?.model?.btnText ?? "", style: TextStyle(color: HexColor.fromHex(widget?.model?.btnTextColor ?? ""), fontSize: 16, height: 1.1), ), ), ], ), ), ) : Container() ], ); }, loop: false, itemCount: widget.imageDatas?.length ?? 0, pagination: widget?.model?.indicatorType != "1" ? null : widget?.model?.indicatorCssType == "2" ? SwiperCustomPagination(builder: (BuildContext context, SwiperPluginConfig config) { return Align( alignment: Alignment(0.0, 1), child: Row( mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center, children: list.map((index) { return SafeArea( child: Container( margin: EdgeInsets.only(bottom: 40, left: 5, right: 5), height: 4, width: 20, decoration: BoxDecoration( borderRadius: BorderRadius.circular(10), color: index == config.activeIndex ? HexColor.fromHex(widget?.model?.indicatorChooseColor) : HexColor.fromHex(widget?.model?.indicatorUnchooseColor)), ), ); }).toList(), ), ); }) : SwiperCustomPagination(builder: (BuildContext context, SwiperPluginConfig config) { return Align( alignment: Alignment(0.0, 1), child: Row( mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center, children: list.map((index) { return SafeArea( child: Container( margin: EdgeInsets.only(bottom: 40, left: 5, right: 5), height: 10, width: 10, decoration: BoxDecoration( borderRadius: BorderRadius.circular(10), color: index == config.activeIndex ? HexColor.fromHex(widget?.model?.indicatorChooseColor) : HexColor.fromHex(widget?.model?.indicatorUnchooseColor)), ), ); }).toList(), ), ); }), onIndexChanged: (index) {}, onTap: (index) { if (index == widget.model.guideCss.length - 1) { Navigator.pop(context, true); } }, ), ), ); } }