media_view_model.dart 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. import 'dart:convert';
  2. import 'dart:ui' as ui;
  3. import 'dart:io';
  4. import 'package:image/image.dart' as img;
  5. import 'package:camera/camera.dart';
  6. import 'package:file_picker/file_picker.dart';
  7. import 'package:flutter/foundation.dart';
  8. import "package:universal_html/html.dart" as html;
  9. import 'package:flutter/foundation.dart' show kIsWeb;
  10. import '../models/media_model.dart';
  11. import '../services/base_service.dart';
  12. //import 'dart:html' as html show window;
  13. //import 'dart:html' as html;
  14. class MediaViewModel extends ChangeNotifier {
  15. List<XFile> _audios = [];
  16. List<XFile> get audios => _audios;
  17. List<XFile> _temporales = [];
  18. List<XFile> get temporales => _temporales;
  19. List<XFile> _archivos = [];
  20. List<XFile> get archivos => _archivos;
  21. bool _isLoading = false;
  22. bool get isLoading => _isLoading;
  23. Future<void> fetchAudio() async {
  24. _temporales = [];
  25. notifyListeners();
  26. }
  27. Future agregarAudio(XFile value) async {
  28. _audios.add(value);
  29. notifyListeners();
  30. }
  31. Future limpiar() async {
  32. _audios = [];
  33. _temporales = [];
  34. _archivos = [];
  35. notifyListeners();
  36. }
  37. void setIsLoading(bool loading) {
  38. _isLoading = loading;
  39. notifyListeners();
  40. }
  41. Future guardarAudio(
  42. {required int idModuloLocal,
  43. File? audio,
  44. required String nombreModulo}) async {}
  45. Future<XFile?> convertirPlatformFileAXFile(PlatformFile platformFile) async {
  46. if (!kIsWeb) {
  47. final XFile xFile = XFile(platformFile.path.toString(),
  48. name: platformFile.name, mimeType: "archivo");
  49. return xFile;
  50. }
  51. try {
  52. final Uint8List bytes = platformFile.bytes!;
  53. final html.Blob blob = html.Blob([bytes], 'application/octet-stream');
  54. String url = html.Url.createObjectUrlFromBlob(blob);
  55. final XFile xFile =
  56. XFile(url.toString(), name: platformFile.name, mimeType: "archivo");
  57. int lastIndex = xFile.name.lastIndexOf('.');
  58. if (lastIndex != -1 && lastIndex < xFile.name.length - 1) {
  59. String ext = xFile.name.substring(lastIndex + 1);
  60. }
  61. return xFile;
  62. } catch (e) {
  63. print('Error al convertir PlatformFile a XFile: $e');
  64. return null;
  65. }
  66. }
  67. agregarArchivo(XFile? value) {
  68. _archivos.add(value!);
  69. notifyListeners();
  70. }
  71. Future<XFile> convertirAImagePickerWebFile(ui.Image image) async {
  72. // Convertir ui.Image a lista de bytes (Uint8List)
  73. ByteData? byteData = await image.toByteData(format: ui.ImageByteFormat.png);
  74. Uint8List pngBytes = byteData!.buffer.asUint8List();
  75. // Crear imagen con el paquete 'image'
  76. img.Image imgImage = img.decodeImage(pngBytes)!;
  77. // Convertir imagen a lista de bytes (Uint8List)
  78. Uint8List imgBytes = img.encodePng(imgImage) as Uint8List;
  79. // Crear archivo temporal
  80. final tempDir = Directory.systemTemp;
  81. final tempFile =
  82. await File('${tempDir.path}/temp_image.png').writeAsBytes(imgBytes);
  83. // Crear XFile a partir del archivo temporal
  84. return XFile(tempFile.path);
  85. }
  86. Future<void> eliminar(Media m) async {
  87. var r = await BaseService()
  88. .delete("admin/media", body: {"id": m.id.toString()});
  89. Map<String, dynamic> resJson = jsonDecode(r.body);
  90. if (r.statusCode == 200) {}
  91. }
  92. }