setting_page.dart 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450
  1. import 'package:fake_push/fake_push.dart';
  2. import 'package:flustars/flustars.dart' as f;
  3. import 'package:flutter/cupertino.dart';
  4. import 'package:flutter/material.dart';
  5. import 'package:liftmanager/common/common.dart';
  6. import 'package:liftmanager/common/user_db.dart';
  7. import 'package:liftmanager/internal/account/account_router.dart';
  8. import 'package:liftmanager/routers/fluro_navigator.dart';
  9. import 'package:liftmanager/utils/toast.dart';
  10. import 'package:liftmanager/widgets/app_bar.dart';
  11. import 'package:liftmanager/widgets/click_item.dart';
  12. import 'package:liftmanager/widgets/my_button.dart';
  13. import 'package:liftmanager/widgets/load_image.dart';
  14. import 'package:flutter_screenutil/flutter_screenutil.dart';
  15. import 'package:liftmanager/internal/bbs/provide/websocket.dart';
  16. import 'package:provider/provider.dart';
  17. import 'package:shared_preferences/shared_preferences.dart';
  18. import 'package:flustars/flustars.dart' as FlutterStars;
  19. import 'package:liftmanager/net/api_service.dart';
  20. import 'package:liftmanager/utils/fast_notification.dart';
  21. import 'dart:math';
  22. import 'package:fluwx/fluwx.dart' as fluwx;
  23. import 'package:liftmanager/internal/account/model/user_info_entity.dart';
  24. import 'package:liftmanager/internal/wode/model/version_item.dart';
  25. import 'package:liftmanager/widgets/update_dialog.dart';
  26. import 'dart:async';
  27. import 'package:package_info/package_info.dart';
  28. import 'package:liftmanager/cache/cache_manager.dart';
  29. import 'package:liftmanager/internal/wode/wode_router.dart';
  30. import 'package:liftmanager/utils/theme_utils.dart';
  31. class SettingPage extends StatefulWidget{
  32. SettingPage(this.indexNow);
  33. final String indexNow;
  34. @override
  35. State<StatefulWidget> createState() {
  36. return SettingPageState();
  37. }
  38. }
  39. class SettingPageState extends State<SettingPage>{
  40. WebSocketProvide provider = WebSocketProvide();
  41. Push _push = Push();
  42. int indexNow;
  43. String checkFalse = "tab_first/check_false";
  44. String checkTrue = "tab_first/check_true";
  45. StreamSubscription<fluwx.WeChatAuthResponse> _wxlogin;
  46. VersionItem versionItem = VersionItem();
  47. PackageInfo packageInfo;
  48. bool _isWechatInstalled = false;
  49. UserInfoEntity userInfoEntity = UserInfoEntity();
  50. String sizeStr = "";
  51. // void removeSocket () async{
  52. // SharedPreferences prefs = await SharedPreferences.getInstance();
  53. // prefs.remove("sessionIdObj");
  54. // }
  55. @override
  56. void initState() {
  57. if(mounted){
  58. setState(() {
  59. indexNow = int.tryParse(widget.indexNow);
  60. });
  61. }
  62. super.initState();
  63. _initFluwx();
  64. getSize();
  65. getInfo();
  66. _wxlogin = fluwx.responseFromAuth.listen((res) {
  67. switch (res.errCode) {
  68. case -4:
  69. {
  70. //拒绝
  71. toasts("已拒绝");
  72. break;
  73. }
  74. case -2:
  75. {
  76. //取消
  77. toasts("已取消");
  78. break;
  79. }
  80. case 0:
  81. {
  82. if (res.type != 2) {
  83. bindMobile(res.code);
  84. }
  85. break;
  86. }
  87. }
  88. });
  89. getUserInfo();
  90. getNewVersion();
  91. }
  92. getNewVersion(){
  93. ApiService(context: context).version(onSuccess: (res){
  94. if(res !=null){
  95. versionItem = res;
  96. setState(() {
  97. });
  98. }
  99. },onError: (code,msg){
  100. toasts(msg);
  101. });
  102. }
  103. getInfo() async {
  104. packageInfo = await PackageInfo.fromPlatform();
  105. }
  106. _initFluwx() async {
  107. await fluwx.registerWxApi(
  108. appId: "wx0f10e6386fb9969e",
  109. doOnAndroid: true,
  110. doOnIOS: true,
  111. universalLink: "https://www.edtyun.com/");
  112. var result = await fluwx.isWeChatInstalled();
  113. _isWechatInstalled = result;
  114. setState(() {});
  115. }
  116. void getUserInfo() {
  117. ApiService(context: context).userInfo(
  118. onSuccess: (data) {
  119. userInfoEntity = data;
  120. setState(() {});
  121. },
  122. onError: (code, msg) {});
  123. }
  124. bindMobile(authCode) {
  125. ApiService(context: context).accountAppBindMobile(authCode,
  126. onSuccess: (res) {
  127. userInfoEntity.wxBindFlag = true;
  128. setState(() {});
  129. }, onError: (code, msg) {
  130. toasts(msg);
  131. });
  132. }
  133. getSize() async {
  134. int size = await getCacheSize();
  135. if (size < 1024) {
  136. sizeStr = "${size}Kb";
  137. } else if (size < 1024 * 1024) {
  138. sizeStr = "${size / 1024}Mb";
  139. }
  140. }
  141. void _showUpdateDialog() {
  142. showDialog(
  143. context: context,
  144. barrierDismissible: false,
  145. builder: (BuildContext context) {
  146. return UpdateDialog(content: versionItem.content,url:versionItem.url,version: versionItem.version,forceUpdate: versionItem.forceUpdate==1?true:false,);
  147. }
  148. );
  149. }
  150. @override
  151. void dispose() {
  152. // TODO: implement dispose
  153. super.dispose();
  154. _wxlogin.cancel();
  155. }
  156. updateUser(alipayAccount){
  157. NewApiService().updateUser({
  158. "userId":FlutterStars.SpUtil.getString(Constant.userId),
  159. "showWhichName":alipayAccount
  160. }, onSuccess: (res) {
  161. String initThisUserInfomation = randomInt(1111, 9999).toString() +
  162. DateTime.now().millisecondsSinceEpoch.toString();
  163. FastNotification.push("initUserInfomation", initThisUserInfomation);
  164. setState(() {});
  165. }, onError: (code, msg) {
  166. toasts(msg);
  167. });
  168. }
  169. randomInt(int min, int max) {
  170. return new Random().nextInt(max) % (max - min + 1) + min;
  171. }
  172. @override
  173. Widget build(BuildContext context) {
  174. double width = MediaQuery.of(context).size.width;
  175. String theme = FlutterStars.SpUtil.getString(Constant.theme);
  176. String themeMode;
  177. switch (theme) {
  178. case "Dark":
  179. themeMode = "开启";
  180. break;
  181. case "Light":
  182. themeMode = "关闭";
  183. break;
  184. default:
  185. themeMode = "跟随系统";
  186. break;
  187. }
  188. return Scaffold(
  189. resizeToAvoidBottomPadding: false,
  190. appBar: MyAppBar(
  191. centerTitle: "系统设置",
  192. ),
  193. body: Stack(
  194. children: <Widget>[
  195. Container(
  196. // padding: EdgeInsets.only(top:70),
  197. child:ListView(
  198. children:<Widget>[
  199. Container(
  200. decoration: BoxDecoration(
  201. border: Border(
  202. bottom: BorderSide(width: 1, color:Color(0xfff5f5f5)),
  203. ),
  204. ),
  205. padding: EdgeInsets.only(left:ScreenUtil().setWidth(15),right:ScreenUtil().setWidth(15)),
  206. height:ScreenUtil().setWidth(60),
  207. child:Row(
  208. mainAxisAlignment: MainAxisAlignment.spaceBetween,
  209. children:<Widget>[
  210. Text(
  211. "昵称/名称切换",
  212. style: TextStyle(
  213. // fontSize:ScreenUtil().setSp(14)
  214. ),
  215. textAlign:TextAlign.start,
  216. ),
  217. Row(
  218. children: <Widget>[
  219. GestureDetector(
  220. child: Container(
  221. // padding: EdgeInsets.only(top:10,left:5,right:5,bottom:10),
  222. child:Row(
  223. children:<Widget>[
  224. LoadAssetImage(
  225. // image: AssetImage(i['img']),
  226. indexNow == 1?checkTrue:checkFalse,
  227. width: ScreenUtil().setWidth(20),
  228. height:ScreenUtil().setWidth(20),
  229. // alignment: Alignment.centerLeft,
  230. ),
  231. Container(
  232. width:5,
  233. child:null
  234. ),
  235. Text(
  236. "昵称",
  237. style: TextStyle(
  238. // color:Color(0xff000000),
  239. // fontSize:ScreenUtil().setSp(14)
  240. ),
  241. textAlign:TextAlign.start,
  242. ),
  243. ]
  244. )
  245. ),
  246. onTap: (){
  247. setState(() {
  248. indexNow = 1;
  249. updateUser(1);
  250. });
  251. print(indexNow);
  252. },
  253. ),
  254. Container(
  255. width:15,
  256. child:null
  257. ),
  258. GestureDetector(
  259. child: Container(
  260. // padding: EdgeInsets.only(top:10,left:5,right:5,bottom:10),
  261. child:Row(
  262. children:<Widget>[
  263. LoadAssetImage(
  264. // image: AssetImage(i['img']),
  265. indexNow == 2?checkTrue:checkFalse,
  266. width: ScreenUtil().setWidth(20),
  267. height:ScreenUtil().setWidth(20),
  268. // alignment: Alignment.centerLeft,
  269. ),
  270. Container(
  271. width:5,
  272. child:null
  273. ),
  274. Text(
  275. "名称",
  276. style: TextStyle(
  277. // color:Colors.black,
  278. // fontSize:ScreenUtil().setSp(14)
  279. ),
  280. textAlign:TextAlign.start,
  281. ),
  282. ]
  283. )
  284. ),
  285. onTap: (){
  286. setState(() {
  287. indexNow = 2;
  288. updateUser(2);
  289. });
  290. print(indexNow);
  291. },
  292. ),
  293. ],
  294. ),
  295. ]
  296. )
  297. ),
  298. // ClickItem(title: "修改密码", content: "",onTap: (){
  299. // // NavigatorUtils.push(context, BbsRouter.videoDetail);
  300. // },),
  301. // ClickItem(title: "帮助与反馈", content: "",onTap: (){
  302. // // NavigatorUtils.push(context, BbsRouter.videoDetail);
  303. // },),
  304. ClickItem(
  305. title: "清理缓存",
  306. content: sizeStr,
  307. onTap: () {
  308. showAlert(
  309. context,
  310. "提示",
  311. "清除所有的保养暂存记录?",
  312. "清除",
  313. () {
  314. NavigatorUtils.goBack(context);
  315. clearCache();
  316. getSize();
  317. toasts("已清除");
  318. },
  319. txt2: "取消",
  320. onPre2: () {
  321. NavigatorUtils.goBack(context);
  322. });
  323. },
  324. ),
  325. Offstage(
  326. offstage: !_isWechatInstalled,
  327. child: ClickItem(
  328. title: "微信绑定",
  329. content: userInfoEntity.wxBindFlag ? '已绑定' : '未绑定',
  330. onTap: () {
  331. if (userInfoEntity.wxBindFlag) {
  332. return;
  333. }
  334. fluwx.sendWeChatAuth(
  335. scope: "snsapi_userinfo",
  336. );
  337. },
  338. )),
  339. ClickItem(
  340. title: "夜间模式",
  341. content: themeMode,
  342. onTap: () => NavigatorUtils.push(context, WodeRouter.themePage)),
  343. ClickItem(
  344. title: "版本",
  345. content: packageInfo?.version??"",
  346. onTap: (){
  347. if(versionItem.code > int.parse(packageInfo?.buildNumber)){
  348. _showUpdateDialog();
  349. }else{
  350. toasts("已是最新版本。");
  351. }
  352. },
  353. ),
  354. ClickItem(
  355. title: "联系我们",
  356. content: "123@qq.com"
  357. ),
  358. ]
  359. )
  360. ),
  361. Positioned(
  362. bottom:0,
  363. left:0,
  364. child:Container(
  365. width: width,
  366. padding: EdgeInsets.only(top:ScreenUtil().setWidth(15),bottom:ScreenUtil().setWidth(15),left:ScreenUtil().setWidth(25),right:ScreenUtil().setWidth(25)),
  367. color:ThemeUtils.getTabsBg(context),
  368. child: Container(
  369. height:ScreenUtil().setWidth(44),
  370. decoration: BoxDecoration(
  371. borderRadius: BorderRadius.circular(ScreenUtil().setWidth(22)),
  372. border: Border.all(
  373. width:0.5,
  374. color:Colors.black,
  375. )
  376. ),
  377. child: FlatButton(
  378. // padding: EdgeInsets.all(15.0),
  379. child: Text("退出登录"),
  380. // textColor: Colors.white,
  381. onPressed: () {
  382. showAlert(context, "提示", "是否确定退出?", "确定", () {
  383. User().clearUser();
  384. FlutterStars.SpUtil.putBool('isInitLink', false);
  385. Provider.of<WebSocketProvide>(context,listen: false).cancelTimer();
  386. Provider.of<WebSocketProvide>(context,listen: false).closeWebSocket();
  387. // removeSocket();
  388. _push.unbindAccount(account: f.SpUtil.getString(Constant.phone));
  389. NavigatorUtils.push(context, AccountRouter.loginPage, clearStack: true);
  390. },txt2: "取消",onPre2: (){
  391. NavigatorUtils.goBack(context);
  392. });
  393. },
  394. ),
  395. ),
  396. )
  397. )
  398. ]
  399. // ListView(padding: EdgeInsets.all(0.0), children: <Widget>[
  400. // ClickItem(title: "清理缓存", content: "0M"),
  401. // Padding(
  402. // padding: const EdgeInsets.all(16),
  403. // child: MyButton(
  404. // onPressed: (){
  405. // showAlert(context, "提示", "是否确定退出?", "确定", (){
  406. // User().clearUser();
  407. // _push.unbindAccount(account: f.SpUtil.getString(Constant.phone));
  408. // NavigatorUtils.push(context, AccountRouter.loginPage, clearStack: true);
  409. // },txt2: "取消",onPre2: (){
  410. // NavigatorUtils.goBack(context);
  411. // });
  412. // },
  413. // text: "退出当前账号",
  414. // ),
  415. // )
  416. // ])
  417. )
  418. );
  419. }
  420. }