drawer_view.dart 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219
  1. import 'package:electronic_assistant/data/repositories/account_repository.dart';
  2. import 'package:electronic_assistant/module/main/controller.dart';
  3. import 'package:electronic_assistant/utils/app_info_util.dart';
  4. import 'package:electronic_assistant/utils/expand.dart';
  5. import 'package:flutter/cupertino.dart';
  6. import 'package:flutter/material.dart';
  7. import 'package:flutter_screenutil/flutter_screenutil.dart';
  8. import 'package:get/get.dart';
  9. import '../../resource/assets.gen.dart';
  10. import '../../resource/colors.gen.dart';
  11. import '../../resource/string.gen.dart';
  12. import '../../router/app_pages.dart';
  13. Widget buildDrawerContent(MainController controller, BuildContext context) {
  14. return SafeArea(
  15. child: Padding(
  16. padding: EdgeInsets.symmetric(horizontal: 16.w),
  17. child: Column(
  18. children: [
  19. SizedBox(height: 12.h),
  20. buildUserInfoView(controller),
  21. SizedBox(height: 12.h),
  22. Container(
  23. height: 72.w,
  24. decoration: BoxDecoration(
  25. borderRadius: BorderRadius.circular(12.w),
  26. border: Border.all(color: ColorName.white20, width: 2.w),
  27. gradient: LinearGradient(
  28. colors: ['#5B618D'.toColor(), '#283B58'.toColor()],
  29. begin: Alignment.centerLeft,
  30. end: Alignment.centerRight,
  31. transform: const GradientRotation(-1.64061),
  32. stops: const [0, 1.0],
  33. ),
  34. ),
  35. child: Row(
  36. children: [
  37. SizedBox(width: 16.w),
  38. IntrinsicHeight(
  39. child: Column(
  40. children: [
  41. SizedBox(
  42. height: 18.h,
  43. child: Assets.images.iconChargeCenterTxt.image()),
  44. SizedBox(height: 4.h),
  45. Text(controller.electricityTxt,
  46. style: TextStyle(
  47. fontSize: 12.sp, color: ColorName.white))
  48. ],
  49. ),
  50. ),
  51. const Spacer(),
  52. DecoratedBox(
  53. decoration: BoxDecoration(
  54. color: Colors.white,
  55. borderRadius: BorderRadius.circular(12.w),
  56. ),
  57. child: Padding(
  58. padding:
  59. const EdgeInsets.symmetric(vertical: 4, horizontal: 11)
  60. .w,
  61. child: Text(
  62. StringName.mainGoCharge.tr,
  63. style: TextStyle(
  64. fontSize: 14.sp,
  65. color: '#374668'.toColor(),
  66. fontWeight: FontWeight.bold),
  67. ),
  68. ),
  69. ),
  70. SizedBox(width: 18.w),
  71. ],
  72. ),
  73. ),
  74. SizedBox(height: 12.h),
  75. Container(
  76. padding: EdgeInsets.symmetric(vertical: 8.h),
  77. decoration: BoxDecoration(
  78. color: ColorName.white,
  79. borderRadius: BorderRadius.circular(12.w),
  80. ),
  81. child: Column(
  82. children: [
  83. buildOperationItem(
  84. Assets.images.iconTempManagement.image(),
  85. StringName.mainDrawerTemplateManagement.tr,
  86. () {},
  87. ),
  88. buildOperationItem(
  89. Assets.images.iconIndustryChange.image(),
  90. StringName.mainDrawerIndustryPositionChange.tr,
  91. () {},
  92. )
  93. ],
  94. ),
  95. ),
  96. SizedBox(height: 8.h),
  97. Container(
  98. padding: EdgeInsets.symmetric(vertical: 8.h),
  99. decoration: BoxDecoration(
  100. color: ColorName.white,
  101. borderRadius: BorderRadius.circular(12.w),
  102. ),
  103. child: Column(
  104. children: [
  105. buildOperationItem(
  106. Assets.images.iconDrawerPrivacyPolicy.image(),
  107. StringName.privacyPolicy.tr,
  108. () {},
  109. ),
  110. buildOperationItem(
  111. Assets.images.iconDrawerUserAgreement.image(),
  112. StringName.userAgreement.tr,
  113. () {},
  114. ),
  115. buildOperationItem(
  116. Assets.images.iconDrawerCheckUpdates.image(),
  117. StringName.mainDrawerCheckUpdates.tr,
  118. () {},
  119. rightView: Text(
  120. controller.versionName,
  121. style: TextStyle(
  122. fontSize: 12.sp, color: ColorName.tertiaryTextColor),
  123. ),
  124. ),
  125. buildOperationItem(
  126. Assets.images.iconComplaintAndReport.image(),
  127. StringName.mainDrawerComplaintAndReport.tr,
  128. () {},
  129. ),
  130. buildOperationItem(
  131. Assets.images.iconLogoff.image(),
  132. StringName.mainDrawerLogoff.tr,
  133. () {},
  134. ),
  135. ],
  136. ),
  137. ),
  138. SizedBox(height: 8.h),
  139. GestureDetector(
  140. onTap: () {
  141. accountRepository.logout();
  142. Navigator.pop(context);
  143. },
  144. child: Container(
  145. height: 44.h,
  146. alignment: Alignment.center,
  147. decoration: BoxDecoration(
  148. color: ColorName.white,
  149. borderRadius: BorderRadius.circular(8.w),
  150. ),
  151. child: Text(
  152. StringName.mainDrawerLogout.tr,
  153. style: TextStyle(
  154. color: "#25262A".toColor(),
  155. ),
  156. ),
  157. ),
  158. ),
  159. const Spacer(),
  160. Padding(
  161. padding: const EdgeInsets.only(bottom: 22).h,
  162. child: Text(StringName.mainDrawerRecordNumber.tr,
  163. style: TextStyle(
  164. fontSize: 12.sp, color: ColorName.tertiaryTextColor)),
  165. )
  166. ],
  167. ),
  168. ),
  169. );
  170. }
  171. Widget buildUserInfoView(MainController controller) {
  172. return Row(
  173. crossAxisAlignment: CrossAxisAlignment.center,
  174. children: [
  175. SizedBox(
  176. width: 44.w,
  177. height: 44.w,
  178. child: Assets.images.iconHomeLogged.image()),
  179. SizedBox(width: 10.w),
  180. Text(controller.loginTxt,
  181. style: TextStyle(
  182. fontSize: 20.sp,
  183. color: ColorName.primaryTextColor,
  184. fontWeight: FontWeight.bold)),
  185. SizedBox(width: 8.w),
  186. ],
  187. );
  188. }
  189. Widget buildOperationItem(Image icon, String title, Function onTap,
  190. {Widget? rightView = const SizedBox.shrink()}) {
  191. return GestureDetector(
  192. onTap: () {
  193. onTap();
  194. },
  195. child: Padding(
  196. padding: const EdgeInsets.symmetric(vertical: 12).h,
  197. child: Row(
  198. crossAxisAlignment: CrossAxisAlignment.center,
  199. children: [
  200. SizedBox(width: 16.w),
  201. SizedBox(width: 20.w, height: 20.w, child: icon),
  202. SizedBox(width: 8.w),
  203. Expanded(
  204. child: Text(title,
  205. style: TextStyle(
  206. fontSize: 14.sp, color: ColorName.primaryTextColor)),
  207. ),
  208. const Spacer(),
  209. rightView ?? const SizedBox.shrink(),
  210. SizedBox(width: 16.w),
  211. ],
  212. ),
  213. ),
  214. );
  215. }