瑞口令监听

master
laiiihz 4 years ago
parent 3fa0d02646
commit 481345d684

@ -28,12 +28,14 @@ import 'package:recook/manager/meiqia_manager.dart';
import 'package:recook/manager/user_manager.dart';
import 'package:recook/models/banner_list_model.dart';
import 'package:recook/models/base_model.dart';
import 'package:recook/models/goods_detail_model.dart' as GDM;
import 'package:recook/models/home_weather_model.dart';
import 'package:recook/models/promotion_goods_list_model.dart';
import 'package:recook/models/promotion_list_model.dart';
import 'package:recook/pages/home/classify/brandgoods_list_page.dart';
import 'package:recook/pages/home/classify/classify_page.dart';
import 'package:recook/pages/home/classify/commodity_detail_page.dart';
import 'package:recook/pages/home/classify/mvp/goods_detail_model_impl.dart';
import 'package:recook/pages/home/home_page_tabbar.dart';
import 'package:recook/pages/home/items/item_row_acitivity.dart';
import 'package:recook/pages/home/promotion_time_tool.dart';
@ -45,6 +47,7 @@ import 'package:recook/pages/home/widget/home_weather_view.dart';
import 'package:recook/pages/live/live_stream/live_stream_view_page.dart';
import 'package:recook/pages/noticeList/notice_list_model.dart';
import 'package:recook/pages/noticeList/notice_list_tool.dart';
import 'package:recook/pages/tabBar/rui_code_listener.dart';
import 'package:recook/third_party/wechat/wechat_utils.dart';
import 'package:recook/utils/android_back_desktop.dart';
import 'package:recook/utils/app_router.dart';
@ -87,6 +90,10 @@ class HomePage extends StatefulWidget {
}
}
class ClipboardListenerValue {
static bool canListen = true;
}
class _HomePageState extends BaseStoreState<HomePage>
with TickerProviderStateMixin, WidgetsBindingObserver {
Location _weatherLocation;
@ -140,79 +147,6 @@ class _HomePageState extends BaseStoreState<HomePage>
}
///
_clipboardListener() async {
String rawData = (await Clipboard.getData(Clipboard.kTextPlain)).text;
bool isRUICode = RUICodeUtil.isCode(rawData);
RUICodeModel model = RUICodeUtil.decrypt(rawData);
//
if (isRUICode) {
showDialog(
context: context,
child: Center(
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
Material(
color: Colors.transparent,
child: Container(
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(rSize(9)),
),
margin: EdgeInsets.symmetric(horizontal: rSize(50)),
padding: EdgeInsets.all(rSize(10)),
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
Row(
children: [],
),
// FadeInImage.assetNetwork(
// placeholder: R.ASSETS_PLACEHOLDER_NEW_1X1_A_PNG,
// image: '',
// height: rSize(256),
// fit: BoxFit.cover,
// ),
Text(
'给你分享了商品',
style: TextStyle(
color: Color(0xFF666666),
fontSize: rSP(12),
),
),
MaterialButton(
shape: StadiumBorder(),
onPressed: () {
CRoute.pushReplace(
context,
CommodityDetailPage(
arguments: CommodityDetailPage.setArguments(
model.goodsId,
),
));
},
height: rSize(36),
minWidth: rSize(235),
padding: EdgeInsets.zero,
color: Color(0xFFDB2D2D),
child: Text(
'查看详情',
style: TextStyle(
color: Colors.white,
),
),
),
],
),
),
),
Icon(CupertinoIcons.clear_circled),
],
),
),
);
}
}
@override
void initState() {
@ -224,8 +158,6 @@ class _HomePageState extends BaseStoreState<HomePage>
// meiqia
MQManager.initial();
ShareTool.init();
//
ClipboardListener.addListener(_clipboardListener);
// _backgroundColor = AppColor.themeColor;
_homeCountdownController = HomeCountdownController();
@ -320,7 +252,6 @@ class _HomePageState extends BaseStoreState<HomePage>
void dispose() {
_tabController.dispose();
WidgetsBinding.instance.removeObserver(this);
ClipboardListener.removeListener(_clipboardListener);
super.dispose();
}
@ -1315,6 +1246,7 @@ class _HomePageState extends BaseStoreState<HomePage>
}
_getPromotionList() async {
RUICodeListener(context).clipboardListener();
ResultData resultData = await HttpManager.post(HomeApi.promotion_list, {});
if (_gsRefreshController.isRefresh()) {

@ -31,6 +31,7 @@ import 'package:recook/pages/live/pages/discovery_page.dart';
import 'package:recook/pages/live/widget/live_fab_location.dart';
import 'package:recook/pages/shop/widget/normal_shop_page.dart';
import 'package:recook/pages/shopping_cart/shopping_cart_page.dart';
import 'package:recook/pages/tabBar/rui_code_listener.dart';
import 'package:recook/pages/user/user_page.dart';
import 'package:recook/third_party/bugly_helper.dart';
import 'package:recook/utils/app_router.dart';
@ -301,186 +302,6 @@ class BottomBar extends StatefulWidget {
class _BottomBarState extends State<BottomBar> {
Color selectedColor = AppColor.themeColor;
Color unSelectedColor = Colors.black;
Future<GoodsDetailModel> _getDetail(int goodsId) async {
GoodsDetailModel _goodsDetail = await GoodsDetailModelImpl.getDetailInfo(
goodsId, UserManager.instance.user.info.id);
if (_goodsDetail.code != HttpStatus.SUCCESS) {
Toast.showError(_goodsDetail.msg);
return null;
}
return _goodsDetail;
}
Future<ResultData> _getUserInfo(int id) async {
return await HttpManager.post(UserApi.userInfo, {'userId': id});
}
_clipboardListener() async {
String rawData = (await Clipboard.getData(Clipboard.kTextPlain)).text;
bool isRUICode = RUICodeUtil.isCode(rawData);
GoodsDetailModel goodsDetailModel;
//
if (isRUICode) {
RUICodeModel model = RUICodeUtil.decrypt(rawData);
goodsDetailModel = await _getDetail(model.goodsId);
//user info
String userImg = '';
String userName = '';
ResultData resultData = await _getUserInfo(model.userId);
if (resultData.data != null && resultData.data['data'] != null) {
userImg = resultData.data['data']['headImgUrl'];
userName = resultData.data['data']['nickname'];
}
if (goodsDetailModel != null)
showDialog(
context: context,
child: Center(
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
Material(
color: Colors.transparent,
child: Container(
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(rSize(9)),
),
margin: EdgeInsets.symmetric(horizontal: rSize(50)),
padding: EdgeInsets.all(rSize(10)),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.min,
children: [
Row(
children: [
Material(
clipBehavior: Clip.antiAlias,
color: Colors.white,
borderRadius: BorderRadius.circular(rSize(17)),
child: FadeInImage.assetNetwork(
placeholder: R.ASSETS_PLACEHOLDER_NEW_1X1_A_PNG,
image: Api.getImgUrl(userImg),
height: rSize(34),
width: rSize(34),
fit: BoxFit.cover,
),
),
rWBox(8),
Expanded(
child: Text(
userName ?? '',
style: TextStyle(
color: Colors.black,
fontSize: rSP(14),
),
),
),
],
),
rHBox(4),
Text(
'给你分享了商品',
style: TextStyle(
color: Color(0xFF666666),
fontSize: rSP(12),
),
),
rHBox(4),
Material(
color: Colors.black12,
borderRadius: BorderRadius.circular(rSize(8)),
child: FadeInImage.assetNetwork(
placeholder: R.ASSETS_PLACEHOLDER_NEW_1X1_A_PNG,
image: Api.getImgUrl(
goodsDetailModel.data.mainPhotos.first.url),
height: rSize(256),
fit: BoxFit.cover,
),
),
rHBox(10),
Row(
crossAxisAlignment: CrossAxisAlignment.baseline,
textBaseline: TextBaseline.alphabetic,
children: [
Text(
'¥',
style: TextStyle(
color: Color(0xFFE13327),
fontSize: rSP(14),
),
),
Text(
'${goodsDetailModel.data.price.max.discountPrice.toStringAsFixed(2)}',
style: TextStyle(
color: Color(0xFFE13327),
fontSize: rSP(18),
),
),
Text(
'/赚${goodsDetailModel.data.price.max.commission.toStringAsFixed(1)}',
style: TextStyle(
color: Color(0xFFE13327),
fontSize: rSP(10),
),
),
],
),
rHBox(4),
Text(
goodsDetailModel.data.goodsName,
maxLines: 1,
overflow: TextOverflow.ellipsis,
style: TextStyle(),
),
Center(
child: MaterialButton(
elevation: 0,
shape: StadiumBorder(),
onPressed: () {
CRoute.pushReplace(
context,
CommodityDetailPage(
arguments: CommodityDetailPage.setArguments(
model.goodsId,
),
));
},
height: rSize(36),
minWidth: rSize(235),
padding: EdgeInsets.zero,
color: Color(0xFFDB2D2D),
child: Text(
'查看详情',
style: TextStyle(
color: Colors.white,
),
),
),
),
],
),
),
),
rHBox(30),
GestureDetector(
onTap: () => Navigator.pop(context),
child: Material(
color: Colors.transparent,
child: Icon(
CupertinoIcons.clear_circled,
size: rSize(40),
color: Colors.white,
),
),
),
],
),
),
);
}
}
@override
void initState() {
@ -561,9 +382,7 @@ class _BottomBarState extends State<BottomBar> {
)
],
onTabChangedListener: (index) {
if (index == 0) {
_clipboardListener();
}
RUICodeListener(context).clipboardListener();
print(" $index");
if (widget.tabChangeListener != null) {
// if ((index == 4 || index == 5) && !UserManager.instance.haveLogin) {

@ -0,0 +1,201 @@
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:recook/constants/api.dart';
import 'package:recook/constants/header.dart';
import 'package:recook/manager/http_manager.dart';
import 'package:recook/manager/user_manager.dart';
import 'package:recook/models/goods_detail_model.dart';
import 'package:recook/pages/home/classify/commodity_detail_page.dart';
import 'package:recook/pages/home/classify/mvp/goods_detail_model_impl.dart';
import 'package:recook/pages/home/home_page.dart';
import 'package:recook/utils/custom_route.dart';
import 'package:recook/utils/rui_code_util.dart';
import 'package:recook/widgets/toast.dart';
class RUICodeListener {
final BuildContext context;
RUICodeListener(this.context);
Future<GoodsDetailModel> _getDetail(int goodsId) async {
GoodsDetailModel _goodsDetail = await GoodsDetailModelImpl.getDetailInfo(
goodsId, UserManager.instance.user.info.id);
if (_goodsDetail.code != HttpStatus.SUCCESS) {
Toast.showError(_goodsDetail.msg);
return null;
}
return _goodsDetail;
}
Future<ResultData> _getUserInfo(int id) async {
return await HttpManager.post(UserApi.userInfo, {'userId': id});
}
clipboardListener() async {
String rawData = (await Clipboard.getData(Clipboard.kTextPlain)).text;
bool isRUICode = RUICodeUtil.isCode(rawData);
GoodsDetailModel goodsDetailModel;
//
if (isRUICode && ClipboardListenerValue.canListen) {
RUICodeModel model = RUICodeUtil.decrypt(rawData);
goodsDetailModel = await _getDetail(model.goodsId);
//user info
String userImg = '';
String userName = '';
ResultData resultData = await _getUserInfo(model.userId);
if (resultData.data != null && resultData.data['data'] != null) {
userImg = resultData.data['data']['headImgUrl'];
userName = resultData.data['data']['nickname'];
}
if (goodsDetailModel != null)
showDialog(
context: context,
child: Center(
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
Material(
color: Colors.transparent,
child: Container(
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(rSize(9)),
),
margin: EdgeInsets.symmetric(horizontal: rSize(50)),
padding: EdgeInsets.all(rSize(10)),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.min,
children: [
Row(
children: [
Material(
clipBehavior: Clip.antiAlias,
color: Colors.white,
borderRadius: BorderRadius.circular(rSize(17)),
child: FadeInImage.assetNetwork(
placeholder: R.ASSETS_PLACEHOLDER_NEW_1X1_A_PNG,
image: Api.getImgUrl(userImg),
height: rSize(34),
width: rSize(34),
fit: BoxFit.cover,
),
),
rWBox(8),
Expanded(
child: Text(
userName ?? '',
style: TextStyle(
color: Colors.black,
fontSize: rSP(14),
),
),
),
],
),
rHBox(4),
Text(
'给你分享了商品',
style: TextStyle(
color: Color(0xFF666666),
fontSize: rSP(12),
),
),
rHBox(4),
Material(
color: Colors.black12,
borderRadius: BorderRadius.circular(rSize(8)),
child: FadeInImage.assetNetwork(
placeholder: R.ASSETS_PLACEHOLDER_NEW_1X1_A_PNG,
image: Api.getImgUrl(
goodsDetailModel.data.mainPhotos.first.url),
height: rSize(256),
fit: BoxFit.cover,
),
),
rHBox(10),
Row(
crossAxisAlignment: CrossAxisAlignment.baseline,
textBaseline: TextBaseline.alphabetic,
children: [
Text(
'¥',
style: TextStyle(
color: Color(0xFFE13327),
fontSize: rSP(14),
),
),
Text(
'${goodsDetailModel.data.price.max.discountPrice.toStringAsFixed(2)}',
style: TextStyle(
color: Color(0xFFE13327),
fontSize: rSP(18),
),
),
Text(
'/赚${goodsDetailModel.data.price.max.commission.toStringAsFixed(1)}',
style: TextStyle(
color: Color(0xFFE13327),
fontSize: rSP(10),
),
),
],
),
rHBox(4),
Text(
goodsDetailModel.data.goodsName,
maxLines: 1,
overflow: TextOverflow.ellipsis,
style: TextStyle(),
),
Center(
child: MaterialButton(
elevation: 0,
shape: StadiumBorder(),
onPressed: () {
CRoute.pushReplace(
context,
CommodityDetailPage(
arguments: CommodityDetailPage.setArguments(
model.goodsId,
),
));
},
height: rSize(36),
minWidth: rSize(235),
padding: EdgeInsets.zero,
color: Color(0xFFDB2D2D),
child: Text(
'查看详情',
style: TextStyle(
color: Colors.white,
),
),
),
),
],
),
),
),
rHBox(30),
GestureDetector(
onTap: () => Navigator.pop(context),
child: Material(
color: Colors.transparent,
child: Icon(
CupertinoIcons.clear_circled,
size: rSize(40),
color: Colors.white,
),
),
),
],
),
),
);
Clipboard.setData(ClipboardData(text: ''));
}
}
}

@ -8,6 +8,7 @@ import 'package:recook/constants/constants.dart';
import 'package:recook/constants/header.dart';
import 'package:recook/manager/http_manager.dart';
import 'package:recook/manager/user_manager.dart';
import 'package:recook/pages/home/home_page.dart';
import 'package:recook/third_party/wechat/wechat_utils.dart';
import 'package:recook/utils/rui_code_util.dart';
import 'package:recook/widgets/bottom_sheet/bottom_share_dialog.dart';
@ -299,6 +300,7 @@ class ShareTool {
height: 36,
),
itemClick: () async {
ClipboardListenerValue.canListen = false;
Navigator.pop(context);
print(goodsId);
String code = '$miniTitle】复制这段描述,打开瑞库客,购全球好物${RUICodeUtil.encrypt(
@ -366,6 +368,7 @@ class ShareTool {
if (needWechat == true) {
await Fluwx.openWeChatApp();
}
ClipboardListenerValue.canListen = true;
},
);
List<PlatformItem> itemList = [

Loading…
Cancel
Save