@@ -379,6 +379,12 @@ | |||||
"packageUri": "lib/", | "packageUri": "lib/", | ||||
"languageVersion": "2.1" | "languageVersion": "2.1" | ||||
}, | }, | ||||
{ | |||||
"name": "share_extend", | |||||
"rootUri": "file:///Users/fnuser/.pub-cache/hosted/pub.flutter-io.cn/share_extend-1.1.9", | |||||
"packageUri": "lib/", | |||||
"languageVersion": "2.0" | |||||
}, | |||||
{ | { | ||||
"name": "shared_preferences", | "name": "shared_preferences", | ||||
"rootUri": "file:///Users/fnuser/.pub-cache/hosted/pub.flutter-io.cn/shared_preferences-0.5.12", | "rootUri": "file:///Users/fnuser/.pub-cache/hosted/pub.flutter-io.cn/shared_preferences-0.5.12", | ||||
@@ -590,7 +596,7 @@ | |||||
"languageVersion": "2.1" | "languageVersion": "2.1" | ||||
} | } | ||||
], | ], | ||||
"generated": "2020-09-28T02:48:13.803350Z", | |||||
"generated": "2020-09-29T06:14:15.252464Z", | |||||
"generator": "pub", | "generator": "pub", | ||||
"generatorVersion": "2.7.2" | "generatorVersion": "2.7.2" | ||||
} | } |
@@ -103,6 +103,8 @@ PODS: | |||||
- save_image (0.0.1): | - save_image (0.0.1): | ||||
- Flutter | - Flutter | ||||
- securityGuard (5.4.191) | - securityGuard (5.4.191) | ||||
- share_extend (0.0.1): | |||||
- Flutter | |||||
- shared_preferences (0.0.1): | - shared_preferences (0.0.1): | ||||
- Flutter | - Flutter | ||||
- shared_preferences_linux (0.0.1): | - shared_preferences_linux (0.0.1): | ||||
@@ -184,6 +186,7 @@ DEPENDENCIES: | |||||
- path_provider_macos (from `.symlinks/plugins/path_provider_macos/ios`) | - path_provider_macos (from `.symlinks/plugins/path_provider_macos/ios`) | ||||
- path_provider_windows (from `.symlinks/plugins/path_provider_windows/ios`) | - path_provider_windows (from `.symlinks/plugins/path_provider_windows/ios`) | ||||
- save_image (from `.symlinks/plugins/save_image/ios`) | - save_image (from `.symlinks/plugins/save_image/ios`) | ||||
- share_extend (from `.symlinks/plugins/share_extend/ios`) | |||||
- shared_preferences (from `.symlinks/plugins/shared_preferences/ios`) | - shared_preferences (from `.symlinks/plugins/shared_preferences/ios`) | ||||
- shared_preferences_linux (from `.symlinks/plugins/shared_preferences_linux/ios`) | - shared_preferences_linux (from `.symlinks/plugins/shared_preferences_linux/ios`) | ||||
- shared_preferences_macos (from `.symlinks/plugins/shared_preferences_macos/ios`) | - shared_preferences_macos (from `.symlinks/plugins/shared_preferences_macos/ios`) | ||||
@@ -255,6 +258,8 @@ EXTERNAL SOURCES: | |||||
:path: ".symlinks/plugins/path_provider_windows/ios" | :path: ".symlinks/plugins/path_provider_windows/ios" | ||||
save_image: | save_image: | ||||
:path: ".symlinks/plugins/save_image/ios" | :path: ".symlinks/plugins/save_image/ios" | ||||
share_extend: | |||||
:path: ".symlinks/plugins/share_extend/ios" | |||||
shared_preferences: | shared_preferences: | ||||
:path: ".symlinks/plugins/shared_preferences/ios" | :path: ".symlinks/plugins/shared_preferences/ios" | ||||
shared_preferences_linux: | shared_preferences_linux: | ||||
@@ -315,6 +320,7 @@ SPEC CHECKSUMS: | |||||
Reachability: 33e18b67625424e47b6cde6d202dce689ad7af96 | Reachability: 33e18b67625424e47b6cde6d202dce689ad7af96 | ||||
save_image: 1d4bdcb69832f573215c0e2971fe9e572dfc1c84 | save_image: 1d4bdcb69832f573215c0e2971fe9e572dfc1c84 | ||||
securityGuard: 9c04c44a3b663f36e15064042abfc107fa07133c | securityGuard: 9c04c44a3b663f36e15064042abfc107fa07133c | ||||
share_extend: b6748dc53695587891126a89533b862b92548c7b | |||||
shared_preferences: af6bfa751691cdc24be3045c43ec037377ada40d | shared_preferences: af6bfa751691cdc24be3045c43ec037377ada40d | ||||
shared_preferences_linux: afefbfe8d921e207f01ede8b60373d9e3b566b78 | shared_preferences_linux: afefbfe8d921e207f01ede8b60373d9e3b566b78 | ||||
shared_preferences_macos: f3f29b71ccbb56bf40c9dd6396c9acf15e214087 | shared_preferences_macos: f3f29b71ccbb56bf40c9dd6396c9acf15e214087 | ||||
@@ -0,0 +1,41 @@ | |||||
import 'dart:async'; | |||||
import 'package:zhiying_comm/util/base_bloc.dart'; | |||||
import 'package:zhiying_comm/zhiying_comm.dart'; | |||||
class GoodsShareBloc extends BlocBase { | |||||
List<Map<String, dynamic>> _tabs; | |||||
StreamController<List<Map<String, dynamic>>> _tabController = | |||||
StreamController<List<Map<String, dynamic>>>(); | |||||
Stream<List<Map<String, dynamic>>> get outData => _tabController.stream; | |||||
@override | |||||
void dispose() { | |||||
_tabController.close(); | |||||
_tabController = null; | |||||
} | |||||
void loadData(String shopType) async { | |||||
NetUtil.request( | |||||
'/api/v1/mod/pub.flutter.share?share_type=${shopType.toString()}', | |||||
method: NetMethod.GET, onCache: (data) { | |||||
_loadData(data); | |||||
}, onSuccess: (data) { | |||||
_loadData(data); | |||||
}); | |||||
} | |||||
void _loadData(dynamic data) { | |||||
try { | |||||
List list = Map<String, dynamic>.from(data)['mod_list']; | |||||
_tabs = list.map((item) { | |||||
return Map<String, dynamic>.from(item); | |||||
}).toList(); | |||||
_tabController.add(_tabs); | |||||
} catch (err) { | |||||
Logger.error(err); | |||||
} | |||||
} | |||||
} |
@@ -1,45 +1,199 @@ | |||||
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: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_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_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/share/models/share_data_model.dart'; | |||||
import 'package:zhiying_base_widget/widgets/share/share_alert.dart'; | |||||
class GoodsShareImage extends StatefulWidget { | class GoodsShareImage extends StatefulWidget { | ||||
final Map<String, dynamic> model; | |||||
const GoodsShareImage(this.model, {Key key}) : super(key: key); | |||||
@override | @override | ||||
_GoodsShareImageState createState() => _GoodsShareImageState(); | _GoodsShareImageState createState() => _GoodsShareImageState(); | ||||
} | } | ||||
class _GoodsShareImageState extends State<GoodsShareImage> { | class _GoodsShareImageState extends State<GoodsShareImage> { | ||||
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(top: 10), | |||||
child: SingleChildScrollView( | |||||
child: Column( | |||||
crossAxisAlignment: CrossAxisAlignment.start, | |||||
mainAxisAlignment: MainAxisAlignment.start, | |||||
widgets.clear(); | |||||
widgets.add(GoodsShareItem( | |||||
imgHeader: _style.cssList.headerImage, | |||||
imgCheck: _style.cssList.unChooseImage, | |||||
imgCheckSelected: _style.cssList.chooseImage, | |||||
child: GoodsShareEdit( | |||||
_style.content, | |||||
onCopyClick: () { | |||||
Fluttertoast.showToast(msg: '复制成功'); | |||||
}, | |||||
onEditorClick: () { | |||||
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), | |||||
), | |||||
); | |||||
} | |||||
for (int index = 0; index < _style.customImage.length; index++) { | |||||
String image = _style.customImage[index]; | |||||
// 分享图片 | |||||
widgets.add( | |||||
GoodsShareItem( | |||||
imgHeader: _style.cssList.headerImage, | |||||
imgCheck: _style.cssList.unChooseImage, | |||||
imgCheckSelected: _style.cssList.chooseImage, | |||||
enabled: true, | |||||
child: GoodsShareImageWidget(image), | |||||
onSelected: (isSelected) { | |||||
if (_images.containsKey(index)) { | |||||
_images.remove(index); | |||||
} else { | |||||
_images[index] = image; | |||||
} | |||||
}, | |||||
), | |||||
); | |||||
} | |||||
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() { | |||||
return SafeArea( | |||||
child: Container( | |||||
margin: EdgeInsets.only(left: 12.5, right: 12.5, top: 4, bottom: 4), | |||||
child: Row( | |||||
children: <Widget>[ | children: <Widget>[ | ||||
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', | |||||
onCopyClick: () { | |||||
Fluttertoast.showToast(msg: '复制成功'); | |||||
}, | |||||
onEditorClick: () { | |||||
Navigator.push( | |||||
context, | |||||
MaterialPageRoute( | |||||
builder: (context) => GoodsShareEditor())); | |||||
}, | |||||
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), | |||||
), | |||||
), | ), | ||||
), | ), | ||||
GoodsShareItem( | |||||
child: GoodsShareMessage('点击编辑模板可以自定义分享文案哦😄😄'), | |||||
Expanded( | |||||
child: GestureDetector( | |||||
child: Container( | |||||
margin: EdgeInsets.only(left: 5), | |||||
// width: 95, | |||||
height: 36, | |||||
decoration: BoxDecoration( | |||||
color: Colors.amber, | |||||
borderRadius: BorderRadius.circular(18), | |||||
), | |||||
child: Center( | |||||
child: Text( | |||||
'分享选中素材', | |||||
style: TextStyle(color: Colors.white), | |||||
), | |||||
), | |||||
), | |||||
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(), | |||||
), | |||||
); | |||||
} | |||||
} | } |
@@ -0,0 +1,134 @@ | |||||
import 'package:zhiying_base_widget/pages/goods_share_page/models/goods_share_style_model.dart'; | |||||
import 'package:zhiying_base_widget/pages/goods_share_page/models/goods_share_temp_model.dart'; | |||||
class GoodsShareImageModel { | |||||
String content; | |||||
String format; | |||||
String templateId; | |||||
List<GoodsShareTempModel> showFunList; | |||||
String isEditTemplate; | |||||
List<String> customContent; | |||||
List<String> customImage; | |||||
GoodsShareStyleModel cssList; | |||||
GoodsShareImageModel( | |||||
{this.content, | |||||
this.format, | |||||
this.templateId, | |||||
this.showFunList, | |||||
this.isEditTemplate, | |||||
this.customContent, | |||||
this.customImage, | |||||
this.cssList}); | |||||
GoodsShareImageModel.fromJson(Map<String, dynamic> json) { | |||||
content = json['content']; | |||||
format = json['format']; | |||||
templateId = json['template_id']; | |||||
if (json['show_fun_list'] != null) { | |||||
showFunList = new List<GoodsShareTempModel>(); | |||||
json['show_fun_list'].forEach((v) { | |||||
showFunList.add( | |||||
new GoodsShareTempModel.fromJson(Map<String, dynamic>.from(v))); | |||||
}); | |||||
} | |||||
isEditTemplate = json['is_edit_template']; | |||||
customContent = json['custom_content'].cast<String>(); | |||||
customImage = json['custom_image'].cast<String>(); | |||||
cssList = json['css_list'] != null | |||||
? new GoodsShareStyleModel.fromJson(json['css_list']) | |||||
: null; | |||||
} | |||||
Map<String, dynamic> toJson() { | |||||
final Map<String, dynamic> data = new Map<String, dynamic>(); | |||||
data['content'] = this.content; | |||||
data['format'] = this.format; | |||||
data['template_id'] = this.templateId; | |||||
if (this.showFunList != null) { | |||||
data['show_fun_list'] = this.showFunList.map((v) => v.toJson()).toList(); | |||||
} | |||||
data['is_edit_template'] = this.isEditTemplate; | |||||
data['custom_content'] = this.customContent; | |||||
data['custom_image'] = this.customImage; | |||||
if (this.cssList != null) { | |||||
data['css_list'] = this.cssList.toJson(); | |||||
} | |||||
return data; | |||||
} | |||||
} | |||||
class ShareImage { | |||||
CopyBtn copyBtn; | |||||
CopyBtn saveBtn; | |||||
CopyBtn shareBtn; | |||||
ShareImage({this.copyBtn, this.saveBtn, this.shareBtn}); | |||||
ShareImage.fromJson(Map<String, dynamic> json) { | |||||
copyBtn = json['copy_btn'] != null | |||||
? new CopyBtn.fromJson(json['copy_btn']) | |||||
: null; | |||||
saveBtn = json['save_btn'] != null | |||||
? new CopyBtn.fromJson(json['save_btn']) | |||||
: null; | |||||
shareBtn = json['share_btn'] != null | |||||
? new CopyBtn.fromJson(json['share_btn']) | |||||
: null; | |||||
} | |||||
Map<String, dynamic> toJson() { | |||||
final Map<String, dynamic> data = new Map<String, dynamic>(); | |||||
if (this.copyBtn != null) { | |||||
data['copy_btn'] = this.copyBtn.toJson(); | |||||
} | |||||
if (this.saveBtn != null) { | |||||
data['save_btn'] = this.saveBtn.toJson(); | |||||
} | |||||
if (this.shareBtn != null) { | |||||
data['share_btn'] = this.shareBtn.toJson(); | |||||
} | |||||
return data; | |||||
} | |||||
} | |||||
class CopyBtn { | |||||
String name; | |||||
String modName; | |||||
String bgType; | |||||
String bgColor; | |||||
String bgImage; | |||||
String textColor; | |||||
String smallIcon; | |||||
CopyBtn( | |||||
{this.name, | |||||
this.modName, | |||||
this.bgType, | |||||
this.bgColor, | |||||
this.bgImage, | |||||
this.textColor, | |||||
this.smallIcon}); | |||||
CopyBtn.fromJson(Map<String, dynamic> json) { | |||||
name = json['name']; | |||||
modName = json['mod_name']; | |||||
bgType = json['bg_type']; | |||||
bgColor = json['bg_color']; | |||||
bgImage = json['bg_image']; | |||||
textColor = json['text_color']; | |||||
smallIcon = json['small_icon']; | |||||
} | |||||
Map<String, dynamic> toJson() { | |||||
final Map<String, dynamic> data = new Map<String, dynamic>(); | |||||
data['name'] = this.name; | |||||
data['mod_name'] = this.modName; | |||||
data['bg_type'] = this.bgType; | |||||
data['bg_color'] = this.bgColor; | |||||
data['bg_image'] = this.bgImage; | |||||
data['text_color'] = this.textColor; | |||||
data['small_icon'] = this.smallIcon; | |||||
return data; | |||||
} | |||||
} |
@@ -5,6 +5,10 @@ import 'package:zhiying_base_widget/pages/goods_share_page/widgets/goods_share_i | |||||
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'; | ||||
class GoodsShareLink extends StatefulWidget { | class GoodsShareLink extends StatefulWidget { | ||||
final Map<String, dynamic> model; | |||||
const GoodsShareLink(this.model, {Key key}) : super(key: key); | |||||
@override | @override | ||||
_GoodsShareLinkState createState() => _GoodsShareLinkState(); | _GoodsShareLinkState createState() => _GoodsShareLinkState(); | ||||
} | } | ||||
@@ -13,7 +17,12 @@ class _GoodsShareLinkState extends State<GoodsShareLink> { | |||||
@override | @override | ||||
Widget build(BuildContext context) { | Widget build(BuildContext context) { | ||||
return Container( | return Container( | ||||
margin: EdgeInsets.only(top: 10), | |||||
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: SingleChildScrollView( | ||||
child: Column( | child: Column( | ||||
crossAxisAlignment: CrossAxisAlignment.start, | crossAxisAlignment: CrossAxisAlignment.start, | ||||
@@ -3,6 +3,10 @@ import 'package:zhiying_base_widget/pages/goods_share_page/widgets/goods_share_i | |||||
import 'package:zhiying_base_widget/pages/goods_share_page/widgets/goods_share_miniprogram_widget.dart'; | import 'package:zhiying_base_widget/pages/goods_share_page/widgets/goods_share_miniprogram_widget.dart'; | ||||
class GoodsShareMiniprogram extends StatefulWidget { | class GoodsShareMiniprogram extends StatefulWidget { | ||||
final Map<String, dynamic> model; | |||||
const GoodsShareMiniprogram(this.model, {Key key}) : super(key: key); | |||||
@override | @override | ||||
_GoodsShareMiniprogramState createState() => _GoodsShareMiniprogramState(); | _GoodsShareMiniprogramState createState() => _GoodsShareMiniprogramState(); | ||||
} | } | ||||
@@ -11,7 +15,12 @@ class _GoodsShareMiniprogramState extends State<GoodsShareMiniprogram> { | |||||
@override | @override | ||||
Widget build(BuildContext context) { | Widget build(BuildContext context) { | ||||
return Container( | return Container( | ||||
margin: EdgeInsets.only(top: 10), | |||||
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: SingleChildScrollView( | ||||
child: Column( | child: Column( | ||||
crossAxisAlignment: CrossAxisAlignment.start, | crossAxisAlignment: CrossAxisAlignment.start, | ||||
@@ -1,37 +1,51 @@ | |||||
import 'package:flutter/cupertino.dart'; | import 'package:flutter/cupertino.dart'; | ||||
import 'package:flutter/material.dart'; | import 'package:flutter/material.dart'; | ||||
import 'package:zhiying_base_widget/pages/goods_share_page/goods_share_bloc.dart'; | |||||
import 'package:zhiying_base_widget/pages/goods_share_page/goods_share_image/goods_share_image.dart'; | import 'package:zhiying_base_widget/pages/goods_share_page/goods_share_image/goods_share_image.dart'; | ||||
import 'package:zhiying_base_widget/pages/goods_share_page/goods_share_link/goods_share_link.dart'; | import 'package:zhiying_base_widget/pages/goods_share_page/goods_share_link/goods_share_link.dart'; | ||||
import 'package:zhiying_base_widget/pages/goods_share_page/goods_share_miniprogram/goods_share_miniprogram.dart'; | import 'package:zhiying_base_widget/pages/goods_share_page/goods_share_miniprogram/goods_share_miniprogram.dart'; | ||||
import 'package:zhiying_base_widget/pages/goods_share_page/widgets/goods_share_alert_content.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_comm/util/base_bloc.dart'; | |||||
import 'package:zhiying_comm/zhiying_comm.dart'; | import 'package:zhiying_comm/zhiying_comm.dart'; | ||||
class GoodsSharePage extends StatefulWidget { | class GoodsSharePage extends StatefulWidget { | ||||
final Map<String, dynamic> model; | |||||
const GoodsSharePage(this.model, {Key key}) : super(key: key); | |||||
@override | @override | ||||
_GoodsSharePageState createState() => _GoodsSharePageState(); | _GoodsSharePageState createState() => _GoodsSharePageState(); | ||||
} | } | ||||
class _GoodsSharePageState extends State<GoodsSharePage> | |||||
class _GoodsSharePageState extends State<GoodsSharePage> { | |||||
@override | |||||
Widget build(BuildContext context) { | |||||
return BlocProvider<GoodsShareBloc>( | |||||
bloc: GoodsShareBloc(), | |||||
child: _GoodsShareContainer(widget.model), | |||||
); | |||||
} | |||||
} | |||||
class _GoodsShareContainer extends StatefulWidget { | |||||
final Map<String, dynamic> model; | |||||
const _GoodsShareContainer(this.model, {Key key}) : super(key: key); | |||||
@override | |||||
_GoodsShareContainerState createState() => _GoodsShareContainerState(); | |||||
} | |||||
class _GoodsShareContainerState extends State<_GoodsShareContainer> | |||||
with TickerProviderStateMixin { | with TickerProviderStateMixin { | ||||
GoodsShareBloc _bloc; | |||||
TabController _tabController; | TabController _tabController; | ||||
List<Widget> _tabs; | |||||
List<Widget> _contents; | |||||
List<Widget> _tabs = []; | |||||
List<Widget> _contents = []; | |||||
@override | @override | ||||
void initState() { | void initState() { | ||||
_tabController = TabController(length: 3, vsync: this); | |||||
_tabs = [ | |||||
_createTabItem('分享图文'), | |||||
_createTabItem('分享链接'), | |||||
_createTabItem('分享小程序'), | |||||
]; | |||||
_contents = [ | |||||
GoodsShareImage(), | |||||
GoodsShareLink(), | |||||
GoodsShareMiniprogram(), | |||||
]; | |||||
_bloc = BlocProvider.of<GoodsShareBloc>(context); | |||||
_bloc.loadData('taobao'); | |||||
super.initState(); | super.initState(); | ||||
} | } | ||||
@@ -40,12 +54,36 @@ class _GoodsSharePageState extends State<GoodsSharePage> | |||||
return Scaffold( | return Scaffold( | ||||
backgroundColor: Color(0xfff8f8f8), | backgroundColor: Color(0xfff8f8f8), | ||||
appBar: _createNav(), | appBar: _createNav(), | ||||
body: Column( | |||||
children: <Widget>[ | |||||
_createCommission(), | |||||
Expanded(child: _createContent()), | |||||
_createBottom(), | |||||
], | |||||
body: StreamBuilder<List<Map<String, dynamic>>>( | |||||
stream: _bloc.outData, | |||||
builder: (BuildContext context, AsyncSnapshot snapshot) { | |||||
List<Map<String, dynamic>> list = snapshot.data; | |||||
if (list == null || list.length == 0) { | |||||
return Container(); | |||||
} | |||||
_tabController = TabController(length: list.length, vsync: this); | |||||
_tabs.clear(); | |||||
_contents.clear(); | |||||
list.forEach((item) { | |||||
_tabs.add(_createTabItem(item['title'])); | |||||
String mod_name = item['mod_name']; | |||||
if (mod_name == 'share_goods_image.taobao') { | |||||
_contents.add(GoodsShareImage(item)); | |||||
} else if (mod_name == 'share_goods_link.taobao') { | |||||
_contents.add(GoodsShareLink(item)); | |||||
} else if (mod_name == 'share_goods_mini.taobao') { | |||||
_contents.add(GoodsShareMiniprogram(item)); | |||||
} | |||||
}); | |||||
return Column( | |||||
children: <Widget>[ | |||||
_createCommission(), | |||||
Expanded(child: SafeArea(child: _createContent())), | |||||
], | |||||
); | |||||
}, | |||||
), | ), | ||||
); | ); | ||||
} | } | ||||
@@ -122,12 +160,16 @@ class _GoodsSharePageState extends State<GoodsSharePage> | |||||
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), | ||||
width: double.infinity, | width: double.infinity, | ||||
height: double.infinity, | height: double.infinity, | ||||
decoration: BoxDecoration( | |||||
color: Colors.white, borderRadius: BorderRadius.circular(8)), | |||||
// decoration: BoxDecoration( | |||||
// color: Colors.white, borderRadius: BorderRadius.circular(8)), | |||||
child: Column( | child: Column( | ||||
children: <Widget>[ | children: <Widget>[ | ||||
Container( | Container( | ||||
height: 40, | height: 40, | ||||
decoration: BoxDecoration( | |||||
color: Colors.white, | |||||
borderRadius: BorderRadius.only( | |||||
topLeft: Radius.circular(8), topRight: Radius.circular(8))), | |||||
width: double.infinity, | width: double.infinity, | ||||
child: TabBar( | child: TabBar( | ||||
controller: _tabController, | controller: _tabController, | ||||
@@ -147,69 +189,6 @@ class _GoodsSharePageState extends State<GoodsSharePage> | |||||
); | ); | ||||
} | } | ||||
Widget _createBottom() { | |||||
return SafeArea( | |||||
child: Container( | |||||
margin: EdgeInsets.only(left: 12.5, right: 12.5, top: 4, bottom: 4), | |||||
child: Row( | |||||
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), | |||||
), | |||||
child: Center( | |||||
child: Text( | |||||
'分享选中素材', | |||||
style: TextStyle(color: Colors.white), | |||||
), | |||||
), | |||||
), | |||||
onTap: () { | |||||
_showShare(); | |||||
}, | |||||
), | |||||
), | |||||
], | |||||
), | |||||
), | |||||
); | |||||
} | |||||
Widget _createTabItem(String title, {bool isSelected = false}) { | Widget _createTabItem(String title, {bool isSelected = false}) { | ||||
return Text( | return Text( | ||||
title, | title, | ||||
@@ -220,19 +199,4 @@ class _GoodsSharePageState extends State<GoodsSharePage> | |||||
), | ), | ||||
); | ); | ||||
} | } | ||||
void _showShare() async { | |||||
showCupertinoModalPopup( | |||||
context: context, | |||||
builder: (context) => ShareAlert( | |||||
ShareDataModel( | |||||
title: 'title', | |||||
content: 'content', | |||||
image: | |||||
'https://img.alicdn.com/bao/uploaded/i1/2200818126974/O1CN01HvqWcg21O8mq9EPwf_!!0-item_pic.jpg_250x250.jpg', | |||||
url: 'http://www.hairuyi.com'), | |||||
child: GoodsShareAlertContent(), | |||||
), | |||||
); | |||||
} | |||||
} | } |
@@ -0,0 +1,55 @@ | |||||
import 'package:zhiying_base_widget/pages/goods_share_page/models/goods_share_temp_editor_model.dart'; | |||||
class GoodsShareStyleModel { | |||||
String unChooseColor; | |||||
String chooseColor; | |||||
String headerImage; | |||||
String chooseImage; | |||||
String unChooseImage; | |||||
String rewardImage; | |||||
String rewardText; | |||||
Map<String, dynamic> shareImage; | |||||
GoodsShareTempEditorModel editTemplate; | |||||
GoodsShareStyleModel( | |||||
{this.unChooseColor, | |||||
this.chooseColor, | |||||
this.headerImage, | |||||
this.chooseImage, | |||||
this.unChooseImage, | |||||
this.rewardImage, | |||||
this.rewardText, | |||||
this.shareImage, | |||||
this.editTemplate}); | |||||
GoodsShareStyleModel.fromJson(Map<String, dynamic> json) { | |||||
unChooseColor = json['un_choose_color']; | |||||
chooseColor = json['choose_color']; | |||||
headerImage = json['header_image']; | |||||
chooseImage = json['choose_image']; | |||||
unChooseImage = json['un_choose_image']; | |||||
rewardImage = json['reward_image']; | |||||
rewardText = json['reward_text']; | |||||
shareImage = json['share_image']; | |||||
editTemplate = GoodsShareTempEditorModel.fromJson( | |||||
Map<String, dynamic>.from(json['edit_template'])); | |||||
} | |||||
Map<String, dynamic> toJson() { | |||||
final Map<String, dynamic> data = new Map<String, dynamic>(); | |||||
data['un_choose_color'] = this.unChooseColor; | |||||
data['choose_color'] = this.chooseColor; | |||||
data['header_image'] = this.headerImage; | |||||
data['choose_image'] = this.chooseImage; | |||||
data['un_choose_image'] = this.unChooseImage; | |||||
data['reward_image'] = this.rewardImage; | |||||
data['reward_text'] = this.rewardText; | |||||
if (this.shareImage != null) { | |||||
data['share_image'] = this.shareImage; | |||||
} | |||||
if (this.editTemplate != null) { | |||||
data['edit_template'] = this.editTemplate.toJson(); | |||||
} | |||||
return data; | |||||
} | |||||
} |
@@ -0,0 +1,54 @@ | |||||
import 'package:zhiying_base_widget/widgets/public/custom_button/custom_button_model.dart'; | |||||
class GoodsShareTempEditorModel { | |||||
CustomButtonModel regainDefault; | |||||
CustomButtonModel saveTemplate1; | |||||
CustomButtonModel previewTemplate; | |||||
CustomButtonModel backEdit; | |||||
CustomButtonModel saveTemplate2; | |||||
GoodsShareTempEditorModel( | |||||
{this.regainDefault, | |||||
this.saveTemplate1, | |||||
this.previewTemplate, | |||||
this.backEdit, | |||||
this.saveTemplate2}); | |||||
GoodsShareTempEditorModel.fromJson(Map<String, dynamic> json) { | |||||
regainDefault = json['regain_default'] != null | |||||
? new CustomButtonModel.fromJson(json['regain_default']) | |||||
: null; | |||||
saveTemplate1 = json['save_template1'] != null | |||||
? new CustomButtonModel.fromJson(json['save_template1']) | |||||
: null; | |||||
previewTemplate = json['preview_template'] != null | |||||
? new CustomButtonModel.fromJson(json['preview_template']) | |||||
: null; | |||||
backEdit = json['back_edit'] != null | |||||
? new CustomButtonModel.fromJson(json['back_edit']) | |||||
: null; | |||||
saveTemplate2 = json['save_template2'] != null | |||||
? new CustomButtonModel.fromJson(json['save_template2']) | |||||
: null; | |||||
} | |||||
Map<String, dynamic> toJson() { | |||||
final Map<String, dynamic> data = new Map<String, dynamic>(); | |||||
if (this.regainDefault != null) { | |||||
data['regain_default'] = this.regainDefault.toJson(); | |||||
} | |||||
if (this.saveTemplate1 != null) { | |||||
data['save_template1'] = this.saveTemplate1.toJson(); | |||||
} | |||||
if (this.previewTemplate != null) { | |||||
data['preview_template'] = this.previewTemplate.toJson(); | |||||
} | |||||
if (this.backEdit != null) { | |||||
data['back_edit'] = this.backEdit.toJson(); | |||||
} | |||||
if (this.saveTemplate2 != null) { | |||||
data['save_template2'] = this.saveTemplate2.toJson(); | |||||
} | |||||
return data; | |||||
} | |||||
} |
@@ -0,0 +1,21 @@ | |||||
class GoodsShareTempModel { | |||||
String name; | |||||
String val; | |||||
String temp; | |||||
GoodsShareTempModel({this.name, this.val, this.temp}); | |||||
GoodsShareTempModel.fromJson(Map<String, dynamic> json) { | |||||
name = json['name']; | |||||
val = json['val']; | |||||
temp = json['temp']; | |||||
} | |||||
Map<String, dynamic> toJson() { | |||||
final Map<String, dynamic> data = new Map<String, dynamic>(); | |||||
data['name'] = this.name; | |||||
data['val'] = this.val; | |||||
data['temp'] = this.temp; | |||||
return data; | |||||
} | |||||
} |
@@ -0,0 +1,29 @@ | |||||
import 'package:cached_network_image/cached_network_image.dart'; | |||||
import 'package:flutter/material.dart'; | |||||
class GoodsShareImageWidget extends StatelessWidget { | |||||
final String imageUrl; | |||||
const GoodsShareImageWidget(this.imageUrl, {Key key}) : super(key: key); | |||||
@override | |||||
Widget build(BuildContext context) { | |||||
return Container( | |||||
margin: EdgeInsets.only(left: 10, right: 10), | |||||
padding: EdgeInsets.only(left: 16, top: 0, right: 16, bottom: 10), | |||||
// decoration: BoxDecoration( | |||||
// color: Color(0xfff8f8f8), borderRadius: BorderRadius.circular(10)), | |||||
width: double.infinity, | |||||
child: Align( | |||||
alignment: Alignment.topLeft, | |||||
child: Container( | |||||
width: 95, | |||||
child: CachedNetworkImage( | |||||
imageUrl: imageUrl ?? '', | |||||
fit: BoxFit.fitWidth, | |||||
), | |||||
), | |||||
), | |||||
); | |||||
} | |||||
} |
@@ -1,37 +1,82 @@ | |||||
import 'package:cached_network_image/cached_network_image.dart'; | |||||
import 'package:flutter/material.dart'; | import 'package:flutter/material.dart'; | ||||
class GoodsShareItem extends StatelessWidget { | |||||
class GoodsShareItem extends StatefulWidget { | |||||
final Widget child; | final Widget child; | ||||
final String imgHeader; | |||||
final String imgCheck; | |||||
final String imgCheckSelected; | |||||
final bool isSelected; | |||||
final bool enabled; | |||||
final ValueChanged<bool> onSelected; | |||||
const GoodsShareItem({Key key, this.child}) : super(key: key); | |||||
const GoodsShareItem({ | |||||
Key key, | |||||
this.imgHeader = '', | |||||
this.imgCheck = '', | |||||
this.imgCheckSelected = '', | |||||
this.isSelected = false, | |||||
this.enabled = true, | |||||
this.onSelected, | |||||
this.child, | |||||
}) : super(key: key); | |||||
@override | |||||
_GoodsShareItemState createState() => _GoodsShareItemState(); | |||||
} | |||||
class _GoodsShareItemState extends State<GoodsShareItem> { | |||||
bool _isSelected; | |||||
@override | |||||
void initState() { | |||||
_isSelected = widget.isSelected; | |||||
super.initState(); | |||||
} | |||||
@override | @override | ||||
Widget build(BuildContext context) { | Widget build(BuildContext context) { | ||||
return Container( | |||||
margin: EdgeInsets.only(left: 15, right: 15, top: 5, bottom: 5), | |||||
child: Row( | |||||
crossAxisAlignment: CrossAxisAlignment.start, | |||||
children: <Widget>[ | |||||
Container( | |||||
width: 36, | |||||
height: 36, | |||||
decoration: BoxDecoration( | |||||
color: Colors.red, | |||||
borderRadius: BorderRadius.circular(18), | |||||
return GestureDetector( | |||||
behavior: HitTestBehavior.opaque, | |||||
onTap: () { | |||||
setState(() { | |||||
_isSelected = !_isSelected; | |||||
}); | |||||
if (widget.onSelected != null) { | |||||
widget.onSelected(_isSelected); | |||||
} | |||||
}, | |||||
child: Container( | |||||
margin: EdgeInsets.only(left: 15, right: 15, top: 5, bottom: 5), | |||||
child: Row( | |||||
crossAxisAlignment: CrossAxisAlignment.start, | |||||
children: <Widget>[ | |||||
Container( | |||||
width: 36, | |||||
height: 36, | |||||
child: ClipRRect( | |||||
child: CachedNetworkImage( | |||||
imageUrl: widget.imgHeader, | |||||
), | |||||
borderRadius: BorderRadius.circular(18), | |||||
), | |||||
), | |||||
Expanded( | |||||
child: widget.child ?? Container(), | |||||
), | ), | ||||
), | |||||
Expanded( | |||||
child: child ?? Container(), | |||||
), | |||||
Container( | |||||
width: 18, | |||||
height: 18, | |||||
decoration: BoxDecoration( | |||||
color: Colors.red, | |||||
borderRadius: BorderRadius.circular(9), | |||||
Container( | |||||
width: 18, | |||||
height: 18, | |||||
child: Visibility( | |||||
visible: widget.enabled, | |||||
child: CachedNetworkImage( | |||||
imageUrl: | |||||
_isSelected ? widget.imgCheckSelected : widget.imgCheck, | |||||
), | |||||
), | |||||
), | ), | ||||
), | |||||
], | |||||
], | |||||
), | |||||
), | ), | ||||
); | ); | ||||
} | } | ||||
@@ -0,0 +1,9 @@ | |||||
class GoodsShareTempUtil { | |||||
String parseTemp(String temp, Map<String, String> values) { | |||||
values.forEach((key, value) { | |||||
temp.replaceAll(key, value); | |||||
}); | |||||
return temp; | |||||
} | |||||
} |
@@ -46,9 +46,9 @@ class _GooddsDetailsFooterContainerState | |||||
void _collectOnClick() {} | void _collectOnClick() {} | ||||
/// 分享 | /// 分享 | ||||
void _shareOnClick() { | |||||
Navigator.of(context) | |||||
.push(MaterialPageRoute(builder: (context) => GoodsSharePage())); | |||||
void _shareOnClick(GoodsDetailsFooterModel model) { | |||||
Navigator.of(context).push(MaterialPageRoute( | |||||
builder: (context) => GoodsSharePage(model.toJson()))); | |||||
} | } | ||||
/// 自购省 | /// 自购省 | ||||
@@ -150,7 +150,7 @@ class _GooddsDetailsFooterContainerState | |||||
/// 分享赚, | /// 分享赚, | ||||
Widget _getFxzButton(GoodsDetailsFooterModel model) { | Widget _getFxzButton(GoodsDetailsFooterModel model) { | ||||
return GestureDetector( | return GestureDetector( | ||||
onTap: () => _shareOnClick(), | |||||
onTap: () => _shareOnClick(model), | |||||
child: Container( | child: Container( | ||||
alignment: Alignment.center, | alignment: Alignment.center, | ||||
height: 44, | height: 44, | ||||
@@ -0,0 +1,20 @@ | |||||
import 'package:flutter/material.dart'; | |||||
import 'package:zhiying_base_widget/widgets/public/custom_button/custom_button_model.dart'; | |||||
class CustomButton extends StatelessWidget { | |||||
final CustomButtonModel style; | |||||
final VoidCallback onClick; | |||||
const CustomButton(this.style, {Key key, this.onClick}) : super(key: key); | |||||
@override | |||||
Widget build(BuildContext context) { | |||||
return GestureDetector( | |||||
child: Container( | |||||
width: double.infinity, | |||||
height: double.infinity, | |||||
), | |||||
onTap: onClick, | |||||
); | |||||
} | |||||
} |
@@ -0,0 +1,40 @@ | |||||
class CustomButtonModel { | |||||
String name; | |||||
String modName; | |||||
String bgType; | |||||
String bgColor; | |||||
String bgImage; | |||||
String textColor; | |||||
String smallIcon; | |||||
CustomButtonModel( | |||||
{this.name, | |||||
this.modName, | |||||
this.bgType, | |||||
this.bgColor, | |||||
this.bgImage, | |||||
this.textColor, | |||||
this.smallIcon}); | |||||
CustomButtonModel.fromJson(Map<String, dynamic> json) { | |||||
name = json['name']; | |||||
modName = json['mod_name']; | |||||
bgType = json['bg_type']; | |||||
bgColor = json['bg_color']; | |||||
bgImage = json['bg_image']; | |||||
textColor = json['text_color']; | |||||
smallIcon = json['small_icon']; | |||||
} | |||||
Map<String, dynamic> toJson() { | |||||
final Map<String, dynamic> data = new Map<String, dynamic>(); | |||||
data['name'] = this.name; | |||||
data['mod_name'] = this.modName; | |||||
data['bg_type'] = this.bgType; | |||||
data['bg_color'] = this.bgColor; | |||||
data['bg_image'] = this.bgImage; | |||||
data['text_color'] = this.textColor; | |||||
data['small_icon'] = this.smallIcon; | |||||
return data; | |||||
} | |||||
} |
@@ -5,6 +5,7 @@ import 'package:sharesdk_plugin/sharesdk_plugin.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/models/share_plateform.dart'; | import 'package:zhiying_base_widget/widgets/share/models/share_plateform.dart'; | ||||
import 'package:zhiying_comm/zhiying_comm.dart'; | import 'package:zhiying_comm/zhiying_comm.dart'; | ||||
import 'package:share_extend/share_extend.dart'; | |||||
class ShareAlert extends StatelessWidget { | class ShareAlert extends StatelessWidget { | ||||
final Widget child; | final Widget child; | ||||
@@ -77,7 +78,7 @@ class _ShareAlertContent extends StatelessWidget { | |||||
), | ), | ||||
Container( | Container( | ||||
margin: | margin: | ||||
EdgeInsets.only(left: 12, right: 12, top: 10, bottom: 10), | |||||
EdgeInsets.only(left: 12, right: 12, top: 10, bottom: 10), | |||||
child: _createIcons(), | child: _createIcons(), | ||||
), | ), | ||||
GestureDetector( | GestureDetector( | ||||
@@ -164,7 +165,7 @@ class _ShareAlertContent extends StatelessWidget { | |||||
null, | null, | ||||
null, | null, | ||||
null, | null, | ||||
SSDKContentTypes.audio, | |||||
SSDKContentTypes.auto, | |||||
); | ); | ||||
ShareSDKPlatform p = ShareSDKPlatforms.wechatSession; | ShareSDKPlatform p = ShareSDKPlatforms.wechatSession; | ||||
switch (plateform) { | switch (plateform) { | ||||
@@ -184,10 +185,29 @@ class _ShareAlertContent extends StatelessWidget { | |||||
p = ShareSDKPlatforms.sina; | p = ShareSDKPlatforms.sina; | ||||
break; | break; | ||||
} | } | ||||
if (model.image is List && (model.image as List).length > 1) { | |||||
// p = ShareSDKPlatforms.sina; | |||||
// Share.shareFiles(model.image); | |||||
ShareExtend.share( | |||||
"share text", "text"); | |||||
return; | |||||
} | |||||
SharesdkPlugin.share(p, params, (SSDKResponseState state, Map userdata, | SharesdkPlugin.share(p, params, (SSDKResponseState state, Map userdata, | ||||
Map contentEntity, SSDKError error) { | Map contentEntity, SSDKError error) { | ||||
Logger.debug('${state}, ${error.rawData}'); | Logger.debug('${state}, ${error.rawData}'); | ||||
}); | }); | ||||
} | } | ||||
// 多图分享 | |||||
_shareMultipleImages() async { | |||||
// List<Asset> assetList = await MultiImagePicker.pickImages(maxImages: 5); | |||||
// var imageList = List<String>(); | |||||
// for (var asset in assetList) { | |||||
// String path = | |||||
// await _writeByteToImageFile(await asset.getByteData(quality: 30)); | |||||
// imageList.add(path); | |||||
// } | |||||
// ShareExtend.shareMultiple(imageList, "image", subject: "share muti image"); | |||||
} | |||||
} | } |
@@ -26,6 +26,8 @@ dependencies: | |||||
ref: '1.2.3+1' | ref: '1.2.3+1' | ||||
# mob 分享sdk | # mob 分享sdk | ||||
sharesdk_plugin: ^1.2.8 | sharesdk_plugin: ^1.2.8 | ||||
# 系统分享 | |||||
share_extend: ^1.1.9 | |||||
dev_dependencies: | dev_dependencies: | ||||
flutter_test: | flutter_test: | ||||