setting_page.dart 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246
  1. import 'dart:async';
  2. import 'dart:io';
  3. import 'package:fake_push/fake_push.dart';
  4. import 'package:flustars/flustars.dart' as f;
  5. import 'package:flutter/cupertino.dart';
  6. import 'package:flutter/material.dart';
  7. import 'package:liftmanager/cache/cache_manager.dart';
  8. import 'package:liftmanager/common/common.dart';
  9. import 'package:liftmanager/common/user_db.dart';
  10. import 'package:liftmanager/internal/account/account_router.dart';
  11. import 'package:liftmanager/internal/account/model/user_info_entity.dart';
  12. import 'package:liftmanager/internal/wode/model/version_item.dart';
  13. import 'package:liftmanager/internal/wode/wode_router.dart';
  14. import 'package:liftmanager/net/api_service.dart';
  15. import 'package:fluwx/fluwx.dart' as fluwx;
  16. import 'package:liftmanager/routers/fluro_navigator.dart';
  17. import 'package:liftmanager/utils/toast.dart';
  18. import 'package:liftmanager/widgets/app_bar.dart';
  19. import 'package:liftmanager/widgets/click_item.dart';
  20. import 'package:liftmanager/widgets/my_button.dart';
  21. import 'package:flustars/flustars.dart' as flutter_stars;
  22. import 'package:liftmanager/widgets/update_dialog.dart';
  23. import 'package:package_info/package_info.dart';
  24. class SettingPage extends StatefulWidget {
  25. @override
  26. State<StatefulWidget> createState() {
  27. return SettingPageState();
  28. }
  29. }
  30. class SettingPageState extends State<SettingPage> {
  31. Push _push = Push();
  32. UserInfoEntity userInfoEntity = UserInfoEntity();
  33. StreamSubscription<fluwx.WeChatAuthResponse> _wxlogin;
  34. PackageInfo packageInfo;
  35. String sizeStr = "";
  36. bool _isWechatInstalled = false;
  37. VersionItem versionItem = VersionItem();
  38. @override
  39. void initState() {
  40. // TODO: implement initState
  41. super.initState();
  42. _initFluwx();
  43. getSize();
  44. getInfo();
  45. _wxlogin = fluwx.responseFromAuth.listen((res) {
  46. switch (res.errCode) {
  47. case -4:
  48. {
  49. //拒绝
  50. toasts("已拒绝");
  51. break;
  52. }
  53. case -2:
  54. {
  55. //取消
  56. toasts("已取消");
  57. break;
  58. }
  59. case 0:
  60. {
  61. if (res.type != 2) {
  62. bindMobile(res.code);
  63. }
  64. break;
  65. }
  66. }
  67. });
  68. getUserInfo();
  69. getNewVersion();
  70. }
  71. getNewVersion(){
  72. ApiService(context: context).version(onSuccess: (res){
  73. if(res !=null){
  74. versionItem = res;
  75. setState(() {
  76. });
  77. }
  78. },onError: (code,msg){
  79. toasts(msg);
  80. });
  81. }
  82. getInfo() async {
  83. packageInfo = await PackageInfo.fromPlatform();
  84. }
  85. _initFluwx() async {
  86. await fluwx.registerWxApi(
  87. appId: "wx0f10e6386fb9969e",
  88. doOnAndroid: true,
  89. doOnIOS: true,
  90. universalLink: "https://www.edtyun.com/");
  91. var result = await fluwx.isWeChatInstalled();
  92. _isWechatInstalled = result;
  93. setState(() {});
  94. }
  95. void getUserInfo() {
  96. ApiService(context: context).userInfo(
  97. onSuccess: (data) {
  98. userInfoEntity = data;
  99. setState(() {});
  100. },
  101. onError: (code, msg) {});
  102. }
  103. bindMobile(authCode) {
  104. ApiService(context: context).accountAppBindMobile(authCode,
  105. onSuccess: (res) {
  106. userInfoEntity.wxBindFlag = true;
  107. setState(() {});
  108. }, onError: (code, msg) {
  109. toasts(msg);
  110. });
  111. }
  112. getSize() async {
  113. int size = await getCacheSize();
  114. if (size < 1024) {
  115. sizeStr = "${size}Kb";
  116. } else if (size < 1024 * 1024) {
  117. sizeStr = "${size / 1024}Mb";
  118. }
  119. }
  120. void _showUpdateDialog() {
  121. showDialog(
  122. context: context,
  123. barrierDismissible: false,
  124. builder: (BuildContext context) {
  125. return UpdateDialog(content: versionItem.content,url:versionItem.url,version: versionItem.version,forceUpdate: versionItem.forceUpdate==1?true:false,);
  126. }
  127. );
  128. }
  129. @override
  130. void dispose() {
  131. // TODO: implement dispose
  132. super.dispose();
  133. _wxlogin.cancel();
  134. }
  135. @override
  136. Widget build(BuildContext context) {
  137. String theme = flutter_stars.SpUtil.getString(Constant.theme);
  138. String themeMode;
  139. switch (theme) {
  140. case "Dark":
  141. themeMode = "开启";
  142. break;
  143. case "Light":
  144. themeMode = "关闭";
  145. break;
  146. default:
  147. themeMode = "跟随系统";
  148. break;
  149. }
  150. return Scaffold(
  151. appBar: MyAppBar(
  152. centerTitle: "设置",
  153. ),
  154. body: ListView(padding: EdgeInsets.all(0.0), children: <Widget>[
  155. ClickItem(
  156. title: "清理缓存",
  157. content: sizeStr,
  158. onTap: () {
  159. showAlert(
  160. context,
  161. "提示",
  162. "清除所有的保养暂存记录?",
  163. "清除",
  164. () {
  165. NavigatorUtils.goBack(context);
  166. clearCache();
  167. getSize();
  168. toasts("已清除");
  169. },
  170. txt2: "取消",
  171. onPre2: () {
  172. NavigatorUtils.goBack(context);
  173. });
  174. },
  175. ),
  176. Offstage(
  177. offstage: !_isWechatInstalled,
  178. child: ClickItem(
  179. title: "微信绑定",
  180. content: userInfoEntity.wxBindFlag ? '已绑定' : '未绑定',
  181. onTap: () {
  182. if (userInfoEntity.wxBindFlag) {
  183. return;
  184. }
  185. fluwx.sendWeChatAuth(
  186. scope: "snsapi_userinfo",
  187. );
  188. },
  189. )),
  190. ClickItem(
  191. title: "夜间模式",
  192. content: themeMode,
  193. onTap: () => NavigatorUtils.push(context, WodeRouter.themePage)),
  194. ClickItem(
  195. title: "版本",
  196. content: packageInfo?.version,
  197. onTap: (){
  198. if(versionItem.code > int.parse(packageInfo?.buildNumber)){
  199. _showUpdateDialog();
  200. }else{
  201. toasts("已是最新版本。");
  202. }
  203. },
  204. ),
  205. Padding(
  206. padding: const EdgeInsets.all(16),
  207. child: MyButton(
  208. onPressed: () {
  209. showAlert(
  210. context,
  211. "提示",
  212. "是否确定退出?",
  213. "确定",
  214. () {
  215. User().clearUser();
  216. _push.unbindAccount(
  217. account: f.SpUtil.getString(Constant.phone));
  218. NavigatorUtils.push(context, AccountRouter.loginPage,
  219. clearStack: true);
  220. },
  221. txt2: "取消",
  222. onPre2: () {
  223. NavigatorUtils.goBack(context);
  224. });
  225. },
  226. text: "退出当前账号",
  227. ),
  228. )
  229. ]));
  230. }
  231. }