|
|
|
import 'dart:convert';
|
|
|
|
import 'dart:io';
|
|
|
|
|
|
|
|
import 'package:dio/dio.dart';
|
|
|
|
import 'package:flutter/cupertino.dart';
|
|
|
|
import 'package:flutter/material.dart';
|
|
|
|
import 'package:flutter/rendering.dart';
|
|
|
|
import 'package:flutter_easyloading/flutter_easyloading.dart';
|
|
|
|
import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
|
|
|
|
import 'package:huixiang/generated/l10n.dart';
|
|
|
|
import 'package:huixiang/retrofit/data/activity.dart';
|
|
|
|
import 'package:huixiang/retrofit/data/base_data.dart';
|
|
|
|
import 'package:huixiang/retrofit/data/store_info.dart';
|
|
|
|
import 'package:huixiang/retrofit/data/user_entity.dart';
|
|
|
|
import 'package:huixiang/retrofit/data/user_info.dart';
|
|
|
|
import 'package:huixiang/retrofit/retrofit_api.dart';
|
|
|
|
import 'package:huixiang/union/union_view/store_activity.dart';
|
|
|
|
import 'package:huixiang/union/union_view/store_info.dart';
|
|
|
|
import 'package:huixiang/union/union_view/union_coupon.dart';
|
|
|
|
import 'package:huixiang/union/union_view/vip.dart';
|
|
|
|
import 'package:huixiang/utils/font_weight.dart';
|
|
|
|
import 'package:huixiang/utils/min.dart';
|
|
|
|
import 'package:huixiang/view_widget/classic_header.dart';
|
|
|
|
import 'package:huixiang/view_widget/my_appbar.dart';
|
|
|
|
import 'package:huixiang/view_widget/receive_success.dart';
|
|
|
|
import 'package:path_provider/path_provider.dart';
|
|
|
|
import 'package:shared_preferences/shared_preferences.dart';
|
|
|
|
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
|
|
|
import 'package:pull_to_refresh/pull_to_refresh.dart';
|
|
|
|
|
|
|
|
class UnionDetailsPage extends StatefulWidget {
|
|
|
|
final Map<String, dynamic> arguments;
|
|
|
|
|
|
|
|
UnionDetailsPage({this.arguments});
|
|
|
|
|
|
|
|
@override
|
|
|
|
State<StatefulWidget> createState() {
|
|
|
|
return _UnionDetailsPage();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
class _UnionDetailsPage extends State<UnionDetailsPage> {
|
|
|
|
ApiService apiService;
|
|
|
|
|
|
|
|
@override
|
|
|
|
void dispose() {
|
|
|
|
super.dispose();
|
|
|
|
refreshController.dispose();
|
|
|
|
}
|
|
|
|
|
|
|
|
StoreInfo storeInfo;
|
|
|
|
List<Activity> activitys;
|
|
|
|
|
|
|
|
queryStoreInfo() async {
|
|
|
|
final SharedPreferences value = await SharedPreferences.getInstance();
|
|
|
|
apiService =
|
|
|
|
ApiService(Dio(), context: context, token: value.getString('token'));
|
|
|
|
|
|
|
|
BaseData baseData = await apiService
|
|
|
|
.queryStoreInfo(widget.arguments["id"])
|
|
|
|
.catchError((error) {
|
|
|
|
refreshController.refreshFailed();
|
|
|
|
});
|
|
|
|
if (baseData != null && baseData.isSuccess) {
|
|
|
|
refreshController.refreshCompleted();
|
|
|
|
storeInfo = StoreInfo.fromJson(baseData.data);
|
|
|
|
activitys = storeInfo.informationVOPageVO.list
|
|
|
|
.map((e) => Activity.fromJson(e))
|
|
|
|
.toList();
|
|
|
|
} else {
|
|
|
|
refreshController.refreshFailed();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
final RefreshController refreshController = RefreshController();
|
|
|
|
|
|
|
|
@override
|
|
|
|
Widget build(BuildContext context) {
|
|
|
|
return FutureBuilder(
|
|
|
|
future: queryStoreInfo(),
|
|
|
|
builder: (context, snapshot) {
|
|
|
|
return Scaffold(
|
|
|
|
appBar: MyAppBar(
|
|
|
|
background: Color(0xFFF7F7F7),
|
|
|
|
title: storeInfo == null
|
|
|
|
? (widget.arguments["storeName"] ?? "")
|
|
|
|
: storeInfo.storeName,
|
|
|
|
titleColor: Colors.black87,
|
|
|
|
titleSize: 18.sp,
|
|
|
|
leadingColor: Colors.black,
|
|
|
|
),
|
|
|
|
body: Column(
|
|
|
|
children: [
|
|
|
|
Expanded(
|
|
|
|
child: SmartRefresher(
|
|
|
|
controller: refreshController,
|
|
|
|
enablePullDown: true,
|
|
|
|
enablePullUp: false,
|
|
|
|
header: MyHeader(),
|
|
|
|
physics: BouncingScrollPhysics(),
|
|
|
|
onRefresh: () {
|
|
|
|
setState(() {});
|
|
|
|
},
|
|
|
|
child: SingleChildScrollView(
|
|
|
|
physics: NeverScrollableScrollPhysics(),
|
|
|
|
child: Column(
|
|
|
|
children: [
|
|
|
|
///门店信息
|
|
|
|
StoreInfos(storeInfo),
|
|
|
|
|
|
|
|
///门店对应VIP信息
|
|
|
|
Vip(storeInfo, _receiveVip, isReceive),
|
|
|
|
|
|
|
|
///门店对应优惠券
|
|
|
|
UnionCoupon(storeInfo, _receiveCoupon),
|
|
|
|
|
|
|
|
/// 门店对应的活动
|
|
|
|
StoreActivity(widget.arguments, activitys),
|
|
|
|
],
|
|
|
|
),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
flex: 1,
|
|
|
|
),
|
|
|
|
InkWell(
|
|
|
|
onTap: _loginMin,
|
|
|
|
child: Container(
|
|
|
|
padding: EdgeInsets.only(top: 16.h, bottom: 16.h),
|
|
|
|
decoration: BoxDecoration(
|
|
|
|
color: isEnable() ? Color(0xFF32A060) : Color(0xFFD8D8D8),
|
|
|
|
borderRadius: BorderRadius.vertical(
|
|
|
|
top: Radius.circular(4),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
alignment: Alignment.center,
|
|
|
|
child: Text(
|
|
|
|
isEnable()
|
|
|
|
? S.of(context).jinrushangdian
|
|
|
|
: S.of(context).zanwuxianshangjindian,
|
|
|
|
style: TextStyle(
|
|
|
|
fontSize: 16.sp,
|
|
|
|
color: isEnable() ? Colors.white : Color(0xFFA0A0A0),
|
|
|
|
fontWeight: MyFontWeight.semi_bold,
|
|
|
|
),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
],
|
|
|
|
),
|
|
|
|
);
|
|
|
|
},
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
bool isEnable() {
|
|
|
|
if (storeInfo == null) return false;
|
|
|
|
if (storeInfo.mini == null) return false;
|
|
|
|
String miniAppId = storeInfo.mini.miniAppId;
|
|
|
|
if (miniAppId == null ||
|
|
|
|
miniAppId == "" ||
|
|
|
|
storeInfo.mini.miniVersion == null ||
|
|
|
|
storeInfo.mini.miniVersion == "" ||
|
|
|
|
storeInfo.mini.miniDownloadUrl == null ||
|
|
|
|
storeInfo.mini.miniDownloadUrl == "") {
|
|
|
|
return false;
|
|
|
|
} else {
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
///领取优惠券
|
|
|
|
_receiveCoupon(couponId) async {
|
|
|
|
BaseData baseData = await apiService.receiveCoupon(couponId);
|
|
|
|
if (baseData != null && baseData.isSuccess) {
|
|
|
|
queryStoreInfo();
|
|
|
|
showAlertDialog();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/// 领取成功弹窗
|
|
|
|
showAlertDialog() {
|
|
|
|
//显示对话框
|
|
|
|
showDialog(
|
|
|
|
context: context,
|
|
|
|
builder: (BuildContext context) {
|
|
|
|
return ReceiveSuccess();
|
|
|
|
},
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
bool isReceive = true;
|
|
|
|
|
|
|
|
///领取VIP
|
|
|
|
_receiveVip() async {
|
|
|
|
BaseData baseData = await apiService.minLogin(storeInfo.id);
|
|
|
|
if (baseData != null && baseData.isSuccess) {
|
|
|
|
SmartDialog.showToast(S.of(context).lingquchenggong,
|
|
|
|
alignment: Alignment.center);
|
|
|
|
setState(() {
|
|
|
|
isReceive = false;
|
|
|
|
});
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
printMin() async {
|
|
|
|
String miniAppId = storeInfo.mini.miniAppId;
|
|
|
|
debugPrint("print isExistsApp: ${await Min.isExistsApp(miniAppId)}");
|
|
|
|
debugPrint("print getAppBasePath: ${await Min.getAppBasePath(miniAppId)}");
|
|
|
|
debugPrint("print currentPageUrl: ${await Min.currentPageUrl()}");
|
|
|
|
debugPrint("print runingAppid: ${await Min.runingAppid()}");
|
|
|
|
}
|
|
|
|
|
|
|
|
_loginMin() async {
|
|
|
|
if (storeInfo == null) return;
|
|
|
|
if (!isEnable()) {
|
|
|
|
SmartDialog.showToast(S.of(context).zanbuzhichixianshangdiancan,
|
|
|
|
alignment: Alignment.center);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
BaseData baseData = await apiService.minLogin(storeInfo.id);
|
|
|
|
if (baseData != null && baseData.isSuccess) {
|
|
|
|
UserEntity userEntity = UserEntity.fromJson(baseData.data);
|
|
|
|
startMin(userEntity.token, userEntity.userId);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
startMin(token, userId) async {
|
|
|
|
if (storeInfo == null) return;
|
|
|
|
if (storeInfo.mini == null) return;
|
|
|
|
if (!(await Min.isInitialize())) {
|
|
|
|
await Min.initialize();
|
|
|
|
}
|
|
|
|
printMin();
|
|
|
|
String miniAppId = storeInfo.mini.miniAppId;
|
|
|
|
String filePath = "";
|
|
|
|
if (Platform.isAndroid) {
|
|
|
|
filePath = (await getExternalStorageDirectory()).path;
|
|
|
|
} else {
|
|
|
|
filePath = (await getApplicationDocumentsDirectory()).path;
|
|
|
|
}
|
|
|
|
filePath = "$filePath/$miniAppId.wgt";
|
|
|
|
|
|
|
|
if (!(await Min.isExistsApp(miniAppId))) {
|
|
|
|
await downloadWgt(miniAppId, filePath);
|
|
|
|
await Min.reloadWgt(miniAppId, filePath);
|
|
|
|
} else {
|
|
|
|
String version = await Min.getAppVersionInfo(storeInfo.mini.miniAppId);
|
|
|
|
if (version != storeInfo.mini.miniVersion) {
|
|
|
|
await downloadWgt(miniAppId, filePath);
|
|
|
|
await Min.reloadWgt(miniAppId, filePath);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
SharedPreferences sharedPreferences = await SharedPreferences.getInstance();
|
|
|
|
String nickname = sharedPreferences.getString("nick");
|
|
|
|
String mobile = sharedPreferences.getString("mobile");
|
|
|
|
String user = sharedPreferences.getString('user');
|
|
|
|
String latitude = sharedPreferences.getString("latitude");
|
|
|
|
String longitude = sharedPreferences.getString("longitude");
|
|
|
|
print(user);
|
|
|
|
UserInfo userInfo = UserInfo.fromJson(jsonDecode(user));
|
|
|
|
Min.startMin(miniAppId, {
|
|
|
|
"token": "Bearer $token",
|
|
|
|
"shopId": widget.arguments["id"],
|
|
|
|
"tenantCode": storeInfo.tenantCode,
|
|
|
|
if (latitude != null && longitude != null)
|
|
|
|
"position": "$latitude,$longitude",
|
|
|
|
// "baseURL": "https://pos.api.lotus-wallet.com/app/",
|
|
|
|
"baseURL": "http://192.168.10.236:8765/app/",
|
|
|
|
"uid": userId,
|
|
|
|
"userInfo": {
|
|
|
|
"nickname": nickname,
|
|
|
|
"headimg": userInfo.headimg,
|
|
|
|
"balance": userInfo.balance,
|
|
|
|
"money": userInfo.money,
|
|
|
|
"phone": mobile,
|
|
|
|
"isBind": userInfo.isBind,
|
|
|
|
},
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
double progressValue = 0;
|
|
|
|
String downText = S.current.zhengzaixiazaizhong;
|
|
|
|
|
|
|
|
downloadWgt(appId, savePath) async {
|
|
|
|
downText = S.of(context).zhengzaixiazaizhong;
|
|
|
|
Response response = await Dio()
|
|
|
|
.download(storeInfo.mini.miniDownloadUrl, savePath,
|
|
|
|
onReceiveProgress: (progress, max) {
|
|
|
|
progressValue = progress.toDouble() / max.toDouble();
|
|
|
|
EasyLoading.showProgress(progressValue, status: downText);
|
|
|
|
});
|
|
|
|
if (response.statusCode == 200) {
|
|
|
|
downText = S.of(context).xiazaiwancheng;
|
|
|
|
EasyLoading.showProgress(progressValue, status: downText);
|
|
|
|
SharedPreferences.getInstance().then((value) {
|
|
|
|
value.setStringList(
|
|
|
|
"miniAppid",
|
|
|
|
(value.getStringList("miniAppid") != null
|
|
|
|
? value.getStringList("miniAppid")
|
|
|
|
: [])
|
|
|
|
..add(appId));
|
|
|
|
});
|
|
|
|
} else {
|
|
|
|
print("print 下载失败");
|
|
|
|
}
|
|
|
|
Future.delayed(Duration(seconds: 1), () {
|
|
|
|
EasyLoading.dismiss();
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|