Hibok
25'ten fazla konu seçemezsiniz Konular bir harf veya rakamla başlamalı, kısa çizgiler ('-') içerebilir ve en fazla 35 karakter uzunluğunda olabilir.
 
 
 
 
 
 

271 satır
9.6 KiB

  1. import 'dart:async';
  2. import 'dart:convert';
  3. import 'package:amap_location/amap_location.dart';
  4. import 'package:chat/data/constants.dart';
  5. import 'package:chat/utils/HttpUtil.dart';
  6. import 'package:chat/utils/LoadingDialog.dart';
  7. import 'package:chat/utils/upload_util.dart';
  8. import 'package:crclib/crclib.dart';
  9. import 'package:shared_preferences/shared_preferences.dart';
  10. import 'package:vibration/vibration.dart';
  11. import '../models/UserInfo.dart';
  12. class UserData {
  13. //私有构造函数
  14. UserData._internal();
  15. //保存单例
  16. static UserData _singleton = new UserData._internal();
  17. //工厂构造函数
  18. factory UserData() => _singleton;
  19. int language = 0;
  20. int deviceLanguage = 0;
  21. double latitude = 10.7517368433358;
  22. double longitude = 106.600798525456;
  23. UserInfo basicInfo = new UserInfo();
  24. int totalMoney = 0; //用户总金额
  25. String bindCardId = '';
  26. bool isCanProgram = true; //用户能否发约会节目
  27. int picNum = 0; //用户相册的数量
  28. int incomeMoney = 0; //用户收入金额
  29. int frozenMoney = 0; //用户冻结金额
  30. bool isFirstTip = false; //第一次进来提示完善资料
  31. int mobile = 0; //是否绑定手机号
  32. int freeNum = 0; //免费次数
  33. int usedNum = 0; //使用的次数
  34. bool haveReview = false; //有照片在审核
  35. String memberEndTime = ''; //会员到期时间
  36. bool hasLocationPermission = false; //是否有定位权限
  37. bool isBannerStatus = false; //是否支付状态
  38. int agentId = 0; //代理id
  39. int redPacketSW = 0; //红包开关
  40. int giftSwitch = 0; //打赏礼物开关
  41. int bannerZF = 0; //苹果内购开关
  42. int sign = 0; //签到开关
  43. int groupQRCode = 0; //群二维码开关
  44. int addFdDistanceSwitch = 0; //二维码加好友距离判断开关
  45. int inviteCodePrice = 0; //绑定邀请码奖励
  46. int accountPrice = 0; //解锁账号金额
  47. int redPhotoPrice = 0; //红包照片金额
  48. int addProgramPrice = 120; //发布节目金额
  49. double keyboardHeight = 0; //缓存键盘高度
  50. bool privatyMsgPushSwitch = true; //私人消息推送开关
  51. bool needRequestPushPermission = false; //是否需要推送权限
  52. bool newDateSwitch = false; //有新约会提醒开关
  53. bool applyCheckSwitch = false; //查看资料提醒开关
  54. bool acceptCheckSwitch = false; //通过查看资料提醒开关
  55. bool checkPhotoSwitch = false; //查看红包照片提醒开关
  56. bool codeSucessSwitch = false; //邀请码申请成功提醒开关
  57. bool stationOpenSwitch = true; //开启电台开关
  58. bool myProgramOpenSwitch = true; //我的节目开关
  59. bool nearbyOpenSwitch = true; //附近的人开关
  60. bool isTranslateUser = false;
  61. List contactList = [];
  62. bool isInChina = false;
  63. int homemainIndex = 0;
  64. String currentCity = '';
  65. String deviceLanguageCode;
  66. bool shockNoticSwitch = true; //震动通知
  67. bool isShocking = false; //是否震动中
  68. Map<String, dynamic> toJson() {
  69. Map<String, dynamic> json = new Map<String, dynamic>();
  70. json['language'] = language;
  71. json['deviceLanguage'] = deviceLanguage;
  72. json['latitude'] = latitude;
  73. json['longitude'] = longitude;
  74. json['basicInfo'] = jsonEncode(basicInfo).toString();
  75. json['totalMoney'] = totalMoney;
  76. json['bindCardId'] = bindCardId;
  77. json['isCanProgram'] = isCanProgram;
  78. json['picNum'] = picNum;
  79. json['incomeMoney'] = incomeMoney;
  80. json['frozenMoney'] = frozenMoney;
  81. json['isFirstTip'] = isFirstTip;
  82. json['mobile'] = mobile;
  83. json['freeNum'] = freeNum;
  84. json['usedNum'] = usedNum;
  85. json['haveReview'] = haveReview;
  86. json['memberEndTime'] = memberEndTime;
  87. json['isBannerStatus'] = isBannerStatus;
  88. json['agentId'] = agentId;
  89. json['redPacketSW'] = redPacketSW;
  90. json['giftSwitch'] = giftSwitch;
  91. json['bannerZF'] = bannerZF;
  92. json['sign'] = sign;
  93. json['groupQRCode'] = groupQRCode;
  94. json['addFdDistanceSwitch'] = addFdDistanceSwitch;
  95. json['inviteCodePrice'] = inviteCodePrice;
  96. json['accountPrice'] = accountPrice;
  97. json['redPhotoPrice'] = redPhotoPrice;
  98. json['addProgramPrice'] = addProgramPrice;
  99. json['keyboardHeight'] = keyboardHeight;
  100. json['privatyMsgPushSwitch'] = privatyMsgPushSwitch;
  101. json['needRequestPushPermission'] = needRequestPushPermission;
  102. json['newDateSwitch'] = newDateSwitch;
  103. json['applyCheckSwitch'] = applyCheckSwitch;
  104. json['acceptCheckSwitch'] = acceptCheckSwitch;
  105. json['checkPhotoSwitch'] = checkPhotoSwitch;
  106. json['codeSucessSwitch'] = codeSucessSwitch;
  107. json['stationOpenSwitch'] = stationOpenSwitch;
  108. json['myProgramOpenSwitch'] = myProgramOpenSwitch;
  109. json['nearbyOpenSwitch'] = nearbyOpenSwitch;
  110. json['isInChina'] = isInChina;
  111. return json;
  112. }
  113. fromLocalJson(Map<String, dynamic> data) {
  114. language = data['language'];
  115. deviceLanguage = data['deviceLanguage'];
  116. latitude = data['latitude'];
  117. longitude = data['longitude'];
  118. basicInfo = UserInfo.fromLocalJson(json.decode(data['basicInfo']));
  119. totalMoney = data['totalMoney'];
  120. bindCardId = data['bindCardId'];
  121. isCanProgram = data['isCanProgram'];
  122. picNum = data['picNum'];
  123. incomeMoney = data['incomeMoney'];
  124. frozenMoney = data['frozenMoney'];
  125. isFirstTip = data['isFirstTip'];
  126. mobile = data['mobile'];
  127. freeNum = data['freeNum'];
  128. usedNum = data['usedNum'];
  129. haveReview = data['haveReview'];
  130. memberEndTime = data['memberEndTime'];
  131. isBannerStatus = data['isBannerStatus'];
  132. agentId = data['agentId'];
  133. redPacketSW = data['redPacketSW'];
  134. giftSwitch = data['giftSwitch'];
  135. bannerZF = data['bannerZF'];
  136. sign = data['sign'];
  137. groupQRCode = data['groupQRCode'];
  138. addFdDistanceSwitch = data['addFdDistanceSwitch'];
  139. inviteCodePrice = data['inviteCodePrice'];
  140. accountPrice = data['accountPrice'];
  141. redPhotoPrice = data['redPhotoPrice'];
  142. addProgramPrice = data['addProgramPrice'];
  143. keyboardHeight = data['keyboardHeight'];
  144. privatyMsgPushSwitch = data['privatyMsgPushSwitch'];
  145. needRequestPushPermission = data['needRequestPushPermission'];
  146. newDateSwitch = data['newDateSwitch'];
  147. applyCheckSwitch = data['applyCheckSwitch'];
  148. acceptCheckSwitch = data['acceptCheckSwitch'];
  149. checkPhotoSwitch = data['checkPhotoSwitch'];
  150. codeSucessSwitch = data['codeSucessSwitch'];
  151. stationOpenSwitch = data['stationOpenSwitch'];
  152. myProgramOpenSwitch = data['myProgramOpenSwitch'];
  153. nearbyOpenSwitch = data['nearbyOpenSwitch'];
  154. isInChina = data['isInChina'];
  155. }
  156. bool isMan() {
  157. return UserData().basicInfo.sex == 1;
  158. }
  159. setKeyboardHeight(double newHeight) async {
  160. SharedPreferences prefs = await SharedPreferences.getInstance();
  161. var oldHeight = prefs.getDouble(Constants.KeyboardHeight);
  162. if (oldHeight != newHeight) {
  163. prefs.setDouble(Constants.KeyboardHeight, newHeight);
  164. }
  165. }
  166. getValidHCoin() {
  167. return incomeMoney - frozenMoney;
  168. }
  169. bool get isSuperVip {
  170. return basicInfo.isMember == 2;
  171. }
  172. bool get isVip {
  173. return basicInfo.isMember > 0;
  174. }
  175. int getSessionId(int friendId) {
  176. var myId = basicInfo.userId;
  177. var idStr = myId > friendId
  178. ? friendId.toString() + myId.toString()
  179. : myId.toString() + friendId.toString();
  180. return Crc32Zlib().convert(utf8.encode(idStr));
  181. }
  182. reset() {
  183. basicInfo = new UserInfo();
  184. bindCardId = '';
  185. isCanProgram = true; //用户能否发约会节目
  186. picNum = 0; //用户相册的数量
  187. incomeMoney = 0; //用户收入金额
  188. frozenMoney = 0;
  189. isFirstTip = false; //第一次进来提示完善资料
  190. mobile = 0; //是否绑定手机号
  191. freeNum = 0; //免费次数
  192. usedNum = 0; //使用的次数
  193. haveReview = false; //有照片在审核
  194. memberEndTime = '';
  195. agentId = 0;
  196. isBannerStatus = false;
  197. homemainIndex = 0;
  198. }
  199. getCurrentPosition({callback}) async {
  200. //使用高德定位
  201. var loc = await AMapLocationClient.getLocation(false);
  202. if (loc != null && loc.latitude != null && loc.longitude != null) {
  203. UserData().latitude = loc.latitude;
  204. UserData().longitude = loc.longitude;
  205. SharedPreferences prefs = await SharedPreferences.getInstance();
  206. await prefs.setDouble(Constants.Latitude, UserData().latitude);
  207. await prefs.setDouble(Constants.Longitude, UserData().longitude);
  208. HttpUtil().getAddress(loc.longitude, loc.latitude);
  209. //HttpUtil().getAddress(106.600798525456, 10.7517368433358);
  210. if (callback != null) callback(loc);
  211. }
  212. }
  213. getCurrentCityKey() {
  214. if (UserData().basicInfo.meetPlace == null ||
  215. UserData().basicInfo.meetPlace == "") return 'HoChiMinhCIty';
  216. var list = UserData().basicInfo.meetPlace.split('-');
  217. if (list.length == 2) {
  218. return list[1];
  219. } else {
  220. return 'HoChiMinhCIty';
  221. }
  222. }
  223. shock() {
  224. //有震动通知
  225. if (UserData().shockNoticSwitch && !UserData().isShocking) {
  226. UserData().isShocking = true;
  227. Vibration.vibrate();
  228. Timer.periodic(Duration(seconds: 3), (timer) async {
  229. UserData().isShocking = false;
  230. timer.cancel();
  231. });
  232. }
  233. }
  234. Future getLoaclVideoPath(String url) async {
  235. var key = Constants.LocalCertifiedvideo + basicInfo.userId.toString();
  236. SharedPreferences spf = await SharedPreferences.getInstance();
  237. var path = spf.get(key);
  238. if (path == null) {
  239. LoadingManage().showLoading();
  240. path = await UploadUtil()
  241. .downloadCertifiedvideo(url, () => LoadingManage().closeLoading());
  242. spf.setString(key, path);
  243. }
  244. return path;
  245. }
  246. }