view.dart 5.7 KB

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