diff --git a/lib/pages/guide_page/guide_page.dart b/lib/pages/guide_page/guide_page.dart index 5f7f0bd..fced16d 100644 --- a/lib/pages/guide_page/guide_page.dart +++ b/lib/pages/guide_page/guide_page.dart @@ -1,12 +1,16 @@ +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 AppConfigGuideModel model; + final List imageDatas; - const GuidePage(this.model, {Key key}) : super(key: key); + const GuidePage(this.model, this.imageDatas, {Key key}) : super(key: key); @override State createState() => _GuidePageState(); @@ -15,23 +19,59 @@ class GuidePage extends StatefulWidget { class _GuidePageState extends State { @override Widget build(BuildContext context) { - return Swiper( - itemBuilder: (BuildContext context, int index) { - return new Image.network( - widget.model?.images[index], - fit: BoxFit.fill, - ); - }, - loop: false, - itemCount: widget.model?.images?.length ?? 0, - pagination: new SwiperPagination(), - control: new SwiperControl(), - onIndexChanged: (index) { - Logger.debug(index); - }, - onTap: (index) { - Logger.debug('点击'); - }, + bool isShowIndicator = (widget.model?.isShowIndicator ?? '0') == '1'; + List 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,); + return Image.memory(widget.imageDatas[index], fit: BoxFit.cover,); + }, + + loop: false, + itemCount: widget.imageDatas?.length ?? 0, + pagination: isShowIndicator ? 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) { + var borderRadius; + if (index == 0) { + borderRadius = BorderRadius.only(topLeft: Radius.circular(2), bottomLeft: Radius.circular(2)); + } + if (index == list.length - 1) { + borderRadius = BorderRadius.only(topRight: Radius.circular(2), bottomRight: Radius.circular(2)); + } + + if (index == config.activeIndex) { + borderRadius = BorderRadius.all(Radius.circular(2)); + } + + return SafeArea( + child: Container( + margin: EdgeInsets.only(bottom: 40), + height: 4, + width: 25, + decoration: BoxDecoration(borderRadius: borderRadius, color: index == config.activeIndex ? HexColor.fromHex('#FF4242') : HexColor.fromHex('#FFFFFF')), + ), + ); + }).toList() , + ), + ); + }) : null, + onIndexChanged: (index) { + }, + onTap: (index) { + if (index == widget.model.images.length - 1) { + Navigator.pop(context, true); + } + }, + ), + ), ); } } diff --git a/lib/pages/launch_page/launch_page.dart b/lib/pages/launch_page/launch_page.dart index 7c706a7..e46a385 100644 --- a/lib/pages/launch_page/launch_page.dart +++ b/lib/pages/launch_page/launch_page.dart @@ -1,9 +1,18 @@ +import 'dart:typed_data'; + import 'package:connectivity/connectivity.dart'; import 'package:flutter/cupertino.dart'; +import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; +import 'package:zhiying_base_widget/models/app_config_model.dart'; +import 'package:zhiying_base_widget/pages/guide_page/guide_page.dart'; import 'package:zhiying_base_widget/pages/home_page/home_page.dart'; import 'package:zhiying_comm/util/application.dart'; import 'package:zhiying_comm/zhiying_comm.dart'; +import 'package:dio/dio.dart'; +import 'package:zhiying_base_widget/utils/contants.dart'; +import 'package:zhiying_comm/util/shared_prefe_util.dart'; +import 'package:package_info/package_info.dart'; // 启动页,页面初始化等操作~跟原生启动页保持一致,防止白屏问题 class LaunchPage extends StatefulWidget { @@ -24,7 +33,18 @@ class _LaunchPageState extends State { // I am connected to a wifi network. Logger.debug('ConnectivityResult.wifi'); print('ConnectivityResult.wifi'); - Application.init().then((_) { + Application.init().then((_) async { + PackageInfo packageInfo = await PackageInfo.fromPlatform(); + String versionNumber = + await SharedPreferencesUtil.getStringValue(Constants.versionNumber); + String currentVersionCode = + packageInfo.buildNumber?.toString() ?? ''; + if (versionNumber == null || versionNumber == '' || versionNumber != currentVersionCode) { + await _showGuideImage(); + SharedPreferencesUtil.setStringValue(Constants.versionNumber, currentVersionCode); + } + + if (widget.builder != null) { Navigator.of(context) .pushReplacement(CupertinoPageRoute(builder: widget.builder)); @@ -44,6 +64,27 @@ class _LaunchPageState extends State { super.initState(); } + Future _showGuideImage() async { + // 引导页 + AppConfigGuideModel guide = AppConfigModel.getConfig()?.guideImage; + if (guide != null && guide.images.length > 0) { + Dio dio = Dio(); + + List guideImages = List(); + for (int i = 0; i < guide.images.length; i++) { + Response response = await dio.get(guide.images[i], options: Options(responseType: ResponseType.bytes)); + if (response.statusCode == 200) { + Uint8List data = Uint8List.fromList(response.data); + guideImages.add(data); + } + } + + await Navigator.of(context).push( + CupertinoPageRoute(builder: (context) => GuidePage(guide, guideImages))); + } + + } + @override Widget build(BuildContext context) { return Image.asset( diff --git a/lib/utils/contants.dart b/lib/utils/contants.dart index f6d822a..77dee28 100644 --- a/lib/utils/contants.dart +++ b/lib/utils/contants.dart @@ -25,4 +25,7 @@ class Constants { static String isShowNotiPermission = "isShowNotiPermission"; //==============================弹窗===================================end + //==============================版本号,控制引导页显示=================================== + static String versionNumber = "versionNumber"; + }