view.dart 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. import 'package:electronic_assistant/base/base_page.dart';
  2. import 'package:electronic_assistant/router/app_pages.dart';
  3. import 'package:electronic_assistant/utils/expand.dart';
  4. import 'package:flutter/cupertino.dart';
  5. import 'package:flutter/material.dart';
  6. import 'package:flutter/services.dart';
  7. import 'package:flutter/src/widgets/framework.dart';
  8. import 'package:flutter_screenutil/flutter_screenutil.dart';
  9. import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
  10. import 'package:get/get.dart';
  11. import 'package:get/get_core/src/get_main.dart';
  12. import '../../../data/bean/template_bean.dart';
  13. import '../../../popup/common_popup.dart';
  14. import '../../../popup/template_utils.dart';
  15. import '../../../resource/assets.gen.dart';
  16. import '../../../resource/colors.gen.dart';
  17. import '../../../resource/string.gen.dart';
  18. import '../../../utils/common_style.dart';
  19. import 'controller.dart';
  20. class TemplateListPage extends BasePage<TemplateListController> {
  21. const TemplateListPage({super.key});
  22. static Future<dynamic> start() async {
  23. return Get.toNamed(RoutePath.templateList);
  24. }
  25. @override
  26. bool immersive() {
  27. return true;
  28. }
  29. @override
  30. Widget buildBody(BuildContext context) {
  31. return WillPopScope(
  32. onWillPop: () async {
  33. controller.onBack();
  34. return false;
  35. },
  36. child: Scaffold(
  37. backgroundColor: '#F6F6F6'.color,
  38. appBar: _buildAppBar(),
  39. body: Column(
  40. children: [
  41. Expanded(child: _buildTemplateList()),
  42. _buildTemplateBtn()
  43. ],
  44. ),
  45. ),
  46. );
  47. }
  48. Widget _buildTemplateBtn() {
  49. return GestureDetector(
  50. onTap: () {
  51. controller.onAddTemplate();
  52. },
  53. child: Center(
  54. child: Container(
  55. margin: EdgeInsets.only(bottom: 16.w),
  56. decoration: getCommonDecoration(8.w),
  57. width: 328.w,
  58. height: 48.w,
  59. child: Center(
  60. child: Text(
  61. StringName.talkAddTemplate.tr,
  62. style: TextStyle(fontSize: 16.sp, color: ColorName.white),
  63. ),
  64. ),
  65. ),
  66. ),
  67. );
  68. }
  69. AppBar _buildAppBar() {
  70. return AppBar(
  71. scrolledUnderElevation: 0,
  72. systemOverlayStyle: SystemUiOverlayStyle.dark,
  73. backgroundColor: Colors.transparent,
  74. title: Text(
  75. StringName.templateManageTitle.tr,
  76. style: TextStyle(fontSize: 17.sp, color: ColorName.primaryTextColor),
  77. ),
  78. centerTitle: true,
  79. leading: IconButton(
  80. onPressed: () {
  81. controller.onBack();
  82. },
  83. icon: SizedBox(
  84. width: 24.w,
  85. height: 24.w,
  86. child: Assets.images.iconBack.image())),
  87. );
  88. }
  89. Widget _buildTemplateList() {
  90. return Obx(() {
  91. return ListView.builder(
  92. padding: EdgeInsets.only(top: 12.w),
  93. itemCount: controller.templateList.length,
  94. itemBuilder: (context, index) {
  95. return _buildTemplateItem(controller.templateList[index]);
  96. },
  97. );
  98. });
  99. }
  100. Widget _buildTemplateItem(TemplateBean templateBean) {
  101. return GestureDetector(
  102. onTap: () {
  103. controller.onDetailClick(templateBean);
  104. },
  105. child: Container(
  106. decoration: BoxDecoration(
  107. color: ColorName.white, borderRadius: BorderRadius.circular(8.w)),
  108. padding: EdgeInsets.only(left: 16.w, right: 12.w),
  109. margin: EdgeInsets.only(bottom: 8.h, left: 12.w, right: 12.w),
  110. child: Row(
  111. children: [
  112. Padding(
  113. padding: EdgeInsets.symmetric(vertical: 20.w),
  114. child: Text(templateBean.name ?? '',
  115. style: TextStyle(
  116. fontSize: 15.sp,
  117. color: ColorName.primaryTextColor,
  118. height: 1)),
  119. ),
  120. const Spacer(),
  121. Visibility(
  122. visible: !templateBean.isDefaultTemp,
  123. child: GestureDetector(
  124. onTapUp: (details) {
  125. showPressTouchPopup(
  126. details.globalPosition + Offset(-40.w, 20.w),
  127. Alignment.bottomLeft,
  128. _buildPopupView(templateBean, 'templateMorePopup'),
  129. tag: 'templateMorePopup');
  130. },
  131. child: Assets.images.iconTemplateMoreOperation
  132. .image(width: 24.w, height: 24.w),
  133. )),
  134. ],
  135. ),
  136. ),
  137. );
  138. }
  139. List<Widget> _buildPopupView(TemplateBean item, String tag) {
  140. return [
  141. createNormalPopupItem(StringName.agendaDetailPopupUpdate.tr,
  142. onItemClick: () {
  143. SmartDialog.dismiss(tag: tag);
  144. controller.templateEdit(item);
  145. }),
  146. createPopupDivider(),
  147. createDeletePopupItem(() {
  148. SmartDialog.dismiss(tag: tag);
  149. controller.onDeleteTemplate(item);
  150. }),
  151. ];
  152. }
  153. }