view.dart 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179
  1. import 'package:flutter/material.dart';
  2. import 'package:get/get.dart';
  3. import 'package:vitalapp/components/appbar.dart';
  4. import 'package:vitalapp/components/side_nav/defines.dart';
  5. import 'package:vitalapp/components/side_nav/side_nav.dart';
  6. import 'package:vitalapp/pages/home/personal_center/controller.dart';
  7. import 'package:vitalapp/pages/home/personal_center/widgets/avatar.dart';
  8. import 'package:vitalapp/pages/home/personal_center/widgets/info.dart';
  9. import 'package:vitalapp/pages/home/personal_center/widgets/password.dart';
  10. import 'package:vitalapp/pages/home/personal_center/widgets/signature.dart';
  11. class PersonalCenterPage extends GetView<PersonalCenterController> {
  12. const PersonalCenterPage({super.key});
  13. @override
  14. Widget build(BuildContext context) {
  15. return Scaffold(
  16. backgroundColor: Colors.white,
  17. appBar: VAppBar(
  18. titleWidget: const Text(
  19. '个人中心',
  20. style: TextStyle(
  21. fontSize: 24,
  22. ),
  23. ),
  24. ),
  25. body: Stack(
  26. children: [
  27. VSideNavView(
  28. items: _buildItems(),
  29. ),
  30. // Positioned(
  31. // bottom: 8,
  32. // left: 200,
  33. // right: 200,
  34. // child: Row(
  35. // mainAxisAlignment: MainAxisAlignment.spaceAround,
  36. // children: [
  37. // VButton(
  38. // label: "下一步",
  39. // onTap: () {
  40. // Get.back();
  41. // },
  42. // ),
  43. // ],
  44. // ),
  45. // ),
  46. ],
  47. )
  48. // Obx(
  49. // () => Container(
  50. // padding: const EdgeInsets.all(16),
  51. // child: Row(
  52. // children: [
  53. // Expanded(
  54. // flex: 1,
  55. // child: Center(
  56. // child: Image.asset(
  57. // "assets/images/exam/21.png",
  58. // fit: BoxFit.cover,
  59. // ),
  60. // ),
  61. // ),
  62. // Expanded(
  63. // flex: 1,
  64. // child: Column(
  65. // children: [
  66. // topInfo(context),
  67. // commonFunction(),
  68. // ],
  69. // ),
  70. // ),
  71. // ],
  72. // ),
  73. // ),
  74. // ),
  75. );
  76. }
  77. List<VSideNavMenuItem> _buildItems() {
  78. final items = <VSideNavMenuItem>[];
  79. items.add(_buildInfoItem());
  80. items.add(_buildAvatarItem());
  81. items.add(_buildPasswordItem());
  82. items.add(_buildSignatureItem());
  83. return items;
  84. }
  85. VSideNavMenuItem _buildAvatarItem() {
  86. return VSideNavMenuItem(
  87. title: '头像',
  88. icon: Icon(
  89. Icons.edit_document,
  90. color: Colors.grey.shade700,
  91. ),
  92. pageBuilder: (_) => const AvatarPage(),
  93. );
  94. }
  95. VSideNavMenuItem _buildInfoItem() {
  96. return VSideNavMenuItem(
  97. title: '基本信息',
  98. icon: Icon(
  99. Icons.edit_document,
  100. color: Colors.grey.shade700,
  101. ),
  102. pageBuilder: (_) => const InfoPage(),
  103. );
  104. }
  105. VSideNavMenuItem _buildPasswordItem() {
  106. return VSideNavMenuItem(
  107. title: '修改密码',
  108. icon: Icon(
  109. Icons.edit_document,
  110. color: Colors.grey.shade700,
  111. ),
  112. pageBuilder: (_) => const PasswordPage(),
  113. );
  114. }
  115. VSideNavMenuItem _buildSignatureItem() {
  116. return VSideNavMenuItem(
  117. title: '签名设置',
  118. icon: Icon(
  119. Icons.edit_document,
  120. color: Colors.grey.shade700,
  121. ),
  122. pageBuilder: (_) => const SignaturePage(),
  123. );
  124. }
  125. Padding topInfo(BuildContext context) {
  126. return Padding(
  127. padding: const EdgeInsets.fromLTRB(30, 10, 10, 40),
  128. child: Row(
  129. children: [
  130. GestureDetector(
  131. child: ClipOval(
  132. child: Image.asset('assets/images/avatar.png'),
  133. ),
  134. onTap: () {},
  135. ),
  136. Padding(
  137. padding: const EdgeInsets.fromLTRB(16, 0, 150, 0),
  138. child: Text(
  139. controller.state.dto.realName ?? '',
  140. style: const TextStyle(
  141. fontWeight: FontWeight.w600,
  142. fontSize: 16,
  143. ),
  144. ),
  145. ),
  146. TextButton(
  147. onPressed: () {},
  148. style: ButtonStyle(
  149. minimumSize: MaterialStateProperty.all(
  150. const Size(80, 60),
  151. ),
  152. foregroundColor: MaterialStateProperty.all<Color>(
  153. const Color.fromARGB(100, 30, 144, 255)),
  154. shape: MaterialStateProperty.all(
  155. RoundedRectangleBorder(
  156. borderRadius: BorderRadius.circular(
  157. 10,
  158. ),
  159. ),
  160. ),
  161. ),
  162. child: const Text(
  163. '编辑资料',
  164. style: TextStyle(color: Colors.blueAccent),
  165. ),
  166. )
  167. ],
  168. ),
  169. );
  170. }
  171. }