Hecho algún cambio en clases del modelo y dejado anotaciones sobre cosas para…

Hecho algún cambio en clases del modelo y dejado anotaciones sobre cosas para aclarar. Hay que hablar del sistema de calidad y perfiles
parent 7f744b7b
...@@ -2,16 +2,17 @@ import 'dart:io'; ...@@ -2,16 +2,17 @@ import 'dart:io';
import 'convertible.dart'; import 'convertible.dart';
import 'formato.dart'; import 'formato.dart';
class Archivo extends Convertible{ // TODO: QUE PASA SI NO RECONOCEMOS EL FORMATO?
class Archivo extends Convertible {
final File _file; final File _file;
List<String> metadatos = []; List<String> metadatos = [];
File get file => _file; File get file => _file;
Archivo({required String id, required File file}): Archivo({required super.id, required File file}):
_file = file, _file = file,
super(id: id, super(nombre: file.path.split('/').last,
nombre: file.path.split('/').last, // TODO: POR AHORA USAMOS (!) PERO HAY QUE TENERLO EN CUENTA
formatoOriginal: ClaseFormato.fromExtension(file.path.split('/').last.split('.').last), formatoOriginal: Formato.fromExtension(file.path.split('.').last)!,
icon: ClaseFormato.fromExtension(file.path.split('/').last.split('.').last).tipoMultimedia.icono); icon: Formato.fromExtension(file.path.split('.').last)!.tipoMultimedia.icono);
} }
\ No newline at end of file
...@@ -7,15 +7,15 @@ import 'formato.dart'; ...@@ -7,15 +7,15 @@ import 'formato.dart';
class Carpeta extends ElementoSeleccionable{ class Carpeta extends ElementoSeleccionable{
final Directory _directory; final Directory _directory;
bool _incluirSubcarpetas = false; final bool _incluirSubcarpetas = false;
final List<InfoFormato> _formatos; final List<InfoFormato> _formatos;
Directory get directory => _directory; Directory get directory => _directory;
List<InfoFormato> get formatos => List.unmodifiable(_formatos); List<InfoFormato> get formatos => List.unmodifiable(_formatos);
Carpeta({required String id, required Directory directory}): Carpeta({required super.id, required Directory directory}):
_directory = directory, _formatos = [], _directory = directory, _formatos = [],
super(id: id, nombre: directory.path.split('/').last, icon: const Icon(Icons.folder_outlined)); super(nombre: directory.path.split('/').last, icon: const Icon(Icons.folder_outlined));
@override @override
void convertir() { void convertir() {
...@@ -32,20 +32,20 @@ class InfoFormato { ...@@ -32,20 +32,20 @@ class InfoFormato {
bool get subcarpeta => _subcarpeta; bool get subcarpeta => _subcarpeta;
bool get seleccionado => _seleccionado; bool get seleccionado => _seleccionado;
Convertible get conversion => _conversion; Convertible get conversion => _conversion;
ClaseFormato get formatoOriginal => _conversion.formatoOriginal; Formato get formatoOriginal => _conversion.formatoOriginal;
Formato? get formatoDestino => _conversion.formatoDestino; Formato? get formatoDestino => _conversion.formatoDestino;
List<Archivo> get archivos => List.unmodifiable(_archivos); List<Archivo> get archivos => List.unmodifiable(_archivos);
set seleccionado(bool value) => _seleccionado = value; set seleccionado(bool value) => _seleccionado = value;
set formato(Formato? destino) => _conversion.formatoDestino = destino; set formato(Formato? destino) => _conversion.formatoDestino = destino;
InfoFormato({required ClaseFormato formato, InfoFormato({required Formato formato,
required String nombreCarpeta, required String nombreCarpeta,
required bool subCarpeta, required bool subCarpeta,
bool? seleccionado, bool? seleccionado,
required List<File> archivos}): required List<File> archivos}):
_subcarpeta = subCarpeta, _seleccionado = seleccionado ?? !subCarpeta, _archivos = archivos, _subcarpeta = subCarpeta, _seleccionado = seleccionado ?? !subCarpeta, _archivos = archivos,
_conversion = Convertible(id: "null", nombre: '${nombreCarpeta} > ${formato.name}', _conversion = Convertible(id: "null", nombre: '$nombreCarpeta > ${formato.name}',
icon: Icon(Icons.find_in_page_outlined), formatoOriginal: formato); icon: Icon(Icons.find_in_page_outlined), formatoOriginal: formato);
void convertir(){ void convertir(){
......
import 'elemento_seleccionable.dart'; import 'elemento_seleccionable.dart';
import 'formato.dart'; import 'formato.dart';
// TODO: QUE PASA SI NO RECONOCEMOS EL FORMATO?
class Convertible extends ElementoSeleccionable{ class Convertible extends ElementoSeleccionable{
final ClaseFormato _formatoOriginal; final Formato _formatoOriginal;
Formato? _formatoDestino; Formato? formatoDestino;
ClaseFormato get formatoOriginal => _formatoOriginal; Formato get formatoOriginal => _formatoOriginal;
Formato? get formatoDestino => _formatoDestino;
set formatoDestino(Formato? siguiente) => _formatoDestino = siguiente;
Convertible({required super.id, required super.nombre, required super.icon, Convertible({required super.id, required super.nombre, required super.icon,
required ClaseFormato formatoOriginal, Formato? formatoDestino = null}): required Formato formatoOriginal, this.formatoDestino}):
_formatoOriginal = formatoOriginal, _formatoOriginal = formatoOriginal;
_formatoDestino = formatoDestino;
@override
void convertir(){ void convertir(){
// TODO: <implement> // TODO: <implement>
} }
......
...@@ -5,11 +5,11 @@ abstract class ElementoSeleccionable{ ...@@ -5,11 +5,11 @@ abstract class ElementoSeleccionable{
final String _nombre; final String _nombre;
final Icon _icono; final Icon _icono;
String get id => this._id; String get id => _id;
String get nombre => this._nombre; String get nombre => _nombre;
Icon get icono => this._icono; Icon get icono => _icono;
ElementoSeleccionable({required String id, ElementoSeleccionable({required id,
required String nombre, required String nombre,
required Icon icon}): required Icon icon}):
_id = id, _nombre = nombre, _icono = icon; _id = id, _nombre = nombre, _icono = icon;
......
...@@ -2,17 +2,18 @@ import 'package:flutter/material.dart'; ...@@ -2,17 +2,18 @@ import 'package:flutter/material.dart';
import 'convertible.dart'; import 'convertible.dart';
import 'formato.dart'; import 'formato.dart';
// TODO: QUE PASA SI NO RECONOCEMOS EL FORMATO?
class Enlace extends Convertible{ class Enlace extends Convertible{
final String _direccion; final String _direccion;
final RedSocial _redSocial; final RedSocial _redSocial;
List<String> metadatos = []; List<String> metadatos = [];
Enlace({required String id, required String direccion}): Enlace({required String super.id, required String direccion}):
_direccion = direccion, _direccion = direccion,
_redSocial = RedSocial.FACEBOOK, _redSocial = RedSocial.FACEBOOK,
super(id: id, super(nombre: direccion.split('/').last,
nombre: direccion.split('/').last, // TODO: POR AHORA USAMOS (!) PERO HAY QUE TENERLO EN CUENTA
formatoOriginal: ClaseFormato.fromExtension('png'), formatoOriginal: Formato.fromExtension('png')!,
icon: Icon(Icons.insert_drive_file_outlined)); icon: Icon(Icons.insert_drive_file_outlined));
@override @override
......
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
class Formato{ // TODO: AÑADIR CALIDAD
final ClaseFormato _extension; enum Formato {
Calidad _calidad; png('Portable Network Graphics', TipoMultimedia.imagen, Clasificacion.calidad, [],
'ClaseFormato gráfico basado en un algoritmo de compresión sin pérdida para bitmaps no sujeto a patentes. Fue desarrollado en buena parte para solventar las deficiencias del formato GIF y permite almacenar imágenes con una mayor profundidad de contraste y otros datos importantes.'
ClaseFormato get claseFormato => _extension;
Calidad get calidad => _calidad;
set calidad(Calidad calidad) => _calidad = calidad;
bool get isVideo => _extension.tipoMultimedia == TipoMultimedia.VIDEO;
Formato({required ClaseFormato extension, Calidad calidad = Calidad.Media}):
_extension = extension, _calidad = calidad;
Formato copiaSiNulo({ClaseFormato? formato, Calidad? calidad}){
return Formato(
extension: formato ?? this.claseFormato,
calidad: calidad ?? this._calidad
);
}
}
enum ClaseFormato{
PNG('png',
'Portable Network Graphics',
TipoMultimedia.IMAGEN,
'Calidad',
[],
'Formato gráfico basado en un algoritmo de compresión sin pérdida para bitmaps no sujeto a patentes. Fue desarrollado en buena parte para solventar las deficiencias del formato GIF y permite almacenar imágenes con una mayor profundidad de contraste y otros datos importantes.'
), ),
JPG('jpg',
'Joint Photographic Experts Group', jpg('Joint Photographic Experts Group', TipoMultimedia.imagen, Clasificacion.ligero, [],
TipoMultimedia.IMAGEN,
'Ligero',
[],
'A pesar de ser un método de compresión, es a menudo considerado como un formato de archivo. Es el formato de imagen más común, utilizado por las cámaras fotográficas digitales y otros dispositivos de captura de imagen' 'A pesar de ser un método de compresión, es a menudo considerado como un formato de archivo. Es el formato de imagen más común, utilizado por las cámaras fotográficas digitales y otros dispositivos de captura de imagen'
), ),
TIF('tif',
'Tagged Image File Format', tif('Tagged Image File Format', TipoMultimedia.imagen, Clasificacion.calidad, [],
TipoMultimedia.IMAGEN,
'Calidad',
[],
'Un formato de archivo informático para almacenar imágenes de mapa de bits. Es prevalente en la industria gráfica y en la fotografía profesional por su versatilidad y compresión no destructiva.' 'Un formato de archivo informático para almacenar imágenes de mapa de bits. Es prevalente en la industria gráfica y en la fotografía profesional por su versatilidad y compresión no destructiva.'
), ),
MP3('mp3',
'MPEG-1 Layer III', mp3('MPEG-1 Layer III', TipoMultimedia.audio, Clasificacion.calidad,
TipoMultimedia.AUDIO, [ Metadato.title, Metadato.artist, Metadato.album, Metadato.genre,
'Calidad', Metadato.composer, Metadato.track, Metadato.language],
[ Metadato('Título', 'title'),
Metadato('Artista', 'artist'),
Metadato('Álbum', 'album'),
Metadato('Género', 'genre'),
Metadato('Compositor', 'composer'),
Metadato('Número de pista', 'track', true),
Metadato('Idioma', 'language')],
'Un formato de compresión de audio digital que usa un algoritmo con pérdida para conseguir un menor tamaño de archivo. Es un formato de audio común utilizado para música tanto en computadoras como en reproductores de audio portátil.' 'Un formato de compresión de audio digital que usa un algoritmo con pérdida para conseguir un menor tamaño de archivo. Es un formato de audio común utilizado para música tanto en computadoras como en reproductores de audio portátil.'
), ),
OGG('ogg',
'Xiph.org Ogg', ogg('Xiph.org Ogg', TipoMultimedia.audio, Clasificacion.versatil, [],
TipoMultimedia.AUDIO,
'Versátil',
[],
'Un formato contenedor libre y abierto, desarrollado y mantenido por la Fundación Xiph.Org que no está restringido por las patentes de software, y está diseñado para proporcionar una difusión de flujo eficiente y manipulación de multimedios digitales de alta calidad.' 'Un formato contenedor libre y abierto, desarrollado y mantenido por la Fundación Xiph.Org que no está restringido por las patentes de software, y está diseñado para proporcionar una difusión de flujo eficiente y manipulación de multimedios digitales de alta calidad.'
), ),
WAV('wav',
'Waveform Audio File Format', wav('Waveform Audio File Format', TipoMultimedia.audio, Clasificacion.calidad, [],
TipoMultimedia.AUDIO,
'Calidad',
[],
'Un formato de audio digital con o sin compresión de datos desarrollado por Microsoft e IBM que se utiliza para almacenar flujos digitales de audio en el PC, mono y estéreo a diversas resoluciones y velocidades de muestreo.' 'Un formato de audio digital con o sin compresión de datos desarrollado por Microsoft e IBM que se utiliza para almacenar flujos digitales de audio en el PC, mono y estéreo a diversas resoluciones y velocidades de muestreo.'
), ),
MP4('mp4',
'MPEG-4 Parte 14', mp4('MPEG-4 Parte 14', TipoMultimedia.video, Clasificacion.calidad,
TipoMultimedia.VIDEO, [ Metadato.title, Metadato.author, Metadato.album, Metadato.year,
'Calidad', Metadato.genre, Metadato.composer, Metadato.track,
[ Metadato('Título', 'title'), Metadato.description, Metadato.comment],
Metadato('Autor', 'author'),
Metadato('Álbum', 'album'),
Metadato('Año', 'year', true),
Metadato('Género', 'genre'),
Metadato('Compositor', 'composer'),
Metadato('Número de pista', 'track', true),
Metadato('Descripción', 'description'),
Metadato('Comentario', 'comment')],
'Un formato contenedor especificado como parte del estándar internacional MPEG-4 de ISO/IEC. Es utilizado para almacenar los formatos audiovisuales especificados por ISO/IEC y el grupo MPEG (Moving Picture Experts Group) al igual que otros formatos audiovisuales disponibles.' 'Un formato contenedor especificado como parte del estándar internacional MPEG-4 de ISO/IEC. Es utilizado para almacenar los formatos audiovisuales especificados por ISO/IEC y el grupo MPEG (Moving Picture Experts Group) al igual que otros formatos audiovisuales disponibles.'
), ),
MKV('mkv',
'Matroshka', mkv('Matroshka', TipoMultimedia.video, Clasificacion.calidad,
TipoMultimedia.VIDEO, [ Metadato.title, Metadato.description, Metadato.language ],
'Calidad',
[ Metadato('Título', 'title'),
Metadato('Descripción', 'description'),
Metadato('Idioma', 'language')],
'Un formato contenedor abierto que puede almacenar una cantidad muy grande de vídeo, audio, imagen o pistas de subtítulos dentro de un solo archivo. Su finalidad es la de servir como formato universal para el almacenamiento de contenidos audiovisuales y multimedia, como películas o programas de televisión, imágenes y textos.' 'Un formato contenedor abierto que puede almacenar una cantidad muy grande de vídeo, audio, imagen o pistas de subtítulos dentro de un solo archivo. Su finalidad es la de servir como formato universal para el almacenamiento de contenidos audiovisuales y multimedia, como películas o programas de televisión, imágenes y textos.'
), ),
WMV('wmv',
'Windows Media Video', wmv('Windows Media Video', TipoMultimedia.video, Clasificacion.calidad,
TipoMultimedia.VIDEO, [ Metadato.title, Metadato.author, Metadato.rating, Metadato.comment ],
'Calidad',
[ Metadato('Título', 'title'),
Metadato('Autor', 'author'),
Metadato('Valoración', 'rating'),
Metadato('Comentario', 'comment')],
'Un formato de vídeo desarrollado por Microsoft, que forma parte del framework Windows Media. No está contruida solo con tecnología interna de Microsoft. Desde la versión 7 (WMV1), Microsoft ha utilizado su propia versión no estandarizada de MPEG-4. El vídeo a menudo se combina con sonido en formato Windows Media Audio.' 'Un formato de vídeo desarrollado por Microsoft, que forma parte del framework Windows Media. No está contruida solo con tecnología interna de Microsoft. Desde la versión 7 (WMV1), Microsoft ha utilizado su propia versión no estandarizada de MPEG-4. El vídeo a menudo se combina con sonido en formato Windows Media Audio.'
); );
final String _extension; final String _nombreCompleto;
final String _nombre;
final TipoMultimedia _tipoMultimedia; final TipoMultimedia _tipoMultimedia;
final String _descripcion; final Clasificacion _clasificacion;
final String _clasificacion;
final List<Metadato> _metadatos; final List<Metadato> _metadatos;
final String _descripcion;
String get extension => _extension;
String get nombre => _nombre; String get extension => name;
String get descripcion => _descripcion; String get nombre => _nombreCompleto;
Clasificacion get clasificacion => _clasificacion;
TipoMultimedia get tipoMultimedia => _tipoMultimedia; TipoMultimedia get tipoMultimedia => _tipoMultimedia;
List<Metadato> get metadatos => _metadatos; List<Metadato> get metadatos => _metadatos;
String get descripcion => _descripcion;
const ClaseFormato(this._extension, this._nombre, this._tipoMultimedia, this._clasificacion, this._metadatos, this._descripcion); const Formato(this._nombreCompleto, this._tipoMultimedia, this._clasificacion,
this._metadatos, this._descripcion);
static List<ClaseFormato> listadoFormatos({required TipoMultimedia tipo, ClaseFormato? excepcion}){
final toRet = <ClaseFormato>[];
for(var formato in ClaseFormato.values){ /// Devuelve aquellos formatos de TipoMultimedia que no sean excepcion
static List<Formato> listadoFormatos({required TipoMultimedia tipo, Formato? excepcion}){
final toRet = <Formato>[];
for(var formato in Formato.values){
if(formato._tipoMultimedia == tipo && formato != excepcion) { if(formato._tipoMultimedia == tipo && formato != excepcion) {
toRet.add(formato); toRet.add(formato);
} }
} }
return toRet; return toRet;
} }
static ClaseFormato fromExtension(String extension){ /// Si la extensión no es valida devuelve nulo
for(ClaseFormato f in ClaseFormato.values){ static Formato? fromExtension(String extension){
if(f._extension == extension){ for(Formato f in Formato.values) {
if(f.name == extension){
return f; return f;
} }
} }
return null;
return ClaseFormato.PNG;
} }
} }
enum TipoMultimedia{ enum TipoMultimedia {
VIDEO(Icon(Icons.movie_creation_outlined)), video(Icon(Icons.movie_creation_outlined)),
AUDIO(Icon(Icons.music_note_outlined)), audio(Icon(Icons.music_note_outlined)),
IMAGEN(Icon(Icons.image_outlined)); imagen(Icon(Icons.image_outlined));
final Icon icono; final Icon icono;
const TipoMultimedia(this.icono); const TipoMultimedia(this.icono);
} }
enum Calidad{ enum Clasificacion {
Baja, calidad("Calidad"), ligero("Ligero"), versatil("Versátil");
Media,
Alta, final String nombre;
Muy_alta; const Clasificacion(this.nombre);
} }
class Metadato{ enum Calidad {
baja("Baja"), media("Media"), alta("Alta"), muyAlta("Muy Alta");
final String texto;
const Calidad(this.texto);
}
enum Metadato {
title("Título"),
artist("Artista"),
author("Autor"),
album("Álbum"),
genre("Género"),
composer("Compositor"),
track("Número de pista", true),
language("Idioma"),
year("Año", true),
description("Descripción"),
comment("Comentario"),
rating("Valoración", true);
final String _nombreMostrado; final String _nombreMostrado;
final String _nombreInterno; final bool _esNumerico;
final bool _numerico;
String get nombreMostrado => _nombreMostrado; String get nombreMostrado => _nombreMostrado;
String get nombreInterno => _nombreInterno; bool get numerico => _esNumerico;
bool get numerico => _numerico;
const Metadato(String nombreMostrado, String nombreInterno, [bool numerico = false]): const Metadato(this._nombreMostrado, [this._esNumerico = false]);
_nombreMostrado = nombreMostrado, _nombreInterno = nombreInterno, _numerico = numerico;
} }
\ No newline at end of file
import 'formato.dart'; import 'formato.dart';
enum Perfil { enum Perfil {
IMAGEN_ALTA_CALIDAD('Alta calidad', ClaseFormato.PNG, ClaseFormato.WAV, ClaseFormato.MKV ,Calidad.Muy_alta), IMAGEN_ALTA_CALIDAD('Alta calidad', Formato.png, Formato.wav, Formato.mkv, Calidad.muyAlta),
IMAGEN_COMPARTIR('Para compartir', ClaseFormato.JPG, ClaseFormato.MP3, ClaseFormato.MP4, Calidad.Baja); IMAGEN_COMPARTIR('Para compartir', Formato.jpg, Formato.mp3, Formato.mp4, Calidad.baja);
final String nombre; final String nombre;
final ClaseFormato? extensionImagen; final Formato? extensionImagen;
final ClaseFormato? extensionMusica; final Formato? extensionMusica;
final ClaseFormato? extensionVideo; final Formato? extensionVideo;
final Calidad calidad; final Calidad calidad;
const Perfil(this.nombre, this.extensionImagen, this.extensionMusica, const Perfil(this.nombre, this.extensionImagen, this.extensionMusica,
......
...@@ -68,7 +68,7 @@ class _PaginaConfiguracionState extends State<PaginaConfiguracion> { ...@@ -68,7 +68,7 @@ class _PaginaConfiguracionState extends State<PaginaConfiguracion> {
return PaginaMetadatos(formato: arch.formatoOriginal); return PaginaMetadatos(formato: arch.formatoOriginal);
} }
else{ else{
if(arch.formatoOriginal.tipoMultimedia == TipoMultimedia.VIDEO){ if(arch.formatoOriginal.tipoMultimedia == TipoMultimedia.video){
return PaginaFotograma(); return PaginaFotograma();
} }
// Página de metadatos // Página de metadatos
...@@ -79,19 +79,19 @@ class _PaginaConfiguracionState extends State<PaginaConfiguracion> { ...@@ -79,19 +79,19 @@ class _PaginaConfiguracionState extends State<PaginaConfiguracion> {
// Páginas de carpetas y formato de archivo para carpeta // Páginas de carpetas y formato de archivo para carpeta
// TODO: Carpeta de ejemplo, cargar carpetas de verdad // TODO: Carpeta de ejemplo, cargar carpetas de verdad
return PaginaConfiguracionCarpeta(formatosCarpeta: [ return PaginaConfiguracionCarpeta(formatosCarpeta: [
InfoFormato(formato: ClaseFormato.JPG, InfoFormato(formato: Formato.jpg,
nombreCarpeta: widget._elementoAsociado.nombre, nombreCarpeta: widget._elementoAsociado.nombre,
subCarpeta: false, subCarpeta: false,
archivos: []), archivos: []),
InfoFormato(formato: ClaseFormato.MP4, InfoFormato(formato: Formato.mp4,
nombreCarpeta: widget._elementoAsociado.nombre, nombreCarpeta: widget._elementoAsociado.nombre,
subCarpeta: false, subCarpeta: false,
archivos: []), archivos: []),
InfoFormato(formato: ClaseFormato.TIF, InfoFormato(formato: Formato.tif,
nombreCarpeta: widget._elementoAsociado.nombre, nombreCarpeta: widget._elementoAsociado.nombre,
subCarpeta: true, subCarpeta: true,
archivos: []), archivos: []),
InfoFormato(formato: ClaseFormato.PNG, InfoFormato(formato: Formato.png,
nombreCarpeta: widget._elementoAsociado.nombre, nombreCarpeta: widget._elementoAsociado.nombre,
subCarpeta: true, subCarpeta: true,
archivos: []) archivos: [])
...@@ -118,7 +118,7 @@ class _PaginaConfiguracionState extends State<PaginaConfiguracion> { ...@@ -118,7 +118,7 @@ class _PaginaConfiguracionState extends State<PaginaConfiguracion> {
bool isVideo = false; bool isVideo = false;
if(widget._elementoAsociado is Archivo){ if(widget._elementoAsociado is Archivo){
final arch = widget._elementoAsociado as Archivo; final arch = widget._elementoAsociado as Archivo;
if(arch.formatoOriginal.tipoMultimedia == TipoMultimedia.VIDEO){ if(arch.formatoOriginal.tipoMultimedia == TipoMultimedia.video){
isVideo = true; isVideo = true;
} }
} }
......
...@@ -13,9 +13,9 @@ class PaginaConfiguracionCarpeta extends StatefulWidget { ...@@ -13,9 +13,9 @@ class PaginaConfiguracionCarpeta extends StatefulWidget {
} }
class _PaginaConfiguracionCarpetaState extends State<PaginaConfiguracionCarpeta> { class _PaginaConfiguracionCarpetaState extends State<PaginaConfiguracionCarpeta> {
final Map<TipoMultimedia, List<ClaseFormato>> _formatos = {}; final Map<TipoMultimedia, List<Formato>> _formatos = {};
final Map<TipoMultimedia, bool?> _allOfType = {}; final Map<TipoMultimedia, bool?> _allOfType = {};
final Map<ClaseFormato, bool> _seleccionados = {}; final Map<Formato, bool> _seleccionados = {};
late bool _incluirSubcarpetas; late bool _incluirSubcarpetas;
@override @override
...@@ -99,9 +99,9 @@ class _PaginaConfiguracionCarpetaState extends State<PaginaConfiguracionCarpeta> ...@@ -99,9 +99,9 @@ class _PaginaConfiguracionCarpetaState extends State<PaginaConfiguracionCarpeta>
Widget _buildCheckboxTodos(BuildContext context){ Widget _buildCheckboxTodos(BuildContext context){
const Map<TipoMultimedia, String> textos = { const Map<TipoMultimedia, String> textos = {
TipoMultimedia.IMAGEN : 'Todas las imágenes', TipoMultimedia.imagen : 'Todas las imágenes',
TipoMultimedia.AUDIO : 'Todos los audios', TipoMultimedia.audio : 'Todos los audios',
TipoMultimedia.VIDEO : 'Todos los vídeos' TipoMultimedia.video : 'Todos los vídeos'
}; };
final lista = <Widget>[]; final lista = <Widget>[];
...@@ -204,8 +204,11 @@ class _PaginaConfiguracionCarpetaState extends State<PaginaConfiguracionCarpeta> ...@@ -204,8 +204,11 @@ class _PaginaConfiguracionCarpetaState extends State<PaginaConfiguracionCarpeta>
], ],
); );
if(i.subcarpeta) listaSubcarpeta.add(fila); if(i.subcarpeta) {
else listaCarpeta.add(fila); listaSubcarpeta.add(fila);
} else {
listaCarpeta.add(fila);
}
} }
return Padding( return Padding(
......
...@@ -10,7 +10,7 @@ class PaginaFotograma extends StatefulWidget { ...@@ -10,7 +10,7 @@ class PaginaFotograma extends StatefulWidget {
class _PaginaFotogramaState extends State<PaginaFotograma> { class _PaginaFotogramaState extends State<PaginaFotograma> {
int _fotogramaSeleccionado = 0; int _fotogramaSeleccionado = 0;
int _ultimoFotograma = 1200; final int _ultimoFotograma = 1200;
final _buttons = _IconButtons.values; final _buttons = _IconButtons.values;
Timer? timer; Timer? timer;
......
...@@ -2,7 +2,7 @@ import 'package:flutter/material.dart'; ...@@ -2,7 +2,7 @@ import 'package:flutter/material.dart';
import 'package:prueba_multimedia/modelo/modelo.dart'; import 'package:prueba_multimedia/modelo/modelo.dart';
class PaginaMetadatos extends StatefulWidget { class PaginaMetadatos extends StatefulWidget {
final ClaseFormato _formato; final Formato _formato;
const PaginaMetadatos({super.key, required formato}): _formato = formato; const PaginaMetadatos({super.key, required formato}): _formato = formato;
...@@ -54,7 +54,7 @@ class _PaginaMetadatosState extends State<PaginaMetadatos> { ...@@ -54,7 +54,7 @@ class _PaginaMetadatosState extends State<PaginaMetadatos> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
if(_metadatos.length > 0){ if(_metadatos.isNotEmpty){
return SingleChildScrollView( return SingleChildScrollView(
child: Padding( child: Padding(
padding: const EdgeInsets.all(15.0), padding: const EdgeInsets.all(15.0),
......
...@@ -5,7 +5,7 @@ class ActionButton extends StatelessWidget { ...@@ -5,7 +5,7 @@ class ActionButton extends StatelessWidget {
final VoidCallback? onPressed; final VoidCallback? onPressed;
ActionButton({super.key, required this.tipoBoton, required this.onPressed}); const ActionButton({super.key, required this.tipoBoton, required this.onPressed});
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
......
...@@ -76,7 +76,7 @@ class ExpandableFabState extends State<ExpandableFab> ...@@ -76,7 +76,7 @@ class ExpandableFabState extends State<ExpandableFab>
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Container( return SizedBox(
width: _computeWidth(), width: _computeWidth(),
height: _open? 56 + (widget.distance*widget.children.length) : 56, height: _open? 56 + (widget.distance*widget.children.length) : 56,
child: SizedBox.expand( child: SizedBox.expand(
...@@ -198,7 +198,6 @@ class _ExpandingActionButton extends StatelessWidget { ...@@ -198,7 +198,6 @@ class _ExpandingActionButton extends StatelessWidget {
final Widget child; final Widget child;
const _ExpandingActionButton({ const _ExpandingActionButton({
super.key,
this.invert = false, this.invert = false,
required this.directionInDegrees, required this.directionInDegrees,
required this.maxDistance, required this.maxDistance,
......
...@@ -5,8 +5,10 @@ ...@@ -5,8 +5,10 @@
import FlutterMacOS import FlutterMacOS
import Foundation import Foundation
import ffmpeg_kit_flutter
import file_picker import file_picker
func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) {
FFmpegKitFlutterPlugin.register(with: registry.registrar(forPlugin: "FFmpegKitFlutterPlugin"))
FilePickerPlugin.register(with: registry.registrar(forPlugin: "FilePickerPlugin")) FilePickerPlugin.register(with: registry.registrar(forPlugin: "FilePickerPlugin"))
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment