me_page.dart 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225
  1. import 'package:cpt_main/modules/demo_page.dart';
  2. import 'package:cs_resources/generated/assets.dart';
  3. import 'package:cs_resources/generated/l10n.dart';
  4. import 'package:cs_resources/theme/app_colors_theme.dart';
  5. import 'package:cs_resources/theme/theme_config.dart';
  6. import 'package:flutter/material.dart';
  7. import 'package:auto_route/auto_route.dart';
  8. import 'package:hooks_riverpod/hooks_riverpod.dart';
  9. import 'package:widgets/ext/ex_widget.dart';
  10. import 'package:widgets/my_appbar.dart';
  11. import 'package:widgets/my_load_image.dart';
  12. import 'package:widgets/my_text_view.dart';
  13. import 'package:widgets/shatter/setting_item_container.dart';
  14. import 'me_view_model.dart';
  15. @RoutePage()
  16. class MePage extends HookConsumerWidget {
  17. const MePage({Key? key}) : super(key: key);
  18. @override
  19. Widget build(BuildContext context, WidgetRef ref) {
  20. final viewModel = ref.watch(meViewModelProvider.notifier);
  21. return Scaffold(
  22. appBar: MyAppBar.appBar(
  23. context,
  24. "",
  25. showBackButton: false,
  26. backgroundColor: context.appColors.btnBgDefault,
  27. systemUiOverlayStyle: MediaQuery.of(context).platformBrightness == Brightness.dark
  28. ? ThemeConfig.systemUiOverlayStyleDarkTheme
  29. : ThemeConfig.systemUiOverlayStyleLightThemeWhite,
  30. ),
  31. backgroundColor: context.appColors.backgroundDark,
  32. body: SingleChildScrollView(
  33. scrollDirection: Axis.vertical,
  34. physics: const BouncingScrollPhysics(),
  35. child: SizedBox(
  36. width: double.infinity,
  37. child: Column(
  38. mainAxisSize: MainAxisSize.max,
  39. crossAxisAlignment: CrossAxisAlignment.center,
  40. children: [
  41. //顶部信息
  42. _buildTopProfile(context, ref),
  43. //关注与粉丝
  44. _buildFollower(context, ref),
  45. //我的发布
  46. SettingItemContainer(
  47. title: S.current.my_post,
  48. iconPath: Assets.mainMeMyPostIcon,
  49. isShowMoreIcon: true,
  50. rightWidget: MyTextView(
  51. "265",
  52. textColor: context.appColors.textPrimary,
  53. fontSize: 20,
  54. isFontMedium: true,
  55. ),
  56. ).onTap(viewModel.gotoMyPostPage).marginOnly(top: 10),
  57. //家庭
  58. SettingItemContainer(
  59. title: S.current.household,
  60. iconPath: Assets.mainMeHouseholdIcon,
  61. isShowMoreIcon: true,
  62. rightWidget: MyTextView(
  63. "2",
  64. textColor: context.appColors.textPrimary,
  65. fontSize: 20,
  66. isFontMedium: true,
  67. ),
  68. ).onTap(viewModel.gotoMyHouseholdPage),
  69. //房产
  70. SettingItemContainer(
  71. title: S.current.estate,
  72. iconPath: Assets.mainMeEstateIcon,
  73. isShowMoreIcon: true,
  74. rightWidget: MyTextView(
  75. "2",
  76. textColor: context.appColors.textPrimary,
  77. fontSize: 20,
  78. isFontMedium: true,
  79. ),
  80. ).onTap(viewModel.gotoMyEstatePage),
  81. //设置
  82. SettingItemContainer(
  83. title: S.current.settings,
  84. iconPath: Assets.mainMeSettingIcon,
  85. isShowMoreIcon: true,
  86. ).onTap(viewModel.gotoSettingPage),
  87. ],
  88. ),
  89. ),
  90. ),
  91. );
  92. }
  93. //编辑顶部的关注与粉丝数量
  94. Widget _buildFollower(BuildContext context, WidgetRef ref) {
  95. final viewModel = ref.watch(meViewModelProvider.notifier);
  96. return Container(
  97. color: context.appColors.whiteSecondBG,
  98. width: double.infinity,
  99. height: 50,
  100. child: Row(
  101. children: [
  102. //关注
  103. Row(
  104. mainAxisSize: MainAxisSize.min,
  105. mainAxisAlignment: MainAxisAlignment.center,
  106. crossAxisAlignment: CrossAxisAlignment.center,
  107. children: [
  108. MyTextView(
  109. S.current.following,
  110. isFontBold: true,
  111. fontSize: 16,
  112. textColor: context.appColors.textBlack,
  113. ),
  114. MyTextView(
  115. "(26)",
  116. isFontBold: true,
  117. fontSize: 16,
  118. textColor: context.appColors.textPrimary,
  119. ),
  120. ],
  121. ).onTap(viewModel.gotoFollowingPage).expanded(),
  122. Container(
  123. width: 0.5,
  124. height: 50,
  125. color: context.appColors.dividerDefault,
  126. ),
  127. //粉丝
  128. Row(
  129. mainAxisSize: MainAxisSize.min,
  130. mainAxisAlignment: MainAxisAlignment.center,
  131. crossAxisAlignment: CrossAxisAlignment.center,
  132. children: [
  133. MyTextView(
  134. S.current.followers,
  135. isFontBold: true,
  136. fontSize: 16,
  137. textColor: context.appColors.textBlack,
  138. ),
  139. MyTextView(
  140. "(12)",
  141. isFontBold: true,
  142. fontSize: 16,
  143. textColor: context.appColors.textPrimary,
  144. ),
  145. ],
  146. ).onTap(viewModel.gotoFollowerPage).expanded(),
  147. ],
  148. ),
  149. );
  150. }
  151. // 编辑顶部的个人信息
  152. Widget _buildTopProfile(BuildContext context, WidgetRef ref) {
  153. final viewModel = ref.watch(meViewModelProvider.notifier);
  154. return Container(
  155. color: context.appColors.btnBgDefault,
  156. width: double.infinity,
  157. padding: const EdgeInsets.only(left: 26, right: 20, top: 5),
  158. height: 120,
  159. child: Row(
  160. mainAxisSize: MainAxisSize.max,
  161. crossAxisAlignment: CrossAxisAlignment.start,
  162. children: [
  163. MyLoadImage(
  164. "https://img1.baidu.com/it/u=1656098746,3560654086&fm=253&fmt=auto&app=120&f=JPEG?w=800&h=800",
  165. width: 80,
  166. height: 80,
  167. isCircle: true,
  168. ),
  169. Column(
  170. mainAxisSize: MainAxisSize.min,
  171. mainAxisAlignment: MainAxisAlignment.start,
  172. crossAxisAlignment: CrossAxisAlignment.start,
  173. children: [
  174. Row(
  175. children: [
  176. MyTextView(
  177. "Wu Bing Bing",
  178. textColor: Colors.white,
  179. fontSize: 18,
  180. isFontMedium: true,
  181. ).expanded(),
  182. const MyAssetImage(
  183. Assets.mainMeEditIcon,
  184. width: 20.5,
  185. height: 20,
  186. ).onTap(viewModel.gotoEditProfilePage, padding: 5),
  187. ],
  188. ),
  189. //电话
  190. MyTextView(
  191. "+86 12345678901",
  192. textColor: Colors.white,
  193. fontSize: 15,
  194. isFontRegular: true,
  195. ),
  196. //住宅
  197. MyTextView(
  198. "Owner135 #08-29",
  199. marginTop: 12,
  200. textColor: Colors.white,
  201. fontSize: 15,
  202. isFontRegular: true,
  203. ),
  204. ],
  205. ).marginOnly(left: 11).expanded(),
  206. ],
  207. ),
  208. );
  209. }
  210. }