user.dart 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233
  1. import 'package:cached_network_image/cached_network_image.dart';
  2. import 'package:flutter/material.dart';
  3. import 'package:bot_toast/bot_toast.dart';
  4. import 'package:twong/api/index.dart';
  5. import 'package:twong/utils/index.dart';
  6. import 'package:twong/config/style.dart';
  7. import 'package:twong/models/index.dart';
  8. import 'package:twong/router/index.dart';
  9. import 'package:twong/utils/image_utils.dart';
  10. import 'package:twong/utils/sentry.dart';
  11. class UserPage extends StatefulWidget {
  12. @override
  13. State<StatefulWidget> createState() {
  14. return _UserPageState();
  15. }
  16. }
  17. class _UserPageState extends State<UserPage> {
  18. @override
  19. void initState() {
  20. super.initState();
  21. loadData();
  22. }
  23. void loadData() async {
  24. Network.inst.getUserInfo().catchError((err) {
  25. BotToast.showText(text: err.toString());
  26. });
  27. }
  28. Widget _buildHeader() {
  29. return Container(
  30. color: DColors.Main,
  31. padding: EdgeInsets.only(left: 12.px, right: 12.px),
  32. child: Cache.user == null ? Column(
  33. children: <Widget>[
  34. Container(
  35. width: 120.px,
  36. padding: EdgeInsets.only(top: 58.px),
  37. child: FlatButton(
  38. color: Colors.white,
  39. child: Text('登录'),
  40. shape: StadiumBorder(),
  41. onPressed: () {
  42. Navigator.pushNamed(context, RouteNames.login);
  43. }),
  44. )
  45. ],
  46. ) : Column(
  47. children: [
  48. Container(height: 32.px, child: Row(
  49. children: [
  50. Spacer(),
  51. IconButton(icon: Icon(Icons.settings, color: Colors.white),
  52. onPressed: () async {
  53. Navigator.pushNamed(context, RouteNames.setting);
  54. }),
  55. IconButton(icon: Icon(IconFonts.message, color: Colors.white),
  56. onPressed: () {})
  57. ],
  58. )),
  59. Row(
  60. children: [
  61. Container(
  62. margin: EdgeInsets.only(left: 12.px),
  63. child: CircleAvatar(
  64. radius: 34.px,
  65. backgroundImage: Cache.user?.avatar == null
  66. ? null
  67. : CachedNetworkImageProvider(Cache.user.avatar),
  68. )),
  69. Expanded(child: Container(
  70. margin: EdgeInsets.only(left: 22.px),
  71. child: Column(
  72. crossAxisAlignment: CrossAxisAlignment.start,
  73. children: [
  74. Text(Cache.user.nickname,
  75. style: TextStyle(color: Colors.white, fontSize: 16.px)),
  76. Text("我的ID: ${Cache.user.uid}",
  77. style: TextStyle(color: Colors.white, fontSize: 12.px))
  78. ],
  79. ),
  80. )),
  81. ],
  82. )
  83. ],)
  84. );
  85. }
  86. Widget _buildOrder() {
  87. List<String> titles = ['待付款', '待发货', '待收货', '待评价'];
  88. List<IconData> icons = [
  89. Icons.credit_card,
  90. Icons.shop,
  91. Icons.assignment_returned,
  92. Icons.message_outlined
  93. ];
  94. List<Widget> widgets = [];
  95. for (var i = 0; i < titles.length; i ++) {
  96. widgets.add(Expanded(child: InkWell(
  97. borderRadius: BorderRadius.circular(45),
  98. onTap: () {
  99. Navigator.pushNamed(context, RouteNames.order, arguments: i + 1);
  100. },
  101. child: Column(
  102. children: <Widget>[
  103. Icon(icons[i]),
  104. Container(
  105. padding: EdgeInsets.only(top: 6.px, bottom: 10.px),
  106. child: Text(titles[i]),
  107. )
  108. ],
  109. )
  110. )));
  111. }
  112. widgets.add(Expanded(child: InkWell(
  113. borderRadius: BorderRadius.circular(45),
  114. onTap: () {
  115. Utils.notOpen();
  116. },
  117. child: Column(
  118. children: <Widget>[
  119. Icon(Icons.account_box),
  120. Container(
  121. padding: EdgeInsets.only(top: 6.px, bottom: 10.px),
  122. child: Text('客服'),
  123. )
  124. ],
  125. )
  126. )));
  127. return Container(
  128. decoration: BoxDecoration(
  129. color: Colors.white,
  130. borderRadius: BorderRadius.circular(6.px)
  131. ),
  132. child: Column(
  133. children: <Widget>[
  134. InkWell(
  135. onTap: () { Navigator.pushNamed(context, RouteNames.order, arguments: 0); },
  136. child: Container(
  137. padding: EdgeInsets.only(left: 16.px, right: 12.px, top: 12.px, bottom: 4.px),
  138. child: Row(children: [
  139. Expanded(
  140. child: Text("我的订单", style: TextStyle(fontSize: 14.px))),
  141. Text("查看所有订单 ", style: TextStyle(color: Colors.grey)),
  142. Icon(Icons.keyboard_arrow_right, color: Colors.grey)
  143. ])),
  144. ),
  145. Divider(),
  146. Row(children: widgets)
  147. ],
  148. ),
  149. );
  150. }
  151. Widget _buildMenuList() {
  152. List<String> titles = ['消息', '收藏', '好友', '帮助', '关于'];
  153. List<IconData> icons = [
  154. Icons.message,
  155. Icons.favorite,
  156. Icons.people,
  157. Icons.help,
  158. Icons.error_outline
  159. ];
  160. List<String> routers = [
  161. RouteNames.message,
  162. RouteNames.favours,
  163. RouteNames.friends,
  164. RouteNames.help,
  165. RouteNames.about
  166. ];
  167. List<Widget> widgets = [];
  168. for (var idx = 0; idx < titles.length; idx++) {
  169. widgets.add(InkWell(
  170. highlightColor: Colors.transparent,
  171. onTap: () { Navigator.pushNamed(context, routers[idx]); },
  172. child: Container(
  173. height: 40.px,
  174. decoration: BoxDecoration(
  175. color: Colors.white,
  176. borderRadius: BorderRadius.circular(6.px)
  177. ),
  178. padding: EdgeInsets.only(left: 10.px, right: 10.px),
  179. margin: EdgeInsets.only(bottom: 8.px, left: 12.px, right: 12.px),
  180. child: Row(children: [
  181. Icon(icons[idx]),
  182. Container(width: 16.px),
  183. Expanded(child: Text(titles[idx])),
  184. Icon(Icons.keyboard_arrow_right, color: Colors.grey)
  185. ])
  186. ),
  187. ));
  188. }
  189. return Column(children: widgets);
  190. }
  191. @override
  192. Widget build(BuildContext context) {
  193. return Scaffold(
  194. backgroundColor: DColors.Main,
  195. body: SafeArea(
  196. child: Container(
  197. color: DColors.back,
  198. child: ListView(
  199. physics: NeverScrollableScrollPhysics(),
  200. children: <Widget>[
  201. _buildHeader(),
  202. Container(
  203. decoration: BoxDecoration(
  204. gradient: LinearGradient(
  205. begin: Alignment.topCenter,
  206. end: Alignment.bottomCenter,
  207. colors: [DColors.Main, DColors.back],
  208. ),
  209. ),
  210. padding: EdgeInsets.all(8.px),
  211. child: _buildOrder()
  212. ),
  213. _buildMenuList(),
  214. ],
  215. ),
  216. ),
  217. ),
  218. );
  219. }
  220. }