@@ -602,7 +602,7 @@ | |||
"languageVersion": "2.1" | |||
} | |||
], | |||
"generated": "2020-09-29T09:19:18.536482Z", | |||
"generated": "2020-09-29T09:31:08.197502Z", | |||
"generator": "pub", | |||
"generatorVersion": "2.7.2" | |||
} |
@@ -27,8 +27,8 @@ | |||
// 获取设置 | |||
- (NSDictionary*)getSetting { | |||
return @{ | |||
@"domain": @"http://inapi.izhyin.cn" | |||
//@"domain": @"http://192.168.0.113:5000" | |||
//@"domain": @"http://inapi.izhyin.cn" | |||
@"domain": @"http://192.168.0.113:5000" | |||
}; | |||
} | |||
@@ -1,15 +1,21 @@ | |||
import 'dart:async'; | |||
import 'package:zhiying_base_widget/pages/goods_share_page/models/goods_share_temp_add_model.dart'; | |||
import 'package:zhiying_comm/util/base_bloc.dart'; | |||
import 'package:zhiying_comm/zhiying_comm.dart'; | |||
class GoodsShareData { | |||
List<Map<String, dynamic>> tabs; | |||
List<GoodsShareTempDataModel> datas; | |||
} | |||
class GoodsShareBloc extends BlocBase { | |||
List<Map<String, dynamic>> _tabs; | |||
GoodsShareData _data = GoodsShareData(); | |||
StreamController<List<Map<String, dynamic>>> _tabController = | |||
StreamController<List<Map<String, dynamic>>>(); | |||
StreamController<GoodsShareData> _tabController = | |||
StreamController<GoodsShareData>(); | |||
Stream<List<Map<String, dynamic>>> get outData => _tabController.stream; | |||
Stream<GoodsShareData> get outData => _tabController.stream; | |||
@override | |||
void dispose() { | |||
@@ -17,23 +23,33 @@ class GoodsShareBloc extends BlocBase { | |||
_tabController = null; | |||
} | |||
void loadData(String shopType) async { | |||
void loadData(String shopType, Map<String, dynamic> params) async { | |||
var json = await NetUtil.post('/api/v1/share/${shopType}', params: params); | |||
Map<String, dynamic> data = json['data']; | |||
List shareTemp = data['data_list']; | |||
_data.datas = shareTemp.map((item) { | |||
return GoodsShareTempDataModel.fromJson(Map<String, dynamic>.from(item)); | |||
}).toList(); | |||
NetUtil.request( | |||
'/api/v1/mod/pub.flutter.share?share_type=${shopType.toString()}', | |||
method: NetMethod.GET, onCache: (data) { | |||
_loadData(data); | |||
}, onSuccess: (data) { | |||
_loadData(data); | |||
}); | |||
'/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) { | |||
_data.tabs = list.map((item) { | |||
return Map<String, dynamic>.from(item); | |||
}).toList(); | |||
_tabController.add(_tabs); | |||
_tabController.add(_data); | |||
} catch (err) { | |||
Logger.error(err); | |||
} | |||
@@ -1,15 +1,20 @@ | |||
import 'dart:convert' as convert; | |||
import 'dart:io'; | |||
import 'dart:typed_data'; | |||
import 'package:flutter/cupertino.dart'; | |||
import 'package:flutter/material.dart'; | |||
import 'package:flutter/services.dart'; | |||
import 'package:fluttertoast/fluttertoast.dart'; | |||
import 'package:save_image/save_image.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/models/goods_share_temp_add_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/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_image.dart'; | |||
import 'package:zhiying_base_widget/pages/goods_share_page/widgets/goods_share_item.dart'; | |||
import 'package:zhiying_base_widget/utils/image_download_util/image_download_util.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'; | |||
@@ -17,8 +22,9 @@ import 'package:zhiying_base_widget/widgets/share/share_alert.dart'; | |||
class GoodsShareImage extends StatefulWidget { | |||
final Map<String, dynamic> model; | |||
final GoodsShareTempDataModel datas; | |||
const GoodsShareImage(this.model, {Key key}) : super(key: key); | |||
const GoodsShareImage(this.model, this.datas, {Key key}) : super(key: key); | |||
@override | |||
_GoodsShareImageState createState() => _GoodsShareImageState(); | |||
@@ -28,6 +34,7 @@ class _GoodsShareImageState extends State<GoodsShareImage> { | |||
GoodsShareImageModel _style; | |||
Map<int, String> _images = Map(); | |||
List<Widget> widgets = List(); | |||
String _content = ''; | |||
// 分享数据 | |||
final ShareDataModel _shareModel = ShareDataModel(); | |||
@@ -37,6 +44,7 @@ class _GoodsShareImageState extends State<GoodsShareImage> { | |||
String data = widget.model['data']; | |||
var d = convert.jsonDecode(data); | |||
_style = GoodsShareImageModel.fromJson(Map<String, dynamic>.from(d)); | |||
_content = widget.datas.shareContent; | |||
super.initState(); | |||
} | |||
@@ -48,9 +56,10 @@ class _GoodsShareImageState extends State<GoodsShareImage> { | |||
imgCheck: _style.cssList.unChooseImage, | |||
imgCheckSelected: _style.cssList.chooseImage, | |||
child: GoodsShareEdit( | |||
_style.content, | |||
_content, | |||
onCopyClick: () { | |||
Fluttertoast.showToast(msg: '复制成功'); | |||
Clipboard.setData(ClipboardData(text: _content)); | |||
Fluttertoast.showToast(msg: '文案已复制'); | |||
}, | |||
onEditorClick: () { | |||
Fluttertoast.showToast(msg: '正在开发中'); | |||
@@ -60,7 +69,7 @@ class _GoodsShareImageState extends State<GoodsShareImage> { | |||
}, | |||
), | |||
onSelected: (isSelected) { | |||
_shareModel.content = isSelected ? '' : _style.content; | |||
_shareModel.content = isSelected ? _content : ''; | |||
}, | |||
)); | |||
for (String message in _style.customContent) { | |||
@@ -137,23 +146,34 @@ class _GoodsShareImageState extends State<GoodsShareImage> { | |||
children: <Widget>[ | |||
btnCopy == null | |||
? Container() | |||
: Container( | |||
width: 95, | |||
height: 36, | |||
decoration: BoxDecoration( | |||
borderRadius: BorderRadius.circular(18), | |||
), | |||
child: CustomButton(btnCopy)), | |||
: GestureDetector( | |||
child: Container( | |||
width: 95, | |||
height: 36, | |||
decoration: BoxDecoration( | |||
borderRadius: BorderRadius.circular(18), | |||
), | |||
child: CustomButton(btnCopy)), | |||
onTap: () { | |||
Clipboard.setData(ClipboardData(text: _content)); | |||
Fluttertoast.showToast(msg: '文案已复制'); | |||
}, | |||
), | |||
btnSave == null | |||
? Container() | |||
: Container( | |||
margin: EdgeInsets.only(left: 5), | |||
width: 95, | |||
height: 36, | |||
decoration: BoxDecoration( | |||
borderRadius: BorderRadius.circular(18), | |||
: GestureDetector( | |||
child: Container( | |||
margin: EdgeInsets.only(left: 5), | |||
width: 95, | |||
height: 36, | |||
decoration: BoxDecoration( | |||
borderRadius: BorderRadius.circular(18), | |||
), | |||
child: CustomButton(btnSave), | |||
), | |||
child: CustomButton(btnSave), | |||
onTap: () { | |||
_saveImages(); | |||
}, | |||
), | |||
btnShare == null | |||
? Container() | |||
@@ -168,7 +188,7 @@ class _GoodsShareImageState extends State<GoodsShareImage> { | |||
), | |||
child: CustomButton(btnShare)), | |||
onTap: () { | |||
_showShare(); | |||
_showShareAlert(); | |||
}, | |||
), | |||
), | |||
@@ -178,21 +198,64 @@ class _GoodsShareImageState extends State<GoodsShareImage> { | |||
); | |||
} | |||
void _showShare() async { | |||
void _saveImages() 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) { | |||
if (images.length > 0) { | |||
_shareModel.image = images; | |||
} else { | |||
_shareModel.image = null; | |||
} | |||
if ((_shareModel.image == null || _shareModel.image.length == 0)) { | |||
Fluttertoast.showToast(msg: '请选择要保存的图片'); | |||
return; | |||
} | |||
List<String> paths = await ImageDownloadUtil.download(images); | |||
paths.forEach((path) async { | |||
Uint8List data = File(path).readAsBytesSync(); | |||
bool isSaveSuccess = await SaveImage.save(imageBytes: data); | |||
if (!isSaveSuccess) { | |||
Fluttertoast.showToast(msg: '保存失败'); | |||
return; | |||
} | |||
}); | |||
Fluttertoast.showToast(msg: '保存成功'); | |||
} | |||
// 弹出分享框 | |||
void _showShareAlert() 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; | |||
} else { | |||
_shareModel.image = null; | |||
} | |||
if ((_shareModel.title == null || _shareModel.title == '') && | |||
(_shareModel.image == null || _shareModel.image.length == 0) && | |||
(_shareModel.content == null || _shareModel.content == '') && | |||
(_shareModel.url == null || _shareModel.url == '')) { | |||
Fluttertoast.showToast(msg: '请选择要分享的内容'); | |||
return; | |||
} | |||
showCupertinoModalPopup( | |||
context: context, | |||
builder: (context) => ShareAlert( | |||
_shareModel, | |||
child: GoodsShareAlertContent(), | |||
'pub.flutter.share_icon', | |||
// child: GoodsShareAlertContent(), | |||
), | |||
); | |||
} | |||
@@ -5,6 +5,7 @@ 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/models/goods_share_temp_add_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/goods_share_alert_content.dart'; | |||
import 'package:zhiying_base_widget/pages/goods_share_page/widgets/goods_share_edit.dart'; | |||
@@ -18,7 +19,9 @@ import 'package:zhiying_base_widget/widgets/share/share_alert.dart'; | |||
class GoodsShareLink extends StatefulWidget { | |||
final Map<String, dynamic> model; | |||
const GoodsShareLink(this.model, {Key key}) : super(key: key); | |||
final GoodsShareTempDataModel datas; | |||
const GoodsShareLink(this.model, this.datas, {Key key}) : super(key: key); | |||
@override | |||
_GoodsShareLinkState createState() => _GoodsShareLinkState(); | |||
@@ -172,6 +175,7 @@ class _GoodsShareLinkState extends State<GoodsShareLink> { | |||
context: context, | |||
builder: (context) => ShareAlert( | |||
_shareModel, | |||
'', | |||
child: GoodsShareAlertContent(), | |||
), | |||
); | |||
@@ -1,11 +1,15 @@ | |||
import 'package:flutter/material.dart'; | |||
import 'package:zhiying_base_widget/pages/goods_share_page/models/goods_share_temp_add_model.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_miniprogram_widget.dart'; | |||
class GoodsShareMiniprogram extends StatefulWidget { | |||
final Map<String, dynamic> model; | |||
const GoodsShareMiniprogram(this.model, {Key key}) : super(key: key); | |||
final GoodsShareTempDataModel datas; | |||
const GoodsShareMiniprogram(this.model, this.datas, {Key key}) | |||
: super(key: key); | |||
@override | |||
_GoodsShareMiniprogramState createState() => _GoodsShareMiniprogramState(); | |||
@@ -1,9 +1,12 @@ | |||
import 'dart:convert' as convert; | |||
import 'package:flutter/cupertino.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_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/models/goods_share_temp_add_model.dart'; | |||
import 'package:zhiying_comm/util/base_bloc.dart'; | |||
import 'package:zhiying_comm/zhiying_comm.dart'; | |||
@@ -44,8 +47,12 @@ class _GoodsShareContainerState extends State<_GoodsShareContainer> | |||
@override | |||
void initState() { | |||
String d = widget.model['data']; | |||
Map<String, dynamic> data = | |||
Map<String, dynamic>.from(convert.jsonDecode(d)); | |||
Logger.debug(data['share_url_args'].toString()); | |||
_bloc = BlocProvider.of<GoodsShareBloc>(context); | |||
_bloc.loadData('taobao'); | |||
_bloc.loadData('taobao', data['share_url_args']); | |||
super.initState(); | |||
} | |||
@@ -54,30 +61,37 @@ class _GoodsShareContainerState extends State<_GoodsShareContainer> | |||
return Scaffold( | |||
backgroundColor: Color(0xfff8f8f8), | |||
appBar: _createNav(), | |||
body: StreamBuilder<List<Map<String, dynamic>>>( | |||
body: StreamBuilder<GoodsShareData>( | |||
stream: _bloc.outData, | |||
builder: (BuildContext context, AsyncSnapshot snapshot) { | |||
List<Map<String, dynamic>> list = snapshot.data; | |||
if (list == null || list.length == 0) { | |||
GoodsShareData data = snapshot.data; | |||
List<Map<String, dynamic>> list = data?.tabs; | |||
List<GoodsShareTempDataModel> datas = data?.datas; | |||
if (list == null || | |||
list.length == 0 || | |||
datas == null || | |||
datas.length == 0) { | |||
return Container(); | |||
} | |||
_tabController = TabController(length: list.length, vsync: this); | |||
_tabs.clear(); | |||
_contents.clear(); | |||
list.forEach((item) { | |||
for (int i = 0; i < list.length && i < datas.length; i++) { | |||
Map<String, dynamic> item = list[i]; | |||
GoodsShareTempDataModel model = datas[i]; | |||
_tabs.add(_createTabItem(item['title'])); | |||
String mod_name = item['mod_name']; | |||
if (mod_name == 'share_goods_image.taobao') { | |||
_contents.add(GoodsShareImage(item)); | |||
_contents.add(GoodsShareImage(item, model)); | |||
} else if (mod_name == 'share_goods_link.taobao') { | |||
_contents.add(GoodsShareLink(item)); | |||
_contents.add(GoodsShareLink(item, model)); | |||
} else if (mod_name == 'share_goods_mini.taobao') { | |||
_contents.add(GoodsShareMiniprogram(item)); | |||
_contents.add(GoodsShareMiniprogram(item, model)); | |||
} else { | |||
_contents.add(Container()); | |||
} | |||
}); | |||
} | |||
return Column( | |||
children: <Widget>[ | |||
@@ -0,0 +1,62 @@ | |||
class GoodsShareTempDataModel { | |||
String shareContent; | |||
List<GoodsShareTempAddModel> shareTemplate; | |||
String shareTip; | |||
String appUrl; | |||
String miniAppUrl; | |||
GoodsShareTempDataModel( | |||
{this.shareContent, | |||
this.shareTemplate, | |||
this.shareTip, | |||
this.appUrl, | |||
this.miniAppUrl}); | |||
GoodsShareTempDataModel.fromJson(Map<String, dynamic> json) { | |||
shareContent = json['share_content']; | |||
if (json['share_template'] != null) { | |||
shareTemplate = new List<GoodsShareTempAddModel>(); | |||
json['share_template'].forEach((v) { | |||
shareTemplate.add(new GoodsShareTempAddModel.fromJson(v)); | |||
}); | |||
} | |||
shareTip = json['share_tip']; | |||
appUrl = json['app_url']; | |||
miniAppUrl = json['mini_app_url']; | |||
} | |||
Map<String, dynamic> toJson() { | |||
final Map<String, dynamic> data = new Map<String, dynamic>(); | |||
data['share_content'] = this.shareContent; | |||
if (this.shareTemplate != null) { | |||
data['share_template'] = | |||
this.shareTemplate.map((v) => v.toJson()).toList(); | |||
} | |||
data['share_tip'] = this.shareTip; | |||
data['app_url'] = this.appUrl; | |||
data['mini_app_url'] = this.miniAppUrl; | |||
return data; | |||
} | |||
} | |||
class GoodsShareTempAddModel { | |||
String name; | |||
String val; | |||
String temp; | |||
GoodsShareTempAddModel({this.name, this.val, this.temp}); | |||
GoodsShareTempAddModel.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; | |||
} | |||
} |
@@ -5,6 +5,9 @@ class GoodsShareEdit extends StatelessWidget { | |||
final VoidCallback onEditorClick; | |||
final VoidCallback onCopyClick; | |||
// final String imgCheck; | |||
// final String imgCheckSelected; | |||
const GoodsShareEdit(this.message, | |||
{Key key, this.onEditorClick, this.onCopyClick}) | |||
: super(key: key); | |||
@@ -1,6 +1,12 @@ | |||
import 'dart:convert'; | |||
import 'package:cached_network_image/cached_network_image.dart'; | |||
import 'package:flutter/material.dart'; | |||
import 'package:flutter_alibc/alibc_model.dart'; | |||
import 'package:flutter_alibc/flutter_alibc.dart'; | |||
import 'package:flutter_bloc/flutter_bloc.dart'; | |||
import 'package:fluttertoast/fluttertoast.dart'; | |||
import 'package:provider/provider.dart'; | |||
import 'package:zhiying_base_widget/pages/goods_share_page/goods_share_page.dart'; | |||
import 'package:zhiying_base_widget/widgets/goods_details/footer/bloc/goods_details_footer_bloc.dart'; | |||
import 'package:zhiying_base_widget/widgets/goods_details/footer/bloc/goods_details_footer_repository.dart'; | |||
@@ -25,13 +31,17 @@ class GoodsDetailsFooterWidget extends StatelessWidget { | |||
create: (_) => | |||
GoodsDetailsFooterBloc(repository: GoodsDetailsFooterRepository()) | |||
..add(GoodsDetailsFooterInitEvent(model: model)), | |||
child: GooddsDetailsFooterContainer(), | |||
child: GooddsDetailsFooterContainer(model), | |||
), | |||
); | |||
} | |||
} | |||
class GooddsDetailsFooterContainer extends StatefulWidget { | |||
final Map<String, dynamic> model; | |||
const GooddsDetailsFooterContainer(this.model, {Key key}) : super(key: key); | |||
@override | |||
_GooddsDetailsFooterContainerState createState() => | |||
_GooddsDetailsFooterContainerState(); | |||
@@ -39,12 +49,16 @@ class GooddsDetailsFooterContainer extends StatefulWidget { | |||
class _GooddsDetailsFooterContainerState | |||
extends State<GooddsDetailsFooterContainer> { | |||
UserInfoModel _user; | |||
/// 打开首页 | |||
void _openHome() { | |||
Navigator.pushAndRemoveUntil( | |||
context, | |||
MaterialPageRoute(builder: (BuildContext context) => PageFactory.create('homePage', null)), | |||
(Route<dynamic> route) => false, | |||
MaterialPageRoute( | |||
builder: (BuildContext context) => | |||
PageFactory.create('homePage', null)), | |||
(Route<dynamic> route) => false, | |||
); | |||
} | |||
@@ -53,15 +67,49 @@ class _GooddsDetailsFooterContainerState | |||
/// 分享 | |||
void _shareOnClick(GoodsDetailsFooterModel model) { | |||
Navigator.of(context).push(MaterialPageRoute( | |||
builder: (context) => GoodsSharePage(model.toJson()))); | |||
print(_user?.toString()); | |||
if (_user?.token == null || _user.token == '') { | |||
print('need login...'); | |||
RouterUtil.goLogin(context); | |||
return; | |||
} | |||
Navigator.of(context).push( | |||
MaterialPageRoute(builder: (context) => GoodsSharePage(widget.model))); | |||
} | |||
/// 自购省 | |||
void _savemoneyOnClick() {} | |||
void _savemoneyOnClick(GoodsDetailsFooterModel model) async { | |||
print(_user?.toString()); | |||
if (_user?.token == null || _user.token == '') { | |||
print('need login...'); | |||
RouterUtil.goLogin(context); | |||
return; | |||
} | |||
String d = widget.model['data']; | |||
Map<String, dynamic> data = jsonDecode(d); | |||
Map shareArgs = data['share_url_args'] ?? {}; | |||
String shopType = shareArgs['type']; | |||
if (data.containsKey('buy_url')) { | |||
String url = data['buy_url']; | |||
if (url == null || url == '') { | |||
Fluttertoast.showToast(msg: '购买链接不存在'); | |||
return; | |||
} | |||
if (shopType == 'taobao') { | |||
TradeResult result = await FlutterAlibc.openByUrl(url: url); | |||
Logger.debug('${result.errorCode} ${result.errorMessage} '); | |||
} else { | |||
RouterUtil.openWebview(url, context); | |||
} | |||
} | |||
} | |||
@override | |||
Widget build(BuildContext context) { | |||
_user = Provider.of<UserInfoNotifier>(context).userInfo; | |||
return BlocConsumer<GoodsDetailsFooterBloc, GoodsDetailsFooterState>( | |||
listener: (context, state) {}, | |||
buildWhen: (prev, current) { | |||
@@ -207,7 +255,7 @@ class _GooddsDetailsFooterContainerState | |||
Widget _getZgsButton(GoodsDetailsFooterModel model) { | |||
return GestureDetector( | |||
behavior: HitTestBehavior.opaque, | |||
onTap: () => _savemoneyOnClick(), | |||
onTap: () => _savemoneyOnClick(model), | |||
child: Container( | |||
alignment: Alignment.center, | |||
// padding: const EdgeInsets.only(left: 30, right: 30, top: 5, bottom: 5), | |||
@@ -2,6 +2,7 @@ import 'dart:convert' as convert; | |||
import 'package:cached_network_image/cached_network_image.dart'; | |||
import 'package:flutter/material.dart'; | |||
import 'package:provider/provider.dart'; | |||
import 'package:zhiying_base_widget/widgets/home/home_auth/models/home_auth_model.dart'; | |||
import 'package:zhiying_comm/zhiying_comm.dart'; | |||
@@ -9,6 +10,7 @@ class HomeAuth extends StatelessWidget { | |||
final Map<String, dynamic> data; | |||
Map<String, dynamic> _json; | |||
HomeAuthModel _style; | |||
UserInfoModel _user; | |||
HomeAuth(this.data, {Key key}) : super(key: key) { | |||
String d = data['data']; | |||
@@ -18,6 +20,7 @@ class HomeAuth extends StatelessWidget { | |||
@override | |||
Widget build(BuildContext context) { | |||
_user = Provider.of<UserInfoNotifier>(context).userInfo; | |||
return Container( | |||
height: 34, | |||
width: double.infinity, | |||
@@ -28,8 +31,9 @@ class HomeAuth extends StatelessWidget { | |||
boxShadow: [ | |||
BoxShadow( | |||
offset: Offset(2, 1), //x,y轴 | |||
color: HexColor.fromHex(_style?.taoaboTipShadowColor ?? '767676') | |||
.withAlpha(70), //投影颜色 | |||
color: | |||
HexColor.fromHex(_style?.taoaboTipShadowColor ?? '767676') | |||
.withAlpha(70), //投影颜色 | |||
blurRadius: 5 //投影距离 | |||
) | |||
]), | |||
@@ -60,17 +64,25 @@ class HomeAuth extends StatelessWidget { | |||
padding: EdgeInsets.only(left: 12, right: 12, top: 3, bottom: 3), | |||
margin: EdgeInsets.only(left: 8, right: 8), | |||
decoration: BoxDecoration( | |||
color: HexColor.fromHex(_style?.taoaboTipBtnBgColor ?? 'FF4242'), | |||
color: | |||
HexColor.fromHex(_style?.taoaboTipBtnBgColor ?? 'FF4242'), | |||
borderRadius: BorderRadius.circular(20)), | |||
child: Text( | |||
_style?.taoaboTipBtnText ?? '', | |||
style: TextStyle( | |||
fontSize: 12, | |||
color: HexColor.fromHex(_style?.taoaboTipBtnTextColor ?? 'ffffff'), | |||
color: HexColor.fromHex( | |||
_style?.taoaboTipBtnTextColor ?? 'ffffff'), | |||
), | |||
), | |||
), | |||
onTap: () async { | |||
if (_user?.token == null || _user.token == '') { | |||
print('need login...'); | |||
RouterUtil.goLogin(context); | |||
return; | |||
} | |||
bool isAuth = await TaobaoAuth.isAuth(); | |||
if (!isAuth) { | |||
TaobaoAuth.auth(context); | |||
@@ -1,7 +1,7 @@ | |||
class ShareDataModel { | |||
String title; | |||
String content; | |||
dynamic image; | |||
List image; | |||
String url; | |||
ShareDataModel({ | |||
@@ -0,0 +1,22 @@ | |||
// 分享按钮 | |||
class ShareIconModel { | |||
String name; | |||
String type; | |||
String icon; | |||
ShareIconModel({this.name, this.type, this.icon}); | |||
ShareIconModel.fromJson(Map<String, dynamic> json) { | |||
name = json['name']; | |||
type = json['type']; | |||
icon = json['icon']; | |||
} | |||
Map<String, dynamic> toJson() { | |||
final Map<String, dynamic> data = new Map<String, dynamic>(); | |||
data['name'] = this.name; | |||
data['type'] = this.type; | |||
data['icon'] = this.icon; | |||
return data; | |||
} | |||
} |
@@ -1,19 +1,22 @@ | |||
import 'dart:io'; | |||
import 'dart:convert'; | |||
import 'dart:ui'; | |||
import 'package:cached_network_image/cached_network_image.dart'; | |||
import 'package:flutter/material.dart'; | |||
import 'package:share_extend/share_extend.dart'; | |||
import 'package:sharesdk_plugin/sharesdk_plugin.dart'; | |||
import 'package:zhiying_base_widget/utils/image_download_util/image_download_util.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_icon_model.dart'; | |||
import 'package:zhiying_comm/zhiying_comm.dart'; | |||
import 'package:share_extend/share_extend.dart'; | |||
class ShareAlert extends StatelessWidget { | |||
final String skipIdentifier; | |||
final Widget child; | |||
final ShareDataModel model; | |||
const ShareAlert(this.model, {Key key, this.child}) : super(key: key); // 中间视图 | |||
const ShareAlert(this.model, this.skipIdentifier, {Key key, this.child}) | |||
: super(key: key); // 中间视图 | |||
@override | |||
Widget build(BuildContext context) { | |||
@@ -28,7 +31,7 @@ class ShareAlert extends StatelessWidget { | |||
Expanded( | |||
child: Center(child: child ?? Container()), | |||
), | |||
_ShareAlertContent(this.model), | |||
_ShareAlertContent(this.model, this.skipIdentifier), | |||
], | |||
), | |||
), // 模糊化 | |||
@@ -41,10 +44,44 @@ class ShareAlert extends StatelessWidget { | |||
} | |||
} | |||
class _ShareAlertContent extends StatelessWidget { | |||
class _ShareAlertContent extends StatefulWidget { | |||
final ShareDataModel model; | |||
final String skipIdentifier; | |||
const _ShareAlertContent(this.model, this.skipIdentifier, {Key key}) | |||
: super(key: key); | |||
@override | |||
_ShareAlertContentState createState() => _ShareAlertContentState(); | |||
} | |||
const _ShareAlertContent(this.model, {Key key}) : super(key: key); | |||
class _ShareAlertContentState extends State<_ShareAlertContent> { | |||
List<ShareIconModel> _icons = []; | |||
@override | |||
void initState() { | |||
NetUtil.request('/api/v1/mod/${widget.skipIdentifier}', | |||
method: NetMethod.GET, onCache: (data) { | |||
_parseData(data); | |||
}, onSuccess: (data) { | |||
_parseData(data); | |||
}, onError: (err) {}); | |||
super.initState(); | |||
} | |||
void _parseData(Map<String, dynamic> data) { | |||
List modList = data['mod_list']; | |||
Map d = modList.first; | |||
if (d != null) { | |||
String dString = d['data']; | |||
List list = jsonDecode(dString); | |||
_icons = list.map((item) { | |||
return ShareIconModel.fromJson(Map<String, dynamic>.from(item)); | |||
}).toList(); | |||
setState(() {}); | |||
} | |||
} | |||
@override | |||
Widget build(BuildContext context) { | |||
@@ -80,7 +117,7 @@ class _ShareAlertContent extends StatelessWidget { | |||
), | |||
Container( | |||
margin: | |||
EdgeInsets.only(left: 12, right: 12, top: 10, bottom: 10), | |||
EdgeInsets.only(left: 12, right: 12, top: 10, bottom: 10), | |||
child: _createIcons(), | |||
), | |||
GestureDetector( | |||
@@ -115,13 +152,13 @@ class _ShareAlertContent extends StatelessWidget { | |||
return Wrap( | |||
spacing: 10, | |||
runSpacing: 10, | |||
children: List.generate(6, (index) { | |||
return _createIcon(); | |||
}), | |||
children: _icons.map((item) { | |||
return _createIcon(item); | |||
}).toList(), | |||
); | |||
} | |||
Widget _createIcon() { | |||
Widget _createIcon(ShareIconModel item) { | |||
return GestureDetector( | |||
child: Container( | |||
width: 60, | |||
@@ -130,14 +167,15 @@ class _ShareAlertContent extends StatelessWidget { | |||
Container( | |||
width: 40, | |||
height: 40, | |||
decoration: BoxDecoration( | |||
borderRadius: BorderRadius.circular(20), | |||
color: Colors.redAccent), | |||
child: CachedNetworkImage( | |||
imageUrl: item.icon, | |||
fit: BoxFit.contain, | |||
), | |||
), | |||
Padding( | |||
padding: const EdgeInsets.only(top: 2, bottom: 2), | |||
child: Text( | |||
'分享平台', | |||
item.name, | |||
style: TextStyle( | |||
fontSize: 12, | |||
color: Color(0xff333333), | |||
@@ -148,67 +186,65 @@ class _ShareAlertContent extends StatelessWidget { | |||
), | |||
), | |||
onTap: () { | |||
_shareByMob(SharePlateform.qq); | |||
if (item.type == 'wx') { | |||
_shareByMob(ShareSDKPlatforms.wechatSession); | |||
} else if (item.type == 'pyq') { | |||
_shareByMob(ShareSDKPlatforms.wechatTimeline); | |||
} else if (item.type == 'qq') { | |||
_shareByMob(ShareSDKPlatforms.qq); | |||
} else if (item.type == 'qq_space') { | |||
_shareByMob(ShareSDKPlatforms.qZone); | |||
} else if (item.type == 'weibo') { | |||
_shareByMob(ShareSDKPlatforms.sina); | |||
} else if (item.type == 'more_setting') { | |||
_shareBySystem(); | |||
} | |||
}, | |||
); | |||
} | |||
void _shareByMob(SharePlateform plateform) async { | |||
void _shareByMob(ShareSDKPlatform plateform) async { | |||
// dynamic image; | |||
if (widget.model.image != null && widget.model.image.length > 1) { | |||
_shareMultipleImages(); | |||
return; | |||
} | |||
//单独公共分享 | |||
SSDKMap params = SSDKMap() | |||
..setGeneral( | |||
model.title, | |||
model.content, | |||
model.image, | |||
widget.model.title, | |||
widget.model.content, | |||
widget.model.image, | |||
null, | |||
null, | |||
model.url, | |||
widget.model.url, | |||
null, | |||
null, | |||
null, | |||
null, | |||
SSDKContentTypes.auto, | |||
); | |||
ShareSDKPlatform p = ShareSDKPlatforms.wechatSession; | |||
switch (plateform) { | |||
case SharePlateform.wechatSession: | |||
p = ShareSDKPlatforms.wechatSession; | |||
break; | |||
case SharePlateform.wechatTimeline: | |||
p = ShareSDKPlatforms.wechatTimeline; | |||
break; | |||
case SharePlateform.qq: | |||
p = ShareSDKPlatforms.qq; | |||
break; | |||
case SharePlateform.qqZone: | |||
p = ShareSDKPlatforms.qZone; | |||
break; | |||
case SharePlateform.sina: | |||
p = ShareSDKPlatforms.sina; | |||
break; | |||
} | |||
if (model.image is List && (model.image as List).length > 1) { | |||
List<String> paths = await ImageDownloadUtil.download(model.image); | |||
ShareExtend.shareMultiple( | |||
paths, "image", subject: ""); | |||
return; | |||
} | |||
SharesdkPlugin.share(p, params, (SSDKResponseState state, Map userdata, | |||
Map contentEntity, SSDKError error) { | |||
SharesdkPlugin.share(plateform, params, (SSDKResponseState state, | |||
Map userdata, Map contentEntity, SSDKError error) { | |||
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"); | |||
// 系统分享,只能分享图片或者文字,不能组合分享 | |||
void _shareBySystem() async { | |||
if (widget.model.image.length >= 1) { | |||
_shareMultipleImages(); | |||
return; | |||
} else { | |||
ShareExtend.share(widget.model.content, 'text'); | |||
} | |||
} | |||
// 多图分享,调用系统分享 | |||
void _shareMultipleImages() async { | |||
List<String> paths = await ImageDownloadUtil.download(widget.model.image); | |||
ShareExtend.shareMultiple(paths, "image", subject: ""); | |||
} | |||
} |