view.dart 9.2 KB

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