@@ -12,6 +12,9 @@ class AppConfigModel { | |||||
// 引导页 | // 引导页 | ||||
AppConfigGuideModel guideImage; | AppConfigGuideModel guideImage; | ||||
///新引导页参数 | |||||
GuideData guideData; | |||||
static AppConfigModel _config; | static AppConfigModel _config; | ||||
AppConfigModel({this.keys, this.guideImage}); | AppConfigModel({this.keys, this.guideImage}); | ||||
@@ -20,13 +23,12 @@ class AppConfigModel { | |||||
static Future<AppConfigModel> init({bool isGetCache = false}) async { | static Future<AppConfigModel> init({bool isGetCache = false}) async { | ||||
try { | try { | ||||
String cacheData = await SharedPreferencesUtil.getStringValue(GlobalConfig.GUIDE, defaultVal: '1'); | String cacheData = await SharedPreferencesUtil.getStringValue(GlobalConfig.GUIDE, defaultVal: '1'); | ||||
if (isGetCache && cacheData != '1') { | if (isGetCache && cacheData != '1') { | ||||
_config = AppConfigModel.fromJson(Map<String, dynamic>.from(json.decode(cacheData))); | _config = AppConfigModel.fromJson(Map<String, dynamic>.from(json.decode(cacheData))); | ||||
Logger.debug('基础设置初始化'); | Logger.debug('基础设置初始化'); | ||||
NetUtil.request('/api/v1/app/guide', onSuccess: (data) { | NetUtil.request('/api/v1/app/guide', onSuccess: (data) { | ||||
print(data); | |||||
Logger.log(json.encode(data)); | |||||
var cacheString = json.encode(data); | var cacheString = json.encode(data); | ||||
SharedPreferencesUtil.setNetCacheResult(GlobalConfig.GUIDE, cacheString); | SharedPreferencesUtil.setNetCacheResult(GlobalConfig.GUIDE, cacheString); | ||||
}); | }); | ||||
@@ -49,6 +51,7 @@ class AppConfigModel { | |||||
AppConfigModel.fromJson(Map<String, dynamic> json) { | AppConfigModel.fromJson(Map<String, dynamic> json) { | ||||
keys = json['keys'] != null ? new AppConfigKeyModel.fromJson(json['keys']) : null; | keys = json['keys'] != null ? new AppConfigKeyModel.fromJson(json['keys']) : null; | ||||
guideImage = json['guide_image'] != null ? new AppConfigGuideModel.fromJson(json['guide_image']) : null; | guideImage = json['guide_image'] != null ? new AppConfigGuideModel.fromJson(json['guide_image']) : null; | ||||
guideData = json['guide_data'] != null ? GuideData.fromJson(json['guide_data']) : null; | |||||
} | } | ||||
Map<String, dynamic> toJson() { | Map<String, dynamic> toJson() { | ||||
@@ -101,6 +104,69 @@ class AppConfigKeyModel { | |||||
} | } | ||||
} | } | ||||
class GuideData { | |||||
String indicatorType; | |||||
String indicatorCssType; | |||||
String indicatorChooseColor; | |||||
String indicatorUnchooseColor; | |||||
String btnText; | |||||
String btnBgColor; | |||||
String btnTextColor; | |||||
List<GuideCss> guideCss; | |||||
GuideData({this.indicatorType, this.indicatorCssType, this.indicatorChooseColor, this.indicatorUnchooseColor, this.btnText, this.btnBgColor, this.btnTextColor, this.guideCss}); | |||||
GuideData.fromJson(Map<String, dynamic> json) { | |||||
indicatorType = json['indicator_type']; | |||||
indicatorCssType = json['indicator_css_type']; | |||||
indicatorChooseColor = json['indicator_choose_color']; | |||||
indicatorUnchooseColor = json['indicator_unchoose_color']; | |||||
btnText = json['btn_text']; | |||||
btnBgColor = json['btn_bg_color']; | |||||
btnTextColor = json['btn_text_color']; | |||||
if (json['guide_css'] != null) { | |||||
guideCss = new List<GuideCss>(); | |||||
json['guide_css'].forEach((v) { | |||||
guideCss.add(new GuideCss.fromJson(v)); | |||||
}); | |||||
} | |||||
} | |||||
Map<String, dynamic> toJson() { | |||||
final Map<String, dynamic> data = new Map<String, dynamic>(); | |||||
data['indicator_type'] = this.indicatorType; | |||||
data['indicator_css_type'] = this.indicatorCssType; | |||||
data['indicator_choose_color'] = this.indicatorChooseColor; | |||||
data['indicator_unchoose_color'] = this.indicatorUnchooseColor; | |||||
data['btn_text'] = this.btnText; | |||||
data['btn_bg_color'] = this.btnBgColor; | |||||
data['btn_text_color'] = this.btnTextColor; | |||||
if (this.guideCss != null) { | |||||
data['guide_css'] = this.guideCss.map((v) => v.toJson()).toList(); | |||||
} | |||||
return data; | |||||
} | |||||
} | |||||
class GuideCss { | |||||
String bgImage; | |||||
String contentImage; | |||||
GuideCss({this.bgImage, this.contentImage}); | |||||
GuideCss.fromJson(Map<String, dynamic> json) { | |||||
bgImage = json['bg_image']; | |||||
contentImage = json['content_image']; | |||||
} | |||||
Map<String, dynamic> toJson() { | |||||
final Map<String, dynamic> data = new Map<String, dynamic>(); | |||||
data['bg_image'] = this.bgImage; | |||||
data['content_image'] = this.contentImage; | |||||
return data; | |||||
} | |||||
} | |||||
class AppConfigKeyItemModel { | class AppConfigKeyItemModel { | ||||
String appId; | String appId; | ||||
String appkey; | String appkey; | ||||
@@ -1,3 +1,5 @@ | |||||
import 'dart:async'; | |||||
import 'dart:convert'; | |||||
import 'dart:ui'; | import 'dart:ui'; | ||||
import 'package:event_bus/event_bus.dart'; | import 'package:event_bus/event_bus.dart'; | ||||
@@ -13,6 +15,7 @@ import 'package:zhiying_base_widget/pages/main_page/notifier/main_page_notifier. | |||||
import 'package:zhiying_base_widget/pages/main_page/notifier/main_page_bg_notifier.dart'; | import 'package:zhiying_base_widget/pages/main_page/notifier/main_page_bg_notifier.dart'; | ||||
import 'package:zhiying_base_widget/widgets/goods_details/appbar/goods_details_appbar_widget.dart'; | import 'package:zhiying_base_widget/widgets/goods_details/appbar/goods_details_appbar_widget.dart'; | ||||
import 'package:zhiying_base_widget/widgets/goods_details/footer/goods_details_footer_widget.dart'; | import 'package:zhiying_base_widget/widgets/goods_details/footer/goods_details_footer_widget.dart'; | ||||
import 'package:zhiying_base_widget/widgets/goods_details/footer/model/goods_details_footer_model.dart'; | |||||
import 'package:zhiying_comm/zhiying_comm.dart'; | import 'package:zhiying_comm/zhiying_comm.dart'; | ||||
import 'notifier/goods_details_appbar_color_notifier.dart'; | import 'notifier/goods_details_appbar_color_notifier.dart'; | ||||
@@ -151,17 +154,27 @@ class _GoodsDetailsContainerState extends State<GoodsDetailsContainer> { | |||||
Widget _getMainWidget(List<Map<String, dynamic>> datas) { | Widget _getMainWidget(List<Map<String, dynamic>> datas) { | ||||
return Scaffold( | return Scaffold( | ||||
backgroundColor: Colors.white, | backgroundColor: Colors.white, | ||||
body: Container( | |||||
color: Color(0xfff1f1f1), | |||||
child: Stack( | |||||
children: <Widget>[ | |||||
CustomScrollView( | |||||
controller: _controller, | |||||
slivers: _createContent(context, datas ?? []), | |||||
), | |||||
Align(alignment: Alignment.topCenter, child: GoodsDetailsAppBarWidget(datas[0])), | |||||
], | |||||
)), | |||||
body: Stack( | |||||
children: <Widget>[ | |||||
Container( | |||||
color: Color(0xfff1f1f1), | |||||
child: Stack( | |||||
children: <Widget>[ | |||||
CustomScrollView( | |||||
controller: _controller, | |||||
slivers: _createContent(context, datas ?? []), | |||||
), | |||||
Align(alignment: Alignment.topCenter, child: GoodsDetailsAppBarWidget(datas[0])), | |||||
], | |||||
)), | |||||
Align( | |||||
alignment: Alignment.bottomCenter, | |||||
child: _FloatView( | |||||
!EmptyUtil.isEmpty(datas) ? datas[datas.length - 1] : null, | |||||
), | |||||
) | |||||
], | |||||
), | |||||
/// 底部 | /// 底部 | ||||
bottomNavigationBar: GoodsDetailsFooterWidget( | bottomNavigationBar: GoodsDetailsFooterWidget( | ||||
@@ -261,4 +274,70 @@ class _GoodsDetailsContainerState extends State<GoodsDetailsContainer> { | |||||
// ), | // ), | ||||
); | ); | ||||
} | } | ||||
///构建浮动页 | |||||
_FloatView(Map<String, dynamic> model) { | |||||
if (model != null) { | |||||
return FloatView( | |||||
model: model, | |||||
); | |||||
} | |||||
} | |||||
} | |||||
class FloatView extends StatefulWidget { | |||||
final Map<String, dynamic> model; | |||||
const FloatView({Key key, this.model}) : super(key: key); | |||||
@override | |||||
_FloatViewState createState() => _FloatViewState(); | |||||
} | |||||
class _FloatViewState extends State<FloatView> with TickerProviderStateMixin { | |||||
double floatMarginBottom = 0.0; | |||||
Timer floatTimer; | |||||
AnimationController animationController; | |||||
Animation<double> tween; | |||||
GoodsDetailsFooterModel footerModel; | |||||
@override | |||||
void initState() { | |||||
footerModel = GoodsDetailsFooterModel.fromJson(json.decode(widget?.model['data'])); | |||||
animationController = AnimationController(vsync: this, duration: Duration(milliseconds: 3000)); | |||||
CurvedAnimation curvedAnimation = CurvedAnimation(parent: animationController, curve: Curves.easeInOutBack); | |||||
tween = Tween<double>(begin: 5, end: 20).animate(curvedAnimation); | |||||
curvedAnimation.addListener(() { | |||||
setState(() {}); | |||||
}); | |||||
// animationController.repeat(reverse: true); | |||||
super.initState(); | |||||
} | |||||
@override | |||||
void dispose() { | |||||
animationController.dispose(); | |||||
super.dispose(); | |||||
} | |||||
@override | |||||
Widget build(BuildContext context) { | |||||
return Container(); | |||||
return Row( | |||||
mainAxisAlignment: MainAxisAlignment.end, | |||||
children: <Widget>[ | |||||
Container( | |||||
margin: EdgeInsets.only(bottom: tween?.value ?? 0, right: 25), | |||||
color: Colors.red, | |||||
child: Text(""), | |||||
), | |||||
], | |||||
); | |||||
} | |||||
} | } |
@@ -7,10 +7,11 @@ import 'package:zhiying_base_widget/widgets/home/home_quick_entry/cached_network | |||||
import 'package:zhiying_comm/zhiying_comm.dart'; | import 'package:zhiying_comm/zhiying_comm.dart'; | ||||
class GuidePage extends StatefulWidget { | class GuidePage extends StatefulWidget { | ||||
final AppConfigGuideModel model; | |||||
final GuideData model; | |||||
final List<Uint8List> imageDatas; | final List<Uint8List> imageDatas; | ||||
final List<Uint8List> bgImageDatas; | |||||
const GuidePage(this.model, this.imageDatas, {Key key}) : super(key: key); | |||||
const GuidePage(this.model, this.imageDatas, this.bgImageDatas, {Key key}) : super(key: key); | |||||
@override | @override | ||||
State<StatefulWidget> createState() => _GuidePageState(); | State<StatefulWidget> createState() => _GuidePageState(); | ||||
@@ -19,54 +20,120 @@ class GuidePage extends StatefulWidget { | |||||
class _GuidePageState extends State<GuidePage> { | class _GuidePageState extends State<GuidePage> { | ||||
@override | @override | ||||
Widget build(BuildContext context) { | Widget build(BuildContext context) { | ||||
bool isShowIndicator = (widget.model?.isShowIndicator ?? '0') == '1'; | |||||
bool isShowIndicator = (widget.model?.indicatorType ?? '0') == '1'; | |||||
List<int> list = List.generate(widget.imageDatas?.length, (index) => index); | List<int> list = List.generate(widget.imageDatas?.length, (index) => index); | ||||
return WillPopScope( | return WillPopScope( | ||||
onWillPop: () async => false,// 拦截Android返回键 | |||||
onWillPop: () async => false, // 拦截Android返回键 | |||||
child: Material( | child: Material( | ||||
child: Swiper( | child: Swiper( | ||||
itemBuilder: (BuildContext context, int index) { | itemBuilder: (BuildContext context, int index) { | ||||
// return CachedNetworkImage(imageUrl: widget.model.images[index],fit: BoxFit.cover,); | // 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)); | |||||
} | |||||
Uint8List bgImage; | |||||
if (widget.bgImageDatas.length > index) { | |||||
bgImage = widget?.bgImageDatas[index]; | |||||
} | |||||
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() , | |||||
), | |||||
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() | |||||
], | |||||
); | ); | ||||
}) : null, | |||||
onIndexChanged: (index) { | |||||
}, | }, | ||||
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) { | onTap: (index) { | ||||
if (index == widget.model.images.length - 1) { | |||||
if (index == widget.model.guideCss.length - 1) { | |||||
Navigator.pop(context, true); | Navigator.pop(context, true); | ||||
} | } | ||||
}, | }, | ||||
@@ -127,20 +127,28 @@ class _LaunchPageState extends State<LaunchPage> with TickerProviderStateMixin { | |||||
Future _showGuideImage() async { | Future _showGuideImage() async { | ||||
try { | try { | ||||
// 引导页 | // 引导页 | ||||
AppConfigGuideModel guide = AppConfigModel.getConfig()?.guideImage; | |||||
if (guide != null && guide.images.length > 0) { | |||||
AppConfigModel guide = AppConfigModel.getConfig(); | |||||
if (guide != null && guide.guideData.guideCss.length > 0) { | |||||
Dio dio = Dio(); | Dio dio = Dio(); | ||||
print("加载图片"); | print("加载图片"); | ||||
List<Uint8List> guideImages = List(); | List<Uint8List> guideImages = List(); | ||||
for (int i = 0; i < guide.images.length; i++) { | |||||
Response response = await dio.get(guide.images[i], options: Options(responseType: ResponseType.bytes)); | |||||
List<Uint8List>bgImages = List(); | |||||
for (int i = 0; i < guide.guideData.guideCss.length; i++) { | |||||
Response response = await dio.get(guide.guideData.guideCss[i].contentImage, options: Options(responseType: ResponseType.bytes)); | |||||
if (response.statusCode == 200) { | if (response.statusCode == 200) { | ||||
Uint8List data = Uint8List.fromList(response.data); | Uint8List data = Uint8List.fromList(response.data); | ||||
guideImages.add(data); | guideImages.add(data); | ||||
} | } | ||||
response = await dio.get(guide.guideData.guideCss[i].bgImage, options: Options(responseType: ResponseType.bytes)); | |||||
if (response.statusCode == 200) { | |||||
Uint8List data = Uint8List.fromList(response.data); | |||||
bgImages.add(data); | |||||
} | |||||
} | } | ||||
NativeUtil.notifyInitSuccess(); | NativeUtil.notifyInitSuccess(); | ||||
await Navigator.of(context).push(CupertinoPageRoute(builder: (context) => GuidePage(guide, guideImages))); | |||||
await Navigator.of(context).push(CupertinoPageRoute(builder: (context) => GuidePage(guide.guideData, guideImages,bgImages))); | |||||
} | } | ||||
} catch (e) { | } catch (e) { | ||||
throw "引导图加载失败"; | throw "引导图加载失败"; | ||||
@@ -63,9 +63,7 @@ class _GoodsDetailsFooterContainerState extends State<_GoodsDetailsFooterContain | |||||
@override | @override | ||||
void didChangeDependencies() { | void didChangeDependencies() { | ||||
_user = Provider | |||||
.of<UserInfoNotifier>(context) | |||||
.userInfo; | |||||
_user = Provider.of<UserInfoNotifier>(context).userInfo; | |||||
super.didChangeDependencies(); | super.didChangeDependencies(); | ||||
} | } | ||||
@@ -88,6 +86,12 @@ class _GoodsDetailsFooterContainerState extends State<_GoodsDetailsFooterContain | |||||
/// 收藏 | /// 收藏 | ||||
void _collectOnClick(GoodsDetailsFooterModel model) { | void _collectOnClick(GoodsDetailsFooterModel model) { | ||||
///获取用户信息,未登录需要先登录 | |||||
var _user = Provider.of<UserInfoNotifier>(context,listen: false).userInfo; | |||||
if (_user?.token == null || _user?.token?.length == 0) { | |||||
RouterUtil.goLogin(context); | |||||
return; | |||||
} | |||||
bool isCollect = model.isFav == '0'; | bool isCollect = model.isFav == '0'; | ||||
if (isCollect) { | if (isCollect) { | ||||
// 收藏 | // 收藏 | ||||
@@ -133,27 +137,23 @@ class _GoodsDetailsFooterContainerState extends State<_GoodsDetailsFooterContain | |||||
} | } | ||||
Widget _getMainWidget(GoodsDetailsFooterModel model) { | Widget _getMainWidget(GoodsDetailsFooterModel model) { | ||||
double height = MediaQuery | |||||
.of(context) | |||||
.padding | |||||
.bottom; | |||||
double height = MediaQuery.of(context).padding.bottom; | |||||
return SafeArea( | return SafeArea( | ||||
child: Container( | child: Container( | ||||
width: double.infinity, | width: double.infinity, | ||||
padding: EdgeInsets.only(bottom: (height > 10 ? 0 : 8), top: 8, left: 12.5, right: 12.5), | padding: EdgeInsets.only(bottom: (height > 10 ? 0 : 8), top: 8, left: 12.5, right: 12.5), | ||||
decoration: BoxDecoration( | decoration: BoxDecoration( | ||||
// boxShadow: [ | |||||
// BoxShadow(color: Colors.grey[300], offset: Offset(0.0, 0.0), blurRadius: 5.0, spreadRadius: 2.0), | |||||
// BoxShadow(color: Colors.grey[300], offset: Offset(0.0, 0.0)), | |||||
// ], | |||||
// boxShadow: [ | |||||
// BoxShadow(color: Colors.grey[300], offset: Offset(0.0, 0.0), blurRadius: 5.0, spreadRadius: 2.0), | |||||
// BoxShadow(color: Colors.grey[300], offset: Offset(0.0, 0.0)), | |||||
// ], | |||||
color: HexColor.fromHex(model?.bgColor), | color: HexColor.fromHex(model?.bgColor), | ||||
borderRadius: BorderRadius.only( | borderRadius: BorderRadius.only( | ||||
topLeft: Radius.circular(ParseUtil.stringParseDouble(model?.topLeftRadius)), | topLeft: Radius.circular(ParseUtil.stringParseDouble(model?.topLeftRadius)), | ||||
topRight: Radius.circular(ParseUtil.stringParseDouble(model?.topRightRadius)), | topRight: Radius.circular(ParseUtil.stringParseDouble(model?.topRightRadius)), | ||||
bottomLeft: Radius.circular(ParseUtil.stringParseDouble(model?.bottomLeftRadius)), | bottomLeft: Radius.circular(ParseUtil.stringParseDouble(model?.bottomLeftRadius)), | ||||
bottomRight: Radius.circular(ParseUtil.stringParseDouble(model?.bottomRightRadius)), | bottomRight: Radius.circular(ParseUtil.stringParseDouble(model?.bottomRightRadius)), | ||||
) | |||||
), | |||||
)), | |||||
child: Container(height: 44, child: _getMainWidet(model)), | child: Container(height: 44, child: _getMainWidet(model)), | ||||
), | ), | ||||
); | ); | ||||
@@ -165,7 +165,6 @@ class _GoodsDetailsFooterContainerState extends State<_GoodsDetailsFooterContain | |||||
mainAxisAlignment: MainAxisAlignment.spaceBetween, | mainAxisAlignment: MainAxisAlignment.spaceBetween, | ||||
crossAxisAlignment: CrossAxisAlignment.center, | crossAxisAlignment: CrossAxisAlignment.center, | ||||
children: <Widget>[ | children: <Widget>[ | ||||
/// 首页与收藏 | /// 首页与收藏 | ||||
_getLeftWidget(model), | _getLeftWidget(model), | ||||
@@ -187,7 +186,7 @@ class _GoodsDetailsFooterContainerState extends State<_GoodsDetailsFooterContain | |||||
behavior: HitTestBehavior.opaque, | behavior: HitTestBehavior.opaque, | ||||
onTap: () => _openHome(), | onTap: () => _openHome(), | ||||
child: Padding( | child: Padding( | ||||
padding: const EdgeInsets.only(right: 35,left: 8), | |||||
padding: const EdgeInsets.only(right: 35, left: 8), | |||||
child: _getCustomWidget(model?.listStyle?.leftIcon1?.text ?? '首页', model?.listStyle?.leftIcon1?.color ?? '999999', model?.listStyle?.leftIcon1?.beforeIcon ?? ''), | child: _getCustomWidget(model?.listStyle?.leftIcon1?.text ?? '首页', model?.listStyle?.leftIcon1?.color ?? '999999', model?.listStyle?.leftIcon1?.beforeIcon ?? ''), | ||||
)), | )), | ||||
), | ), | ||||
@@ -213,8 +212,8 @@ class _GoodsDetailsFooterContainerState extends State<_GoodsDetailsFooterContain | |||||
mainAxisAlignment: MainAxisAlignment.end, | mainAxisAlignment: MainAxisAlignment.end, | ||||
crossAxisAlignment: CrossAxisAlignment.center, | crossAxisAlignment: CrossAxisAlignment.center, | ||||
children: <Widget>[ | children: <Widget>[ | ||||
(model?.listStyle?.rightIcon1?.isShow ?? "0") == "1" ? Expanded(child: _getFxzButton(model)):Container(), | |||||
(model?.listStyle?.rightIcon2?.isShow ?? "0") == "1" ? Expanded(child: _getZgsButton(model)):Container() | |||||
(model?.listStyle?.rightIcon1?.isShow ?? "0") == "1" ? Expanded(child: _getFxzButton(model)) : Container(), | |||||
(model?.listStyle?.rightIcon2?.isShow ?? "0") == "1" ? Expanded(child: _getZgsButton(model)) : Container() | |||||
], | ], | ||||
), | ), | ||||
); | ); | ||||
@@ -242,10 +241,10 @@ class _GoodsDetailsFooterContainerState extends State<_GoodsDetailsFooterContain | |||||
width: double.infinity, | width: double.infinity, | ||||
// padding: const EdgeInsets.only(left: 30, right: 30, top: 5, bottom: 5), | // padding: const EdgeInsets.only(left: 30, right: 30, top: 5, bottom: 5), | ||||
decoration: BoxDecoration( | decoration: BoxDecoration( | ||||
// gradient: LinearGradient( | |||||
// colors: [HexColor.fromHex(/*model?.share_earn_bg1_color ??*/ '#FFCA66'), HexColor.fromHex(/*model?.share_earn_bg2_color ??*/ '#FFD961')], | |||||
// begin: Alignment.centerLeft, | |||||
// end: Alignment.centerRight), | |||||
// gradient: LinearGradient( | |||||
// colors: [HexColor.fromHex(/*model?.share_earn_bg1_color ??*/ '#FFCA66'), HexColor.fromHex(/*model?.share_earn_bg2_color ??*/ '#FFD961')], | |||||
// begin: Alignment.centerLeft, | |||||
// end: Alignment.centerRight), | |||||
image: DecorationImage(image: CachedNetworkImageProvider(model?.listStyle?.rightIcon1?.bgImage ?? ''), fit: BoxFit.fitWidth), | image: DecorationImage(image: CachedNetworkImageProvider(model?.listStyle?.rightIcon1?.bgImage ?? ''), fit: BoxFit.fitWidth), | ||||
borderRadius: BorderRadius.only(bottomLeft: Radius.circular(25), topLeft: Radius.circular(25))), | borderRadius: BorderRadius.only(bottomLeft: Radius.circular(25), topLeft: Radius.circular(25))), | ||||
child: Column( | child: Column( | ||||
@@ -284,10 +283,10 @@ class _GoodsDetailsFooterContainerState extends State<_GoodsDetailsFooterContain | |||||
// padding: const EdgeInsets.only(left: 30, right: 30, top: 5, bottom: 5), | // padding: const EdgeInsets.only(left: 30, right: 30, top: 5, bottom: 5), | ||||
height: 44, | height: 44, | ||||
decoration: BoxDecoration( | decoration: BoxDecoration( | ||||
// gradient: LinearGradient( | |||||
// colors: [HexColor.fromHex(/*model?.save_earn_bg1_color ??*/ '#FF6969'), HexColor.fromHex(/*model?.save_earn_bg2_color ??*/ '#FF4646')], | |||||
// begin: Alignment.centerLeft, | |||||
// end: Alignment.centerRight), | |||||
// gradient: LinearGradient( | |||||
// colors: [HexColor.fromHex(/*model?.save_earn_bg1_color ??*/ '#FF6969'), HexColor.fromHex(/*model?.save_earn_bg2_color ??*/ '#FF4646')], | |||||
// begin: Alignment.centerLeft, | |||||
// end: Alignment.centerRight), | |||||
image: DecorationImage(image: CachedNetworkImageProvider(model?.listStyle?.rightIcon2?.bgImage ?? ''), fit: BoxFit.fitWidth), | image: DecorationImage(image: CachedNetworkImageProvider(model?.listStyle?.rightIcon2?.bgImage ?? ''), fit: BoxFit.fitWidth), | ||||
borderRadius: BorderRadius.only(bottomRight: Radius.circular(25), topRight: Radius.circular(25))), | borderRadius: BorderRadius.only(bottomRight: Radius.circular(25), topRight: Radius.circular(25))), | ||||
child: Column( | child: Column( | ||||
@@ -319,7 +318,6 @@ class _GoodsDetailsFooterContainerState extends State<_GoodsDetailsFooterContain | |||||
crossAxisAlignment: CrossAxisAlignment.center, | crossAxisAlignment: CrossAxisAlignment.center, | ||||
mainAxisAlignment: MainAxisAlignment.end, | mainAxisAlignment: MainAxisAlignment.end, | ||||
children: <Widget>[ | children: <Widget>[ | ||||
/// 图标 | /// 图标 | ||||
CachedNetworkImage( | CachedNetworkImage( | ||||
imageUrl: icon, | imageUrl: icon, | ||||