@@ -596,7 +596,7 @@ | |||||
"languageVersion": "2.1" | "languageVersion": "2.1" | ||||
} | } | ||||
], | ], | ||||
"generated": "2020-09-29T07:01:40.444026Z", | |||||
"generated": "2020-09-29T08:01:12.048733Z", | |||||
"generator": "pub", | "generator": "pub", | ||||
"generatorVersion": "2.7.2" | "generatorVersion": "2.7.2" | ||||
} | } |
@@ -10,6 +10,8 @@ import 'package:zhiying_base_widget/pages/goods_share_page/widgets/goods_share_a | |||||
import 'package:zhiying_base_widget/pages/goods_share_page/widgets/goods_share_edit.dart'; | import 'package:zhiying_base_widget/pages/goods_share_page/widgets/goods_share_edit.dart'; | ||||
import 'package:zhiying_base_widget/pages/goods_share_page/widgets/goods_share_image.dart'; | import 'package:zhiying_base_widget/pages/goods_share_page/widgets/goods_share_image.dart'; | ||||
import 'package:zhiying_base_widget/pages/goods_share_page/widgets/goods_share_item.dart'; | import 'package:zhiying_base_widget/pages/goods_share_page/widgets/goods_share_item.dart'; | ||||
import 'package:zhiying_base_widget/widgets/public/custom_button/custom_bottom.dart'; | |||||
import 'package:zhiying_base_widget/widgets/public/custom_button/custom_button_model.dart'; | |||||
import 'package:zhiying_base_widget/widgets/share/models/share_data_model.dart'; | import 'package:zhiying_base_widget/widgets/share/models/share_data_model.dart'; | ||||
import 'package:zhiying_base_widget/widgets/share/share_alert.dart'; | import 'package:zhiying_base_widget/widgets/share/share_alert.dart'; | ||||
@@ -51,6 +53,8 @@ class _GoodsShareImageState extends State<GoodsShareImage> { | |||||
Fluttertoast.showToast(msg: '复制成功'); | Fluttertoast.showToast(msg: '复制成功'); | ||||
}, | }, | ||||
onEditorClick: () { | onEditorClick: () { | ||||
Fluttertoast.showToast(msg: '正在开发中'); | |||||
return; | |||||
Navigator.push(context, | Navigator.push(context, | ||||
MaterialPageRoute(builder: (context) => GoodsShareEditor())); | MaterialPageRoute(builder: (context) => GoodsShareEditor())); | ||||
}, | }, | ||||
@@ -116,62 +120,58 @@ class _GoodsShareImageState extends State<GoodsShareImage> { | |||||
} | } | ||||
Widget _createBottom() { | Widget _createBottom() { | ||||
Map<String, dynamic> shareImages = _style.cssList.shareImage; | |||||
if (shareImages == null) { | |||||
return Container(); | |||||
} | |||||
CustomButtonModel btnCopy = CustomButtonModel.fromJson( | |||||
Map<String, dynamic>.from(shareImages['copy_btn'])); | |||||
CustomButtonModel btnSave = CustomButtonModel.fromJson( | |||||
Map<String, dynamic>.from(shareImages['save_btn'])); | |||||
CustomButtonModel btnShare = CustomButtonModel.fromJson( | |||||
Map<String, dynamic>.from(shareImages['share_btn'])); | |||||
return SafeArea( | return SafeArea( | ||||
child: Container( | child: Container( | ||||
margin: EdgeInsets.only(left: 12.5, right: 12.5, top: 4, bottom: 4), | margin: EdgeInsets.only(left: 12.5, right: 12.5, top: 4, bottom: 4), | ||||
child: Row( | child: Row( | ||||
children: <Widget>[ | children: <Widget>[ | ||||
Container( | |||||
width: 95, | |||||
height: 36, | |||||
decoration: BoxDecoration( | |||||
color: Colors.red, | |||||
borderRadius: BorderRadius.circular(18), | |||||
), | |||||
child: Center( | |||||
child: Text( | |||||
'仅复制口令', | |||||
style: TextStyle(color: Colors.white), | |||||
), | |||||
), | |||||
), | |||||
Container( | |||||
margin: EdgeInsets.only(left: 5), | |||||
width: 95, | |||||
height: 36, | |||||
decoration: BoxDecoration( | |||||
color: Colors.orangeAccent, | |||||
borderRadius: BorderRadius.circular(18), | |||||
), | |||||
child: Center( | |||||
child: Text( | |||||
'保存选图', | |||||
style: TextStyle(color: Colors.white), | |||||
), | |||||
), | |||||
), | |||||
Expanded( | |||||
child: GestureDetector( | |||||
child: Container( | |||||
margin: EdgeInsets.only(left: 5), | |||||
// width: 95, | |||||
height: 36, | |||||
decoration: BoxDecoration( | |||||
color: Colors.amber, | |||||
borderRadius: BorderRadius.circular(18), | |||||
btnCopy == null | |||||
? Container() | |||||
: Container( | |||||
width: 95, | |||||
height: 36, | |||||
decoration: BoxDecoration( | |||||
borderRadius: BorderRadius.circular(18), | |||||
), | |||||
child: CustomButton(btnCopy)), | |||||
btnSave == null | |||||
? Container() | |||||
: Container( | |||||
margin: EdgeInsets.only(left: 5), | |||||
width: 95, | |||||
height: 36, | |||||
decoration: BoxDecoration( | |||||
borderRadius: BorderRadius.circular(18), | |||||
), | |||||
child: CustomButton(btnSave), | |||||
), | ), | ||||
child: Center( | |||||
child: Text( | |||||
'分享选中素材', | |||||
style: TextStyle(color: Colors.white), | |||||
btnShare == null | |||||
? Container() | |||||
: Expanded( | |||||
child: GestureDetector( | |||||
child: Container( | |||||
margin: EdgeInsets.only(left: 5), | |||||
// width: 95, | |||||
height: 36, | |||||
decoration: BoxDecoration( | |||||
borderRadius: BorderRadius.circular(18), | |||||
), | |||||
child: CustomButton(btnShare)), | |||||
onTap: () { | |||||
_showShare(); | |||||
}, | |||||
), | ), | ||||
), | ), | ||||
), | |||||
onTap: () { | |||||
_showShare(); | |||||
}, | |||||
), | |||||
), | |||||
], | ], | ||||
), | ), | ||||
), | ), | ||||
@@ -1,8 +1,19 @@ | |||||
import 'dart:convert' as convert; | |||||
import 'package:flutter/cupertino.dart'; | |||||
import 'package:flutter/material.dart'; | import 'package:flutter/material.dart'; | ||||
import 'package:fluttertoast/fluttertoast.dart'; | |||||
import 'package:zhiying_base_widget/pages/goods_share_page/goods_share_editor/goods_share_editor.dart'; | |||||
import 'package:zhiying_base_widget/pages/goods_share_page/goods_share_image/goods_share_image_model.dart'; | |||||
import 'package:zhiying_base_widget/pages/goods_share_page/widgets/good_share_msg.dart'; | import 'package:zhiying_base_widget/pages/goods_share_page/widgets/good_share_msg.dart'; | ||||
import 'package:zhiying_base_widget/pages/goods_share_page/widgets/goods_share_alert_content.dart'; | |||||
import 'package:zhiying_base_widget/pages/goods_share_page/widgets/goods_share_edit.dart'; | import 'package:zhiying_base_widget/pages/goods_share_page/widgets/goods_share_edit.dart'; | ||||
import 'package:zhiying_base_widget/pages/goods_share_page/widgets/goods_share_item.dart'; | import 'package:zhiying_base_widget/pages/goods_share_page/widgets/goods_share_item.dart'; | ||||
import 'package:zhiying_base_widget/pages/goods_share_page/widgets/goods_share_link_widget.dart'; | import 'package:zhiying_base_widget/pages/goods_share_page/widgets/goods_share_link_widget.dart'; | ||||
import 'package:zhiying_base_widget/widgets/public/custom_button/custom_bottom.dart'; | |||||
import 'package:zhiying_base_widget/widgets/public/custom_button/custom_button_model.dart'; | |||||
import 'package:zhiying_base_widget/widgets/share/models/share_data_model.dart'; | |||||
import 'package:zhiying_base_widget/widgets/share/share_alert.dart'; | |||||
class GoodsShareLink extends StatefulWidget { | class GoodsShareLink extends StatefulWidget { | ||||
final Map<String, dynamic> model; | final Map<String, dynamic> model; | ||||
@@ -14,39 +25,155 @@ class GoodsShareLink extends StatefulWidget { | |||||
} | } | ||||
class _GoodsShareLinkState extends State<GoodsShareLink> { | class _GoodsShareLinkState extends State<GoodsShareLink> { | ||||
GoodsShareImageModel _style; | |||||
Map<int, String> _images = Map(); | |||||
List<Widget> widgets = List(); | |||||
// 分享数据 | |||||
final ShareDataModel _shareModel = ShareDataModel(); | |||||
@override | |||||
void initState() { | |||||
String data = widget.model['data']; | |||||
var d = convert.jsonDecode(data); | |||||
_style = GoodsShareImageModel.fromJson(Map<String, dynamic>.from(d)); | |||||
super.initState(); | |||||
} | |||||
@override | @override | ||||
Widget build(BuildContext context) { | Widget build(BuildContext context) { | ||||
return Container( | |||||
margin: EdgeInsets.only(bottom: 4), | |||||
padding: EdgeInsets.only(top: 10), | |||||
decoration: BoxDecoration( | |||||
color: Colors.white, | |||||
borderRadius: BorderRadius.only( | |||||
bottomLeft: Radius.circular(8), bottomRight: Radius.circular(8))), | |||||
child: SingleChildScrollView( | |||||
child: Column( | |||||
crossAxisAlignment: CrossAxisAlignment.start, | |||||
mainAxisAlignment: MainAxisAlignment.start, | |||||
children: <Widget>[ | |||||
GoodsShareItem( | |||||
child: GoodsShareLinkWidget( | |||||
title: '小米10至尊纪念版5g手机120X变焦骁龙865小米官方旗舰店小米手机', | |||||
desc: '【原价】3999元【券后3989元【用嗨如意再省】19.74元復製(FRH51Lu9hYF', | |||||
imgGoods: '', | |||||
icon: '', | |||||
name: '智莺生活', | |||||
), | |||||
), | |||||
GoodsShareItem( | |||||
child: GoodsShareEdit( | |||||
'至高减600【24期免息】xiaomi/小米10Pro 5G手机骁龙865智能游戏拍照手机官方旗舰店小米10青春正品k305g现货\n\n原价】3999元\n券后价】3989元\n【用智莺生活再省】19.74元\n-------------\n復製(FRH51Lu9hYF),\n用【Tao·寳】下单\n-------------\n商品链接】\nhttp://hsrj3.cn/ps/FRH51Lu9hYF.html)\n'), | |||||
), | |||||
GoodsShareItem( | |||||
child: GoodsShareMessage('点击编辑模板可以自定义分享文案哦😄😄'), | |||||
widgets.clear(); | |||||
widgets.add(GoodsShareItem( | |||||
imgHeader: _style.cssList.headerImage, | |||||
imgCheck: _style.cssList.unChooseImage, | |||||
imgCheckSelected: _style.cssList.chooseImage, | |||||
enabled: false, | |||||
child: GoodsShareLinkWidget( | |||||
title: '小米10至尊纪念版5g手机120X变焦骁龙865小米官方旗舰店小米手机', | |||||
desc: '【原价】3999元【券后3989元【用嗨如意再省】19.74元復製(FRH51Lu9hYF', | |||||
imgGoods: '', | |||||
icon: '', | |||||
name: '智莺生活', | |||||
), | |||||
)); | |||||
widgets.add(GoodsShareItem( | |||||
imgHeader: _style.cssList.headerImage, | |||||
imgCheck: _style.cssList.unChooseImage, | |||||
imgCheckSelected: _style.cssList.chooseImage, | |||||
enabled: false, | |||||
child: GoodsShareEdit( | |||||
_style.content, | |||||
onCopyClick: () { | |||||
Fluttertoast.showToast(msg: '复制成功'); | |||||
}, | |||||
onEditorClick: () { | |||||
Fluttertoast.showToast(msg: '正在开发中'); | |||||
return; | |||||
Navigator.push(context, | |||||
MaterialPageRoute(builder: (context) => GoodsShareEditor())); | |||||
}, | |||||
), | |||||
onSelected: (isSelected) { | |||||
_shareModel.content = isSelected ? '' : _style.content; | |||||
}, | |||||
)); | |||||
for (String message in _style.customContent) { | |||||
widgets.add( | |||||
GoodsShareItem( | |||||
imgHeader: _style.cssList.headerImage, | |||||
imgCheck: _style.cssList.unChooseImage, | |||||
imgCheckSelected: _style.cssList.chooseImage, | |||||
enabled: false, | |||||
child: GoodsShareMessage(message), | |||||
), | |||||
); | |||||
} | |||||
return Column( | |||||
children: <Widget>[ | |||||
Expanded( | |||||
child: Container( | |||||
margin: EdgeInsets.only(bottom: 4), | |||||
padding: EdgeInsets.only(top: 10), | |||||
decoration: BoxDecoration( | |||||
color: Colors.white, | |||||
borderRadius: BorderRadius.only( | |||||
bottomLeft: Radius.circular(8), | |||||
bottomRight: Radius.circular(8))), | |||||
child: SingleChildScrollView( | |||||
child: Column( | |||||
crossAxisAlignment: CrossAxisAlignment.start, | |||||
mainAxisAlignment: MainAxisAlignment.start, | |||||
children: widgets), | |||||
), | ), | ||||
), | |||||
), | |||||
_createBottom(), | |||||
], | |||||
); | |||||
} | |||||
Widget _createBottom() { | |||||
Map<String, dynamic> shareImages = _style.cssList.shareLink; | |||||
if (shareImages == null) { | |||||
return Container(); | |||||
} | |||||
CustomButtonModel btnCopy = CustomButtonModel.fromJson( | |||||
Map<String, dynamic>.from(shareImages['copy_btn'])); | |||||
CustomButtonModel btnShare = CustomButtonModel.fromJson( | |||||
Map<String, dynamic>.from(shareImages['share_btn'])); | |||||
return SafeArea( | |||||
child: Container( | |||||
margin: EdgeInsets.only(left: 12.5, right: 12.5, top: 4, bottom: 4), | |||||
child: Row( | |||||
mainAxisAlignment: MainAxisAlignment.center, | |||||
children: <Widget>[ | |||||
btnCopy == null | |||||
? Container() | |||||
: Container( | |||||
width: 110, | |||||
height: 36, | |||||
decoration: BoxDecoration( | |||||
borderRadius: BorderRadius.circular(18), | |||||
), | |||||
child: CustomButton(btnCopy)), | |||||
btnShare == null | |||||
? Container() | |||||
: GestureDetector( | |||||
child: Container( | |||||
margin: EdgeInsets.only(left: 5), | |||||
width: 110, | |||||
height: 36, | |||||
decoration: BoxDecoration( | |||||
borderRadius: BorderRadius.circular(18), | |||||
), | |||||
child: CustomButton(btnShare)), | |||||
onTap: () { | |||||
_showShare(); | |||||
}, | |||||
), | |||||
], | ], | ||||
), | ), | ||||
), | ), | ||||
); | ); | ||||
} | } | ||||
void _showShare() async { | |||||
List<String> images = List(); | |||||
for (int index = 0; index < _style.customImage.length; index++) { | |||||
if (_images.containsKey(index)) { | |||||
images.add(_images[index]); | |||||
} | |||||
} | |||||
if (images.length >= 0) { | |||||
_shareModel.image = images; | |||||
} | |||||
showCupertinoModalPopup( | |||||
context: context, | |||||
builder: (context) => ShareAlert( | |||||
_shareModel, | |||||
child: GoodsShareAlertContent(), | |||||
), | |||||
); | |||||
} | |||||
} | } |
@@ -9,6 +9,8 @@ class GoodsShareStyleModel { | |||||
String rewardImage; | String rewardImage; | ||||
String rewardText; | String rewardText; | ||||
Map<String, dynamic> shareImage; | Map<String, dynamic> shareImage; | ||||
Map<String, dynamic> shareLink; | |||||
Map<String, dynamic> shareMini; | |||||
GoodsShareTempEditorModel editTemplate; | GoodsShareTempEditorModel editTemplate; | ||||
GoodsShareStyleModel( | GoodsShareStyleModel( | ||||
@@ -31,6 +33,8 @@ class GoodsShareStyleModel { | |||||
rewardImage = json['reward_image']; | rewardImage = json['reward_image']; | ||||
rewardText = json['reward_text']; | rewardText = json['reward_text']; | ||||
shareImage = json['share_image']; | shareImage = json['share_image']; | ||||
shareLink = json['share_link']; | |||||
shareMini = json['share_mini']; | |||||
editTemplate = GoodsShareTempEditorModel.fromJson( | editTemplate = GoodsShareTempEditorModel.fromJson( | ||||
Map<String, dynamic>.from(json['edit_template'])); | Map<String, dynamic>.from(json['edit_template'])); | ||||
} | } | ||||
@@ -44,9 +48,9 @@ class GoodsShareStyleModel { | |||||
data['un_choose_image'] = this.unChooseImage; | data['un_choose_image'] = this.unChooseImage; | ||||
data['reward_image'] = this.rewardImage; | data['reward_image'] = this.rewardImage; | ||||
data['reward_text'] = this.rewardText; | data['reward_text'] = this.rewardText; | ||||
if (this.shareImage != null) { | |||||
data['share_image'] = this.shareImage; | |||||
} | |||||
data['share_image'] = this.shareImage; | |||||
data['share_link'] = this.shareLink; | |||||
data['share_mini'] = this.shareMini; | |||||
if (this.editTemplate != null) { | if (this.editTemplate != null) { | ||||
data['edit_template'] = this.editTemplate.toJson(); | data['edit_template'] = this.editTemplate.toJson(); | ||||
} | } | ||||
@@ -1,5 +1,7 @@ | |||||
import 'package:cached_network_image/cached_network_image.dart'; | |||||
import 'package:flutter/material.dart'; | import 'package:flutter/material.dart'; | ||||
import 'package:zhiying_base_widget/widgets/public/custom_button/custom_button_model.dart'; | import 'package:zhiying_base_widget/widgets/public/custom_button/custom_button_model.dart'; | ||||
import 'package:zhiying_comm/zhiying_comm.dart'; | |||||
class CustomButton extends StatelessWidget { | class CustomButton extends StatelessWidget { | ||||
final CustomButtonModel style; | final CustomButtonModel style; | ||||
@@ -9,10 +11,36 @@ class CustomButton extends StatelessWidget { | |||||
@override | @override | ||||
Widget build(BuildContext context) { | Widget build(BuildContext context) { | ||||
var decoration = BoxDecoration( | |||||
color: HexColor.fromHex(style.bgColor ?? ''), | |||||
borderRadius: BorderRadius.circular(50)); | |||||
if (style.bgType == 'image') { | |||||
decoration = BoxDecoration( | |||||
image: DecorationImage( | |||||
image: CachedNetworkImageProvider(style.bgImage ?? ''), | |||||
fit: BoxFit.cover), | |||||
borderRadius: BorderRadius.circular(50)); | |||||
} | |||||
return GestureDetector( | return GestureDetector( | ||||
child: Container( | child: Container( | ||||
width: double.infinity, | width: double.infinity, | ||||
height: double.infinity, | height: double.infinity, | ||||
decoration: decoration, | |||||
child: Center( | |||||
child: Row( | |||||
crossAxisAlignment: CrossAxisAlignment.center, | |||||
mainAxisAlignment: MainAxisAlignment.center, | |||||
children: <Widget>[ | |||||
Text( | |||||
style.name, | |||||
style: TextStyle( | |||||
color: HexColor.fromHex(style.textColor ?? ''), | |||||
fontSize: 14, | |||||
), | |||||
) | |||||
], | |||||
), | |||||
), | |||||
), | ), | ||||
onTap: onClick, | onTap: onClick, | ||||
); | ); | ||||