view.dart 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183
  1. import 'package:electronic_assistant/base/base_controller.dart';
  2. import 'package:electronic_assistant/base/base_page.dart';
  3. import 'package:electronic_assistant/data/bean/store_item.dart';
  4. import 'package:electronic_assistant/dialog/add_agenda_dialog.dart';
  5. import 'package:electronic_assistant/resource/assets.gen.dart';
  6. import 'package:electronic_assistant/resource/string.gen.dart';
  7. import 'package:electronic_assistant/utils/expand.dart';
  8. import 'package:flutter/cupertino.dart';
  9. import 'package:flutter/src/widgets/framework.dart';
  10. import 'package:flutter_screenutil/flutter_screenutil.dart';
  11. import 'package:get/get.dart';
  12. import 'package:get/get_state_manager/src/rx_flutter/rx_obx_widget.dart';
  13. import 'package:photo_manager/photo_manager.dart';
  14. import 'package:pull_to_refresh/pull_to_refresh.dart';
  15. import '../../resource/colors.gen.dart';
  16. import '../../utils/common_style.dart';
  17. import 'controller.dart';
  18. class AudioPickerPage extends BasePage<AudioPickerController> {
  19. const AudioPickerPage({super.key});
  20. @override
  21. Color backgroundColor() {
  22. return ColorName.transparent;
  23. }
  24. @override
  25. Widget buildBody(BuildContext context) {
  26. return Container(
  27. decoration: BoxDecoration(
  28. color: "#F6F5F8".toColor(),
  29. borderRadius: const BorderRadius.only(
  30. topLeft: Radius.circular(16),
  31. topRight: Radius.circular(16),
  32. ),
  33. ),
  34. height: ScreenUtil().screenHeight - 70.h,
  35. child: Column(
  36. children: [
  37. _buildTitleView(),
  38. Expanded(child: Obx(() {
  39. return SmartRefresher(
  40. enablePullUp: true,
  41. enablePullDown: false,
  42. onLoading: controller.onLoadMoreData,
  43. controller: controller.refreshController,
  44. child: ListView.builder(
  45. itemBuilder: _buildItem,
  46. itemCount: controller.audioList.length,
  47. ),
  48. );
  49. })),
  50. _buildImportBtnView()
  51. ],
  52. ),
  53. );
  54. }
  55. Widget _buildTitleView() {
  56. return Container(
  57. padding: EdgeInsets.symmetric(vertical: 18.h),
  58. child: Stack(
  59. children: [
  60. Center(
  61. child: Text(
  62. StringName.importLocalAudio.tr,
  63. style:
  64. TextStyle(fontSize: 17.sp, color: ColorName.primaryTextColor),
  65. )),
  66. Container(
  67. margin: EdgeInsets.only(right: 16.w),
  68. child: GestureDetector(
  69. onTap: () {
  70. Get.back();
  71. },
  72. child: Align(
  73. alignment: Alignment.centerRight,
  74. child: Text(
  75. StringName.cancel.tr,
  76. style: TextStyle(
  77. fontSize: 14.sp, color: ColorName.secondaryTextColor),
  78. ),
  79. ),
  80. ),
  81. ),
  82. ],
  83. ),
  84. );
  85. }
  86. Widget _buildImportBtnView() {
  87. return Container(
  88. color: ColorName.white,
  89. padding: EdgeInsets.symmetric(vertical: 6.h),
  90. child: GestureDetector(
  91. onTap: () {
  92. controller.onImportClick();
  93. },
  94. child: Container(
  95. height: 48.h,
  96. margin: EdgeInsets.symmetric(horizontal: 16.w),
  97. width: double.infinity,
  98. decoration: getCommonDecoration(8.w),
  99. child: Center(
  100. child: Text(
  101. StringName.selectAndImport.tr,
  102. style: TextStyle(fontSize: 16.sp, color: ColorName.white),
  103. ),
  104. ),
  105. ),
  106. ),
  107. );
  108. }
  109. Widget _buildItem(BuildContext context, int index) {
  110. AssetEntity entity = controller.audioList[index];
  111. return GestureDetector(
  112. onTap: () {
  113. controller.onItemClick(entity);
  114. },
  115. child: Obx(() {
  116. return Container(
  117. decoration: controller.currentEntity?.id == entity.id
  118. ? BoxDecoration(
  119. border: Border.all(color: '#6177F2'.toColor(), width: 2.w),
  120. color: '#E7E9F6'.toColor(),
  121. borderRadius: BorderRadius.circular(8.w),
  122. )
  123. : BoxDecoration(
  124. color: ColorName.white,
  125. borderRadius: BorderRadius.circular(8.w),
  126. ),
  127. margin: EdgeInsets.only(bottom: 8.h, left: 16.w, right: 16.w),
  128. padding: EdgeInsets.symmetric(horizontal: 10.w, vertical: 14.h),
  129. child: Row(
  130. children: [
  131. Assets.images.iconFilesFile.image(width: 32.w, height: 32.w),
  132. SizedBox(width: 8.w),
  133. Expanded(
  134. child: Column(
  135. crossAxisAlignment: CrossAxisAlignment.start,
  136. children: [
  137. Text(
  138. maxLines: 2,
  139. overflow: TextOverflow.ellipsis,
  140. entity.title ?? '',
  141. style: TextStyle(
  142. fontSize: 14.sp,
  143. color: ColorName.primaryTextColor,
  144. fontWeight: FontWeight.bold),
  145. ),
  146. Row(
  147. children: [
  148. Text(entity.duration.toDouble().toFormattedDuration(),
  149. style: TextStyle(
  150. fontSize: 12.sp,
  151. color: ColorName.tertiaryTextColor)),
  152. SizedBox(width: 6.w),
  153. Container(
  154. width: 1,
  155. height: 9,
  156. color: ColorName.tertiaryTextColor),
  157. SizedBox(width: 6.w),
  158. Text(
  159. entity.createDateSecond
  160. ?.toFormattedDate('yyyy-MM-dd HH:mm') ??
  161. '',
  162. style: TextStyle(
  163. fontSize: 12.sp,
  164. color: ColorName.tertiaryTextColor))
  165. ],
  166. )
  167. ],
  168. ),
  169. )
  170. ],
  171. ),
  172. );
  173. }),
  174. );
  175. }
  176. }