drawer_view.dart 7.8 KB

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