view.dart 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239
  1. import 'package:electronic_assistant/base/base_page.dart';
  2. import 'package:electronic_assistant/data/bean/template_bean.dart';
  3. import 'package:electronic_assistant/resource/colors.gen.dart';
  4. import 'package:electronic_assistant/resource/string.gen.dart';
  5. import 'package:electronic_assistant/utils/expand.dart';
  6. import 'package:flutter/material.dart';
  7. import 'package:flutter/services.dart';
  8. import 'package:flutter/src/widgets/framework.dart';
  9. import 'package:flutter_screenutil/flutter_screenutil.dart';
  10. import 'package:get/get.dart';
  11. import '../../../resource/assets.gen.dart';
  12. import '../../../router/app_pages.dart';
  13. import '../../../utils/common_style.dart';
  14. import 'controller.dart';
  15. class TemplateEditPage extends BasePage<TemplateEditController> {
  16. const TemplateEditPage({super.key});
  17. static Future<dynamic> addStart() async {
  18. return Get.toNamed(RoutePath.templateEdit);
  19. }
  20. static Future<dynamic> editDetail(TemplateBean bean) async {
  21. return Get.toNamed(RoutePath.templateEdit, arguments: bean);
  22. }
  23. @override
  24. bool immersive() {
  25. return true;
  26. }
  27. @override
  28. Widget buildBody(BuildContext context) {
  29. return Scaffold(
  30. resizeToAvoidBottomInset: false,
  31. backgroundColor: 'F6F6F6'.color,
  32. appBar: _buildAppBar(),
  33. body: Column(
  34. children: [
  35. Expanded(child: _buildTemplateContent()),
  36. _buildTemplateBtn()
  37. ],
  38. ),
  39. );
  40. }
  41. Widget _buildTemplateContent() {
  42. return SingleChildScrollView(
  43. padding: EdgeInsets.symmetric(horizontal: 12.w),
  44. child: SizedBox(
  45. width: double.infinity,
  46. child:
  47. Column(crossAxisAlignment: CrossAxisAlignment.start, children: [
  48. SizedBox(height: 12.h),
  49. Text(StringName.templateEditName.tr,
  50. style: TextStyle(
  51. fontSize: 14.sp, color: ColorName.secondaryTextColor)),
  52. SizedBox(height: 8.h),
  53. _buildTemplateTitle(),
  54. SizedBox(height: 20.h),
  55. Text(StringName.templateEditTitle.tr,
  56. style: TextStyle(
  57. fontSize: 14.sp, color: ColorName.secondaryTextColor)),
  58. Text(StringName.templateEditTitleHint.tr,
  59. style: TextStyle(
  60. fontSize: 12.sp, color: ColorName.tertiaryTextColor)),
  61. SizedBox(height: 12.h),
  62. _buildTemplateTitleList(),
  63. _buildDefaultTemplate(),
  64. _buildAddTemplate()
  65. ]),
  66. ));
  67. }
  68. Widget _buildAddTemplate() {
  69. return GestureDetector(
  70. onTap: () {
  71. controller.onAddTemplate();
  72. },
  73. child: Container(
  74. margin: EdgeInsets.only(bottom: 8.w),
  75. decoration: BoxDecoration(
  76. color: '#F0F0F0'.color, borderRadius: BorderRadius.circular(8.w)),
  77. child: Row(
  78. children: [
  79. SizedBox(width: 15.w),
  80. Assets.images.iconTemplateAddTitle.image(width: 28.w, height: 28.w),
  81. SizedBox(width: 10.w),
  82. Padding(
  83. padding: EdgeInsets.symmetric(vertical: 17.w),
  84. child: Text(StringName.templateEditTitleTxt.tr,
  85. style: TextStyle(
  86. fontSize: 15.sp, color: ColorName.tertiaryTextColor)),
  87. )
  88. ],
  89. ),
  90. ),
  91. );
  92. }
  93. Widget _buildDefaultTemplate() {
  94. return Obx(() {
  95. if (controller.defaultTemplate?.isNotEmpty == true) {
  96. return _templateItem(controller.defaultTemplate!, hideDeleteIcon: true);
  97. } else {
  98. return Container();
  99. }
  100. });
  101. }
  102. Widget _buildTemplateTitleList() {
  103. return Obx(() {
  104. return ListView.builder(
  105. physics: const NeverScrollableScrollPhysics(),
  106. itemBuilder: (context, index) {
  107. var item = controller.templateCustomTitle[index];
  108. return _templateItem(item, itemClick: () {
  109. controller.onUpdateTemplate(index, item);
  110. }, deleteClick: () {
  111. controller.onDeleteTemplate(index);
  112. });
  113. },
  114. itemCount: controller.templateCustomTitle.length,
  115. shrinkWrap: true);
  116. });
  117. }
  118. Widget _templateItem(String title,
  119. {bool? hideDeleteIcon,
  120. VoidCallback? itemClick,
  121. VoidCallback? deleteClick}) {
  122. return GestureDetector(
  123. onTap: itemClick,
  124. child: Container(
  125. margin: EdgeInsets.only(bottom: 8.w),
  126. decoration: BoxDecoration(
  127. color: ColorName.white, borderRadius: BorderRadius.circular(8.w)),
  128. padding: EdgeInsets.symmetric(horizontal: 14.w),
  129. child: Row(
  130. children: [
  131. Padding(
  132. padding: EdgeInsets.symmetric(vertical: 17.w),
  133. child: Text(title,
  134. style: TextStyle(
  135. fontSize: 15.sp, color: ColorName.primaryTextColor)),
  136. ),
  137. SizedBox(width: 14.w),
  138. const Spacer(),
  139. GestureDetector(
  140. onTap: deleteClick,
  141. child: Visibility(
  142. visible: hideDeleteIcon != true,
  143. child: Assets.images.iconRenameClearTxt
  144. .image(width: 20.w, height: 20.w)),
  145. )
  146. ],
  147. )),
  148. );
  149. }
  150. Widget _buildTemplateTitle() {
  151. return Container(
  152. width: double.infinity,
  153. decoration: BoxDecoration(
  154. color: ColorName.white, borderRadius: BorderRadius.circular(8.w)),
  155. child: TextField(
  156. focusNode: controller.focusNode,
  157. controller: controller.titleController,
  158. maxLength: 6,
  159. decoration: InputDecoration(
  160. counterText: '',
  161. contentPadding:
  162. EdgeInsets.symmetric(horizontal: 14.w, vertical: 20.w),
  163. border: const OutlineInputBorder(borderSide: BorderSide.none),
  164. hintStyle: TextStyle(
  165. height: 1, fontSize: 20.sp, color: ColorName.tertiaryTextColor),
  166. hintText: StringName.templateEditNameHint.tr,
  167. ),
  168. style: TextStyle(
  169. height: 1, fontSize: 20.sp, color: ColorName.primaryTextColor)),
  170. );
  171. }
  172. Widget _buildTemplateBtn() {
  173. return GestureDetector(
  174. onTap: () {
  175. controller.onSaveTemplate();
  176. },
  177. child: Center(
  178. child: Container(
  179. margin: EdgeInsets.only(bottom: 16.w),
  180. decoration: getCommonDecoration(8.w),
  181. width: 328.w,
  182. height: 48.w,
  183. child: Center(
  184. child: Text(
  185. StringName.templateEditSave.tr,
  186. style: TextStyle(fontSize: 16.sp, color: ColorName.white),
  187. ),
  188. ),
  189. ),
  190. ),
  191. );
  192. }
  193. AppBar _buildAppBar() {
  194. return AppBar(
  195. scrolledUnderElevation: 0,
  196. systemOverlayStyle: SystemUiOverlayStyle.dark,
  197. backgroundColor: Colors.transparent,
  198. title: Text(
  199. StringName.templateAddTitle.tr,
  200. style: TextStyle(fontSize: 17.sp, color: ColorName.primaryTextColor),
  201. ),
  202. actions: [
  203. GestureDetector(
  204. onTap: () {
  205. controller.onCancel();
  206. },
  207. child: Text(
  208. StringName.cancel.tr,
  209. style:
  210. TextStyle(fontSize: 15.sp, color: ColorName.secondaryTextColor),
  211. ),
  212. ),
  213. SizedBox(width: 12.w)
  214. ],
  215. centerTitle: true,
  216. leading: IconButton(
  217. onPressed: () {
  218. controller.onBack();
  219. },
  220. icon: SizedBox(
  221. width: 24.w,
  222. height: 24.w,
  223. child: Assets.images.iconBack.image())),
  224. );
  225. }
  226. }