view.dart 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276
  1. import 'package:electronic_assistant/base/base_page.dart';
  2. import 'package:electronic_assistant/data/consts/Constants.dart';
  3. import 'package:electronic_assistant/module/browser/view.dart';
  4. import 'package:electronic_assistant/utils/expand.dart';
  5. import 'package:electronic_assistant/utils/toast_util.dart';
  6. import 'package:flutter/material.dart';
  7. import 'package:flutter_screenutil/flutter_screenutil.dart';
  8. import 'package:get/get.dart';
  9. import '../../../data/repositories/account_repository.dart';
  10. import '../../../resource/assets.gen.dart';
  11. import '../../../resource/colors.gen.dart';
  12. import '../../../resource/string.gen.dart';
  13. import '../../chat/start/view.dart';
  14. import 'controller.dart';
  15. class MainDrawerView extends BasePage<MainDrawerController> {
  16. const MainDrawerView({super.key});
  17. @override
  18. Widget buildBody(BuildContext context) {
  19. return SafeArea(
  20. child: Padding(
  21. padding: EdgeInsets.symmetric(horizontal: 16.w),
  22. child: Column(
  23. children: [
  24. SizedBox(height: 12.h),
  25. buildUserInfoView(),
  26. SizedBox(height: 12.h),
  27. Container(
  28. height: 72.w,
  29. decoration: BoxDecoration(
  30. borderRadius: BorderRadius.circular(12.w),
  31. border: Border.all(color: ColorName.white20, width: 2.w),
  32. gradient: LinearGradient(
  33. colors: ['#5B618D'.toColor(), '#283B58'.toColor()],
  34. begin: Alignment.centerLeft,
  35. end: Alignment.centerRight,
  36. transform: const GradientRotation(-1.64061),
  37. stops: const [0, 1.0],
  38. ),
  39. ),
  40. child: Row(
  41. children: [
  42. SizedBox(width: 16.w),
  43. IntrinsicHeight(
  44. child: Column(
  45. crossAxisAlignment: CrossAxisAlignment.start,
  46. children: [
  47. SizedBox(
  48. height: 18.h,
  49. child: Assets.images.iconChargeCenterTxt.image()),
  50. SizedBox(height: 4.h),
  51. Row(
  52. children: [
  53. Text(StringName.mainLoginChargeTips.tr,
  54. style: TextStyle(
  55. fontSize: 12.sp, color: ColorName.white)),
  56. Text(
  57. '${controller.userInfo?.memberInfo?.electric ?? '0'}',
  58. style: TextStyle(
  59. fontSize: 12.sp, color: ColorName.white))
  60. ],
  61. )
  62. ],
  63. ),
  64. ),
  65. const Spacer(),
  66. DecoratedBox(
  67. decoration: BoxDecoration(
  68. color: Colors.white,
  69. borderRadius: BorderRadius.circular(12.w),
  70. ),
  71. child: Padding(
  72. padding: const EdgeInsets.symmetric(
  73. vertical: 4, horizontal: 11)
  74. .w,
  75. child: Text(
  76. StringName.mainGoCharge.tr,
  77. style: TextStyle(
  78. fontSize: 14.sp,
  79. color: '#374668'.toColor(),
  80. fontWeight: FontWeight.bold),
  81. ),
  82. ),
  83. ),
  84. SizedBox(width: 18.w),
  85. ],
  86. ),
  87. ),
  88. SizedBox(height: 12.h),
  89. _buildContent1(),
  90. SizedBox(height: 8.h),
  91. _buildContent2(),
  92. SizedBox(height: 8.h),
  93. _buildLogOut(),
  94. const Spacer(),
  95. Padding(
  96. padding: const EdgeInsets.only(bottom: 22).h,
  97. child: Text(StringName.mainDrawerRecordNumber.tr,
  98. style: TextStyle(
  99. fontSize: 12.sp, color: ColorName.tertiaryTextColor)),
  100. )
  101. ],
  102. ),
  103. ),
  104. );
  105. }
  106. GestureDetector _buildLogOut() {
  107. return GestureDetector(
  108. onTap: () {
  109. accountRepository.logout();
  110. Get.back();
  111. },
  112. child: Container(
  113. height: 44.h,
  114. alignment: Alignment.center,
  115. decoration: BoxDecoration(
  116. color: ColorName.white,
  117. borderRadius: BorderRadius.circular(8.w),
  118. ),
  119. child: Text(
  120. StringName.mainDrawerLogout.tr,
  121. style: TextStyle(
  122. color: "#25262A".toColor(),
  123. ),
  124. ),
  125. ),
  126. );
  127. }
  128. Container _buildContent2() {
  129. return Container(
  130. padding: EdgeInsets.symmetric(vertical: 8.h),
  131. decoration: BoxDecoration(
  132. color: ColorName.white,
  133. borderRadius: BorderRadius.circular(12.w),
  134. ),
  135. child: Column(
  136. children: [
  137. buildOperationItem(
  138. Assets.images.iconDrawerPrivacyPolicy.image(),
  139. StringName.privacyPolicy.tr,
  140. () {
  141. BrowserPage.start(Constants.privacyPolicy);
  142. },
  143. ),
  144. buildOperationItem(
  145. Assets.images.iconDrawerUserAgreement.image(),
  146. StringName.userAgreement.tr,
  147. () {
  148. BrowserPage.start(Constants.userAgreement);
  149. },
  150. ),
  151. buildOperationItem(
  152. Assets.images.iconDrawerCheckUpdates.image(),
  153. StringName.mainDrawerCheckUpdates.tr,
  154. () {
  155. ToastUtil.showToast(StringName.versionLatest.tr);
  156. },
  157. rightView: Text(
  158. controller.versionName,
  159. style: TextStyle(
  160. fontSize: 12.sp, color: ColorName.tertiaryTextColor),
  161. ),
  162. ),
  163. // buildOperationItem(
  164. // Assets.images.iconComplaintAndReport.image(),
  165. // StringName.mainDrawerComplaintAndReport.tr,
  166. // () {},
  167. // ),
  168. buildOperationItem(
  169. Assets.images.iconLogoff.image(),
  170. StringName.mainDrawerLogoff.tr,
  171. () {
  172. controller.accountLogout();
  173. },
  174. ),
  175. ],
  176. ),
  177. );
  178. }
  179. Container _buildContent1() {
  180. return Container(
  181. padding: EdgeInsets.symmetric(vertical: 8.h),
  182. decoration: BoxDecoration(
  183. color: ColorName.white,
  184. borderRadius: BorderRadius.circular(12.w),
  185. ),
  186. child: Column(
  187. children: [
  188. // buildOperationItem(
  189. // Assets.images.iconTempManagement.image(),
  190. // StringName.mainDrawerTemplateManagement.tr,
  191. // () {},
  192. // ),
  193. Builder(builder: (context) {
  194. return buildOperationItem(
  195. Assets.images.iconIndustryChange.image(),
  196. StringName.mainDrawerIndustryPositionChange.tr,
  197. () {
  198. showStartSheet(context);
  199. },
  200. );
  201. })
  202. ],
  203. ),
  204. );
  205. }
  206. Widget buildUserInfoView() {
  207. return Row(
  208. crossAxisAlignment: CrossAxisAlignment.center,
  209. children: [
  210. SizedBox(
  211. width: 44.w,
  212. height: 44.w,
  213. child: Assets.images.iconHomeLogged.image()),
  214. SizedBox(width: 10.w),
  215. Text(controller.loginTxt,
  216. style: TextStyle(
  217. fontSize: 20.sp,
  218. color: ColorName.primaryTextColor,
  219. fontWeight: FontWeight.bold)),
  220. SizedBox(width: 8.w),
  221. ],
  222. );
  223. }
  224. Widget buildOperationItem(Image icon, String title, Function onTap,
  225. {Widget? rightView = const SizedBox.shrink()}) {
  226. return GestureDetector(
  227. onTap: () {
  228. onTap();
  229. },
  230. child: Container(
  231. padding: const EdgeInsets.symmetric(vertical: 12).h,
  232. color: Colors.transparent,
  233. child: Row(
  234. crossAxisAlignment: CrossAxisAlignment.center,
  235. children: [
  236. SizedBox(width: 16.w),
  237. SizedBox(width: 20.w, height: 20.w, child: icon),
  238. SizedBox(width: 8.w),
  239. Expanded(
  240. child: Text(title,
  241. style: TextStyle(
  242. fontSize: 14.sp, color: ColorName.primaryTextColor)),
  243. ),
  244. const Spacer(),
  245. rightView ?? const SizedBox.shrink(),
  246. SizedBox(width: 16.w)
  247. ],
  248. ),
  249. ),
  250. );
  251. }
  252. void showStartSheet(BuildContext context) {
  253. showModalBottomSheet(
  254. context: context,
  255. isScrollControlled: true,
  256. barrierColor: ColorName.black55,
  257. backgroundColor: ColorName.transparent,
  258. builder: (BuildContext context) {
  259. return const ChatStartPage();
  260. },
  261. );
  262. }
  263. @override
  264. Color backgroundColor() {
  265. return '#F6F5F8'.toColor();
  266. }
  267. }