Agregada la función de cerrar botones del FAB tras agregar un archivo o carpeta

parent 94520476
...@@ -4,8 +4,6 @@ import 'package:prueba_multimedia/modelo/conversor.dart'; ...@@ -4,8 +4,6 @@ import 'package:prueba_multimedia/modelo/conversor.dart';
import 'convertible.dart'; import 'convertible.dart';
import 'formato.dart'; import 'formato.dart';
// TODO: QUE PASA SI NO RECONOCEMOS EL FORMATO?
// TODO: MIRAR DE CREAR UN MIXIN TIPO ELEMENTOLOCAL O ALGO ASÍ (Archivo y Carpeta)
class Archivo extends Convertible { class Archivo extends Convertible {
final File file; final File file;
late final Future<List<Metadato>> metadatos; late final Future<List<Metadato>> metadatos;
...@@ -13,7 +11,6 @@ class Archivo extends Convertible { ...@@ -13,7 +11,6 @@ class Archivo extends Convertible {
Archivo({required super.id, required this.file}): Archivo({required super.id, required this.file}):
super( super(
nombre: file.path.split('/').last, nombre: file.path.split('/').last,
// TODO: POR AHORA USAMOS (!) PERO HAY QUE TENERLO EN CUENTA
formatoOriginal: Formato.fromExtension(file.path.split('.').last)!, formatoOriginal: Formato.fromExtension(file.path.split('.').last)!,
icon: Formato.fromExtension(file.path.split('.').last)!.tipoMultimedia.icono icon: Formato.fromExtension(file.path.split('.').last)!.tipoMultimedia.icono
) )
......
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 Formato _formatoOriginal; final Formato _formatoOriginal;
Formato? formatoDestino; Formato? formatoDestino;
......
...@@ -4,6 +4,7 @@ import 'package:uuid/uuid.dart'; ...@@ -4,6 +4,7 @@ import 'package:uuid/uuid.dart';
import 'carpeta.dart'; import 'carpeta.dart';
import 'elemento_seleccionable.dart'; import 'elemento_seleccionable.dart';
import 'archivo.dart'; import 'archivo.dart';
import 'formato.dart';
class ListaSeleccionables extends ChangeNotifier { class ListaSeleccionables extends ChangeNotifier {
final _seleccionables = <ElementoSeleccionable>[]; final _seleccionables = <ElementoSeleccionable>[];
...@@ -19,18 +20,23 @@ class ListaSeleccionables extends ChangeNotifier { ...@@ -19,18 +20,23 @@ class ListaSeleccionables extends ChangeNotifier {
notifyListeners(); notifyListeners();
} }
void addArchivo(File file) { bool addArchivo(File file) {
if(Formato.fromExtension(file.path.split('.').last) != null){
_seleccionables.add(Archivo(id: const Uuid().v1(), _seleccionables.add(Archivo(id: const Uuid().v1(),
file: file)); file: file));
notifyListeners(); notifyListeners();
return true;
}
return false;
} }
void addCarpeta(Directory directory){ bool addCarpeta(Directory directory){
final newCarpeta = Carpeta( final newCarpeta = Carpeta(
id: const Uuid().v1(), id: const Uuid().v1(),
directory: directory directory: directory
); );
//if(newCarpeta.formatos.isNotEmpty){
if(newCarpeta.formatos.isNotEmpty){
_seleccionables.add( _seleccionables.add(
Carpeta( Carpeta(
id: const Uuid().v1(), id: const Uuid().v1(),
...@@ -38,7 +44,10 @@ class ListaSeleccionables extends ChangeNotifier { ...@@ -38,7 +44,10 @@ class ListaSeleccionables extends ChangeNotifier {
) )
); );
notifyListeners(); notifyListeners();
//} return true;
}
return false;
} }
void reinsertar(int index, ElementoSeleccionable element){ void reinsertar(int index, ElementoSeleccionable element){
......
...@@ -119,3 +119,4 @@ class _PaginaConfiguracionState extends State<PaginaConfiguracion> { ...@@ -119,3 +119,4 @@ class _PaginaConfiguracionState extends State<PaginaConfiguracion> {
} }
} }
...@@ -8,8 +8,10 @@ class ActionButton extends StatelessWidget { ...@@ -8,8 +8,10 @@ class ActionButton extends StatelessWidget {
final ActionButtonTypes tipoBoton; final ActionButtonTypes tipoBoton;
final ListaSeleccionables manager; final ListaSeleccionables manager;
final BuildContext context; final BuildContext context;
final VoidCallback? onSuccess;
const ActionButton({super.key, required this.tipoBoton, const ActionButton({super.key, required this.tipoBoton,
required this.manager, required this.context}); required this.manager, required this.context, this.onSuccess});
void Function() getCallback() { void Function() getCallback() {
return switch(tipoBoton) { return switch(tipoBoton) {
...@@ -41,14 +43,23 @@ class ActionButton extends StatelessWidget { ...@@ -41,14 +43,23 @@ class ActionButton extends StatelessWidget {
FilePickerResult? result = await FilePicker.platform.pickFiles(); FilePickerResult? result = await FilePicker.platform.pickFiles();
if (result != null) { if (result != null) {
File file = File(result.files.first.path!); File file = File(result.files.first.path!);
manager.addArchivo(file); final res = manager.addArchivo(file);
if(res){
if(context.mounted && onSuccess != null){
onSuccess!();
}
}
else{
if (context.mounted) {
_mostrarSnackBar('El archivo seleccionado no es de un formato multimedia conocido');
}
}
} // Mensaje indicando que se seleccione un archivo } // Mensaje indicando que se seleccione un archivo
else { else {
// Comprobar que el widget no ha sido destruido por ser asíncrono // Comprobar que el widget no ha sido destruido por ser asíncrono
if (context.mounted) { if (context.mounted) {
ScaffoldMessenger.of(context).showSnackBar( _mostrarSnackBar('No se ha seleccionado ningún archivo');
SnackBar(content: Text("Selecciona una archivo"))
);
} }
} }
} }
...@@ -76,14 +87,22 @@ class ActionButton extends StatelessWidget { ...@@ -76,14 +87,22 @@ class ActionButton extends StatelessWidget {
FilePicker.platform.getDirectoryPath().then( (path) { FilePicker.platform.getDirectoryPath().then( (path) {
if (path != null) { if (path != null) {
var directory = Directory(path); var directory = Directory(path);
manager.addCarpeta(directory); final res = manager.addCarpeta(directory);
if(res){
if(context.mounted && onSuccess != null){
onSuccess!();
}
}
else{
if (context.mounted) {
_mostrarSnackBar('La carpeta seleccionada no contiene archivos de formatos multimedia conoocidos');
}
}
} // Mensaje indicando que se seleccione una carpeta } // Mensaje indicando que se seleccione una carpeta
else { else {
// Comprobar que el widget no ha sido destruido por ser asíncrono // Comprobar que el widget no ha sido destruido por ser asíncrono
if (context.mounted) { if (context.mounted) {
ScaffoldMessenger.of(context).showSnackBar( _mostrarSnackBar('No se ha seleccionado ninguna carpeta');
SnackBar(content: Text("Selecciona una carpeta"))
);
} }
} }
}); });
...@@ -143,6 +162,13 @@ class ActionButton extends StatelessWidget { ...@@ -143,6 +162,13 @@ class ActionButton extends StatelessWidget {
); );
} }
void _mostrarSnackBar(String text) {
ScaffoldMessenger.of(context).showSnackBar(SnackBar(
content: Text(
text
)
));
}
} }
enum ActionButtonTypes { enum ActionButtonTypes {
......
...@@ -139,8 +139,17 @@ class _ConVertexFabBarState extends State<ConVertexFabBar> { ...@@ -139,8 +139,17 @@ class _ConVertexFabBarState extends State<ConVertexFabBar> {
List<Widget> _loadAgregarActionButtons(BuildContext context, List<Widget> _loadAgregarActionButtons(BuildContext context,
ListaSeleccionables manager) ListaSeleccionables manager)
{ {
final VoidCallback closeButtons = () {
setState(() {
_convertirOpen = false;
_agregarOpen = false;
});
_convertirKey.currentState?.close();
_agregarKey.currentState?.close();
};
return agregarButtonTypes.map( (type) { return agregarButtonTypes.map( (type) {
return ActionButton(tipoBoton: type, manager: manager, context: context,); return ActionButton(tipoBoton: type, manager: manager, context: context, onSuccess: closeButtons,);
}).toList(); }).toList();
} }
} }
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