view.dart 8.2 KB

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