wode_page.dart 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321
  1. import 'dart:io';
  2. import 'package:flustars/flustars.dart' as ft;
  3. import 'package:flutter/cupertino.dart';
  4. import 'package:flutter/material.dart';
  5. import 'package:image_picker/image_picker.dart';
  6. import 'package:liftmanager/common/common.dart';
  7. import 'package:liftmanager/internal/account/account_router.dart';
  8. import 'package:liftmanager/internal/account/model/user_info_entity.dart';
  9. import 'package:liftmanager/internal/account/provider/user_provider.dart';
  10. import 'package:liftmanager/internal/wode/page/edit_text_page.dart';
  11. import 'package:liftmanager/internal/wode/wode_router.dart';
  12. import 'package:liftmanager/net/api_service.dart';
  13. import 'package:liftmanager/res/resources.dart';
  14. import 'package:liftmanager/routers/fluro_navigator.dart';
  15. import 'package:liftmanager/internal/team/team_router.dart';
  16. import 'package:liftmanager/utils/image_utils.dart';
  17. import 'package:liftmanager/utils/theme_utils.dart';
  18. import 'package:liftmanager/utils/toast.dart';
  19. import 'package:liftmanager/widgets/app_bar.dart';
  20. import 'package:liftmanager/widgets/click_item.dart';
  21. import 'package:liftmanager/widgets/load_image.dart';
  22. import 'package:provider/provider.dart' as p;
  23. class WodePage extends StatefulWidget {
  24. @override
  25. State<StatefulWidget> createState() {
  26. return WodePageState();
  27. }
  28. }
  29. class WodePageState extends State<WodePage> {
  30. UserProvider provider = UserProvider();
  31. @override
  32. void initState() {
  33. super.initState();
  34. getUserInfo();
  35. }
  36. ///获取用户信息
  37. void getUserInfo() {
  38. ApiService(context: context).userInfo(
  39. onSuccess: (data) {
  40. if (!mounted) {
  41. return;
  42. }
  43. setUser(data);
  44. },
  45. onError: (code, msg) {});
  46. }
  47. void setUser(UserInfoEntity user) {
  48. provider.setUser(user);
  49. }
  50. ///选择图片
  51. void selectPicker() {
  52. showDialog(
  53. context: context,
  54. builder: (BuildContext context) {
  55. return SimpleDialog(
  56. title: Text("修改头像"),
  57. children: ["拍照", '从手机相册选择'].map((String value) {
  58. print("$value");
  59. return SimpleDialogOption(
  60. child: Text(
  61. "${value}",
  62. style: TextStyle(fontSize: 16, fontWeight: FontWeight.w500),
  63. ),
  64. onPressed: () {
  65. _getImage(value == '拍照' ? 1 : 0);
  66. Navigator.of(context).pop();
  67. },
  68. );
  69. }).toList());
  70. });
  71. }
  72. void _getImage(int key) async {
  73. try {
  74. var _imageFile = await ImagePicker.pickImage(
  75. source: key == 1 ? ImageSource.camera : ImageSource.gallery,
  76. maxWidth: 800,
  77. imageQuality: 95);
  78. if (_imageFile != null) {
  79. updateAvatar(_imageFile);
  80. setState(() {});
  81. }
  82. } catch (e) {
  83. toasts("没有权限,无法打开相册!");
  84. }
  85. }
  86. void updateAvatar(File imageFile) {
  87. List<File> list = [imageFile];
  88. ApiService(context: context).uploadMore(list, onSuccess: (imgs) {
  89. ApiService(context: context).modifyAvatar(imgs[0], onSuccess: (res) {
  90. if (res != null) {
  91. getUserInfo();
  92. }
  93. }, onError: (code, msg) {
  94. toasts(msg);
  95. });
  96. });
  97. }
  98. void _updateUserInfo(value) {
  99. ApiService(context: context).modifyName(value, onSuccess: (res) {
  100. if (res != null) {
  101. getUserInfo();
  102. }
  103. }, onError: (code, msg) {
  104. toasts(msg);
  105. });
  106. }
  107. @override
  108. void dispose() {
  109. super.dispose();
  110. }
  111. goToPage(pagePath){
  112. NavigatorUtils.pushResult(context, pagePath, (res){
  113. getUserInfo();
  114. });
  115. }
  116. @override
  117. Widget build(BuildContext context) {
  118. // super.build(context);
  119. bool isDark = ThemeUtils.isDark(context);
  120. Color buttonColor = isDark ? Colours.dark_text : Colors.white;
  121. return p.ChangeNotifierProvider<UserProvider>(
  122. create: (_) => provider,
  123. child: Scaffold(
  124. appBar: MyAppBar(
  125. centerTitle: "个人中心",
  126. isBack: false,
  127. actions: <Widget>[
  128. IconButton(
  129. onPressed: () {
  130. goToPage(WodeRouter.settingPage);
  131. },
  132. icon: LoadAssetImage(
  133. "icon_setting",
  134. key: const Key('add'),
  135. width: 24.0,
  136. height: 24.0,
  137. // color: Colors.white,//todo
  138. color: buttonColor,
  139. ),
  140. )
  141. ],
  142. ),
  143. body: p.Consumer<UserProvider>(builder: (_, provider, __) {
  144. return ListView(padding: EdgeInsets.all(0.0), children: <Widget>[
  145. Stack(
  146. children: <Widget>[
  147. Image.asset(
  148. "assets/images/wode/bg_header.png",
  149. color: isDark
  150. ? Colours.dark_appbar_main
  151. : Colours.appbar_main,
  152. ),
  153. Positioned(
  154. top: 20,
  155. left: 0,
  156. right: 0,
  157. child: Center(
  158. child: GestureDetector(
  159. onTap: () {
  160. selectPicker();
  161. },
  162. child: CircleAvatar(
  163. radius: 30.0,
  164. backgroundColor: Colors.transparent,
  165. backgroundImage: ImageUtils.getImageProvider(
  166. provider.user?.avatarUrl)),
  167. )),
  168. ),
  169. Positioned(
  170. top: 92,
  171. left: 0,
  172. right: 0,
  173. child: Center(
  174. child: GestureDetector(
  175. onTap: () {
  176. Navigator.of(context)
  177. .push(MaterialPageRoute(builder: (context) {
  178. return EditTextPage(
  179. title: "编辑姓名",
  180. mType: 0,
  181. );
  182. })).then((value) {
  183. if (value != null) {
  184. print(value);
  185. _updateUserInfo(value);
  186. }
  187. });
  188. },
  189. child: Text(
  190. "${provider.user != null ? provider.user?.userName : ""}",
  191. style: TextStyle(
  192. color: Colors.white, fontSize: 20),
  193. ))),
  194. ),
  195. ],
  196. ),
  197. // ClickItem(title: "姓名", content: "${provider.user?.userName??""}"),
  198. ClickItem(
  199. title: "手机号", content: "${provider.user?.mobile ?? ""}"),
  200. ClickItem(
  201. title: "我的团队",
  202. content: "${provider.user?.companyName ?? ""}",
  203. onTap: () {
  204. if (ft.SpUtil.getString(Constant.companyId).length == 0) {
  205. showAlert(
  206. context,
  207. "提示",
  208. "尚未加入团队,是否立即加入?",
  209. "确定",
  210. () {
  211. NavigatorUtils.goBack(context);
  212. // NavigatorUtils.push(
  213. // context, TeamRouter.teamListPage);
  214. goToPage(TeamRouter.teamListPage);
  215. },
  216. txt2: "取消",
  217. onPre2: () {
  218. NavigatorUtils.goBack(context);
  219. });
  220. } else {
  221. // NavigatorUtils.push(context, TeamRouter.teamCardPage);
  222. goToPage(TeamRouter.teamCardPage);
  223. }
  224. },
  225. ),
  226. ClickItem(
  227. title: "团队角色", content: "${provider.user?.roleName ?? ""}"),
  228. ClickItem(
  229. title: "操作证",
  230. content: Constant
  231. .certificateStatus[provider.user?.certificateStatus ?? 0],
  232. onTap: () {
  233. if (ft.SpUtil.getString(Constant.companyId).length == 0) {
  234. showAlert(
  235. context,
  236. "提示",
  237. "尚未加入团队,是否立即加入?",
  238. "确定",
  239. () {
  240. NavigatorUtils.goBack(context);
  241. // NavigatorUtils.push(
  242. // context, TeamRouter.teamListPage);
  243. goToPage(TeamRouter.teamListPage);
  244. },
  245. txt2: "取消",
  246. onPre2: () {
  247. NavigatorUtils.goBack(context);
  248. });
  249. } else {
  250. // NavigatorUtils.push(
  251. // context, AccountRouter.certificatePage);
  252. goToPage(AccountRouter.certificatePage);
  253. }
  254. },
  255. ),
  256. // Container(
  257. // margin: EdgeInsets.only(top: 8, bottom: 8),
  258. // child: ClickItem(title: "我的收藏", content: "",onTap: (){
  259. // NavigatorUtils.push(context, TeamRouter.teamListPage);
  260. // },),
  261. // ),
  262. ClickItem(
  263. title: "团队管理",
  264. content: "",
  265. onTap: () {
  266. // NavigatorUtils.push(context, TeamRouter.teamListPage);
  267. goToPage(TeamRouter.teamListPage);
  268. },
  269. ),
  270. Container(
  271. margin: EdgeInsets.only(bottom: 8),
  272. child: ClickItem(
  273. title: "团队成员",
  274. content: "",
  275. onTap: () {
  276. if (ft.SpUtil.getString(Constant.companyId).length == 0) {
  277. showAlert(
  278. context,
  279. "提示",
  280. "尚未加入团队,是否立即加入?",
  281. "确定",
  282. () {
  283. NavigatorUtils.goBack(context);
  284. goToPage(TeamRouter.teamListPage);
  285. // NavigatorUtils.push(
  286. // context, TeamRouter.teamListPage);
  287. },
  288. txt2: "取消",
  289. onPre2: () {
  290. NavigatorUtils.goBack(context);
  291. });
  292. } else {
  293. // NavigatorUtils.push(
  294. // context, "${TeamRouter.teamUserPage}");
  295. goToPage(TeamRouter.teamUserPage);
  296. }
  297. },
  298. ),
  299. )
  300. ]);
  301. })));
  302. }
  303. @override
  304. bool get wantKeepAlive => true;
  305. }