Página de configuración de carpetas y selección de perfiles implementadas

parent 74568f97
import 'dart:io';
import 'package:flutter/material.dart';
import './convertible.dart';
import './elemento_seleccionable.dart';
import 'formato.dart';
class Archivo extends Convertible{
final File _file;
List<String> metadatos = [];
File get file => _file;
Archivo({required String id, required File file}):
_file = file,
super(id: id,
nombre: file.path.split('/').last,
formatoOriginal: ClaseFormato.fromExtension(file.path.split('/').last.split('.').last),
icon: Icon(Icons.insert_drive_file_outlined));
}
\ No newline at end of file
import './conversion.dart';
import './elemento_seleccionable.dart';
import 'formato.dart';
class ArchivoIndividual extends ElementoSeleccionable{
final Conversion _conversion;
List<String> metadatos = [];
Formato get formatoActual => _conversion.formatoOriginal;
ArchivoIndividual({required super.id, required super.nombre, required super.localizacion,
required Conversion conversion}): _conversion = conversion;
@override
void convertir() {
_conversion.convertir();
}
}
\ No newline at end of file
import './conversion.dart';
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:prueba_multimedia/modelo/archivo.dart';
import './convertible.dart';
import './elemento_seleccionable.dart';
import 'formato.dart';
class Carpeta extends ElementoSeleccionable{
bool _incluirSubcarpetas = false;
final Map<Formato, bool> _formatosAConvertir;
final Map<Formato, Conversion> _conversiones;
final List<InfoFormato> _formatos;
List<InfoFormato> get formatos => List.unmodifiable(_formatos);
Carpeta({required super.id, required super.nombre, required super.localizacion}):
_formatosAConvertir = {}, _conversiones = {};
Carpeta({required id, required nombre}):
_formatos = [],
super(id: id, nombre: nombre, icon: const Icon(Icons.folder_outlined));
@override
void convertir() {
_conversiones.values.forEach((conv) => conv.convertir());
// TODO: <implement>
}
}
class InfoFormato {
final bool _subcarpeta;
bool _seleccionado;
final Convertible _conversion;
final List<File> _archivos;
bool get subcarpeta => _subcarpeta;
bool get seleccionado => _seleccionado;
Convertible get conversion => _conversion;
ClaseFormato get formatoOriginal => _conversion.formatoOriginal;
Formato? get formatoDestino => _conversion.formatoDestino;
List<Archivo> get archivos => List.unmodifiable(_archivos);
set seleccionado(bool value) => _seleccionado = value;
set formato(Formato? destino) => _conversion.formatoDestino = destino;
InfoFormato({required ClaseFormato formato,
required String nombreCarpeta,
required bool subCarpeta,
bool? seleccionado,
required List<File> archivos}):
_subcarpeta = subCarpeta, _seleccionado = seleccionado ?? !subCarpeta, _archivos = archivos,
_conversion = Convertible(id: "null", nombre: '${nombreCarpeta} > ${formato.name}',
icon: Icon(Icons.find_in_page_outlined), formatoOriginal: formato);
void convertir(){
if(_conversion.formatoDestino != null){
// TODO: <implement>
}
}
}
\ No newline at end of file
import 'formato.dart';
class Conversion{
final Formato _formatoOriginal;
Formato? _formatoDestino;
Formato get formatoOriginal => _formatoOriginal;
Conversion({required ClaseFormato formatoOriginal, Formato? formatoDestino = null}):
_formatoOriginal = Formato(extension: formatoOriginal),
_formatoDestino = formatoDestino;
void convertir(){
// TODO: <implement>
}
}
\ No newline at end of file
import 'package:prueba_multimedia/modelo/elemento_seleccionable.dart';
import 'formato.dart';
class Convertible extends ElementoSeleccionable{
final ClaseFormato _formatoOriginal;
Formato? _formatoDestino;
ClaseFormato get formatoOriginal => _formatoOriginal;
Formato? get formatoDestino => _formatoDestino;
set formatoDestino(Formato? siguiente) => _formatoDestino = siguiente;
Convertible({required super.id, required super.nombre, required super.icon,
required ClaseFormato formatoOriginal, Formato? formatoDestino = null}):
_formatoOriginal = formatoOriginal,
_formatoDestino = formatoDestino;
void convertir(){
// TODO: <implement>
}
}
\ No newline at end of file
import 'package:flutter/material.dart';
abstract class ElementoSeleccionable{
final String _id;
final String _nombre;
final String _localizacion;
final Icon _icon;
String get id => this._id;
String get nombre => this._nombre;
String get localizacion => this._localizacion;
Icon get icon => this._icon;
ElementoSeleccionable({required String id,
required String nombre,
required String localizacion}):
_id = id, _nombre = nombre, _localizacion = localizacion;
required Icon icon}):
_id = id, _nombre = nombre, _icon = icon;
void convertir();
}
\ No newline at end of file
import 'archivo_individual.dart';
import 'package:flutter/material.dart';
import 'package:prueba_multimedia/modelo/convertible.dart';
class Enlace extends ArchivoIndividual{
import 'formato.dart';
class Enlace extends Convertible{
final String _direccion;
final RedSocial _redSocial;
List<String> metadatos = [];
Enlace({required super.id, required super.nombre,
required super.localizacion, required super.conversion,
required redSocial}): _redSocial = redSocial;
Enlace({required String id, required String direccion}):
_direccion = direccion,
_redSocial = RedSocial.FACEBOOK,
super(id: id,
nombre: direccion.split('/').last,
formatoOriginal: ClaseFormato.fromExtension('png'),
icon: Icon(Icons.insert_drive_file_outlined));
@override
void convertir() {
......
import 'package:flutter/material.dart';
class Formato{
final ClaseFormato _extension;
Calidad _calidad;
......@@ -8,7 +10,7 @@ class Formato{
bool get isVideo => _extension.tipoMultimedia == TipoMultimedia.VIDEO;
Formato({required ClaseFormato extension, Calidad calidad = Calidad.ORIGINAL}):
Formato({required ClaseFormato extension, Calidad calidad = Calidad.Media}):
_extension = extension, _calidad = calidad;
Formato copiaSiNulo({ClaseFormato? formato, Calidad? calidad}){
......@@ -129,20 +131,33 @@ enum ClaseFormato{
return toRet;
}
static ClaseFormato fromExtension(String extension){
for(ClaseFormato f in ClaseFormato.values){
if(f._extension == extension){
return f;
}
}
return ClaseFormato.PNG;
}
}
enum TipoMultimedia{
VIDEO,
IMAGEN,
AUDIO
VIDEO(Icon(Icons.movie_creation_outlined)),
AUDIO(Icon(Icons.music_note_outlined)),
IMAGEN(Icon(Icons.image_outlined));
final Icon icono;
const TipoMultimedia(this.icono);
}
enum Calidad{
Baja,
Media,
Alta,
Muy_alta,
ORIGINAL
Muy_alta;
}
class Metadato{
......
import 'formato.dart';
class Perfil{
final String _identificador;
final String _nombre;
final Formato _formatoCorrespondiente;
enum Perfil{
IMAGEN_ALTA_CALIDAD('Alta calidad', ClaseFormato.PNG, ClaseFormato.WAV, ClaseFormato.MKV ,Calidad.Muy_alta),
IMAGEN_COMPARTIR('Para compartir', ClaseFormato.JPG, ClaseFormato.MP3, ClaseFormato.MP4, Calidad.Baja);
Perfil({required String identificador, required String nombre, required Formato formatoCorrespondiente}):
_identificador = identificador, _nombre = nombre, _formatoCorrespondiente = formatoCorrespondiente;
final String nombre;
final ClaseFormato? extensionImagen;
final ClaseFormato? extensionMusica;
final ClaseFormato? extensionVideo;
final Calidad calidad;
const Perfil(this.nombre, this.extensionImagen, this.extensionMusica,
this.extensionVideo, this.calidad);
}
\ No newline at end of file
import 'package:flutter/material.dart';
import 'package:prueba_multimedia/modelo/archivo_individual.dart';
import 'package:prueba_multimedia/modelo/archivo.dart';
import 'package:prueba_multimedia/modelo/convertible.dart';
import 'package:prueba_multimedia/modelo/elemento_seleccionable.dart';
import 'package:prueba_multimedia/modelo/carpeta.dart';
import 'package:prueba_multimedia/modelo/enlace.dart';
import 'package:prueba_multimedia/paginas/pagina_configuracion_carpeta.dart';
import 'package:prueba_multimedia/paginas/pagina_conversion.dart';
import 'package:prueba_multimedia/paginas/pagina_fotograma.dart';
import 'package:prueba_multimedia/paginas/pagina_metadatos.dart';
import '../modelo/formato.dart';
class PaginaConfiguracion extends StatefulWidget {
final ElementoSeleccionable _elementoAsociado;
......@@ -39,12 +43,6 @@ class _PaginaConfiguracionState extends State<PaginaConfiguracion> {
]
)
),
actions: [
IconButton(
onPressed: () {},
icon: Icon(Icons.check)
)
],
),
body: _construirCuerpo(),
bottomNavigationBar: _construirBarraNavegacion()
......@@ -65,36 +63,51 @@ class _PaginaConfiguracionState extends State<PaginaConfiguracion> {
final sb = StringBuffer();
sb.write(" ");
sb.write(widget._elementoAsociado.nombre);
if(widget._elementoAsociado is ArchivoIndividual){
sb.write('.');
sb.write((widget._elementoAsociado as ArchivoIndividual).formatoActual.claseFormato.extension);
}
return sb.toString();
}
Widget _construirCuerpo() {
if(widget._elementoAsociado is ArchivoIndividual){
final arch = widget._elementoAsociado as ArchivoIndividual;
if(widget._elementoAsociado is Convertible){
final arch = widget._elementoAsociado as Convertible;
if(_categoriaActiva == 0){
return PaginaConversion(formatoOriginal: arch.formatoActual);
return PaginaConversion(formatoOriginal: arch.formatoOriginal);
}
else if(_categoriaActiva == 2){
return PaginaMetadatos(formato: arch.formatoActual.claseFormato);
return PaginaMetadatos(formato: arch.formatoOriginal);
}
else{
if(arch.formatoActual.isVideo){
if(arch.formatoOriginal.tipoMultimedia == TipoMultimedia.VIDEO){
return PaginaFotograma();
}
// Página de metadatos
return PaginaMetadatos(formato: arch.formatoActual.claseFormato);
return PaginaMetadatos(formato: arch.formatoOriginal);
}
}
// Páginas de carpetas y formato de archivo para carpeta
return Placeholder();
// TODO: Carpeta de ejemplo, cargar carpetas de verdad
return PaginaConfiguracionCarpeta(formatosCarpeta: [
InfoFormato(formato: ClaseFormato.JPG,
nombreCarpeta: widget._elementoAsociado.nombre,
subCarpeta: false,
archivos: []),
InfoFormato(formato: ClaseFormato.MP4,
nombreCarpeta: widget._elementoAsociado.nombre,
subCarpeta: false,
archivos: []),
InfoFormato(formato: ClaseFormato.TIF,
nombreCarpeta: widget._elementoAsociado.nombre,
subCarpeta: true,
archivos: []),
InfoFormato(formato: ClaseFormato.PNG,
nombreCarpeta: widget._elementoAsociado.nombre,
subCarpeta: true,
archivos: [])
]);
}
BottomNavigationBar? _construirBarraNavegacion(){
if(widget._elementoAsociado is ArchivoIndividual){
if(widget._elementoAsociado is Archivo){
return BottomNavigationBar(
currentIndex: _categoriaActiva,
onTap: (int indice) {
......@@ -111,9 +124,9 @@ class _PaginaConfiguracionState extends State<PaginaConfiguracion> {
List<BottomNavigationBarItem> _construirElementosBarraNavegacion(){
final toRet = <BottomNavigationBarItem>[];
bool isVideo = false;
if(widget._elementoAsociado is ArchivoIndividual){
final arch = widget._elementoAsociado as ArchivoIndividual;
if(arch.formatoActual.isVideo){
if(widget._elementoAsociado is Archivo){
final arch = widget._elementoAsociado as Archivo;
if(arch.formatoOriginal.tipoMultimedia == TipoMultimedia.VIDEO){
isVideo = true;
}
}
......
import 'package:flutter/material.dart';
import 'package:prueba_multimedia/modelo/carpeta.dart';
import 'package:prueba_multimedia/paginas/pagina_configuracion.dart';
import '../modelo/formato.dart';
class PaginaConfiguracionCarpeta extends StatefulWidget {
final List<InfoFormato> _formatosCarpeta;
const PaginaConfiguracionCarpeta({super.key, required List<InfoFormato> formatosCarpeta}):
_formatosCarpeta = formatosCarpeta;
@override
State<PaginaConfiguracionCarpeta> createState() => _PaginaConfiguracionCarpetaState();
}
class _PaginaConfiguracionCarpetaState extends State<PaginaConfiguracionCarpeta> {
final Map<TipoMultimedia, List<ClaseFormato>> _formatos = {};
final Map<TipoMultimedia, bool?> _allOfType = {};
final Map<ClaseFormato, bool> _seleccionados = {};
late bool _incluirSubcarpetas;
@override
void initState() {
super.initState();
_incluirSubcarpetas = false;
for(TipoMultimedia t in TipoMultimedia.values){
_formatos[t] = [];
}
for(InfoFormato i in widget._formatosCarpeta){
_formatos[i.formatoOriginal.tipoMultimedia]?.add(i.formatoOriginal);
_seleccionados[i.formatoOriginal] = i.seleccionado;
}
for(TipoMultimedia t in TipoMultimedia.values){
_allOfType[t] = _actualizarCheckboxTipo(t);
}
}
bool? _actualizarCheckboxTipo(TipoMultimedia t){
if(_formatos[t]!.isEmpty) return false;
bool primero = _seleccionados[_formatos[t]!.first]!;
for(int i = 1; i<_formatos[t]!.length; i++){
if(primero != _seleccionados[_formatos[t]![i]]){
return null;
}
}
return primero;
}
@override
Widget build(BuildContext context) {
return SingleChildScrollView(
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
_buildCheckboxTodos(context),
Padding(
padding: EdgeInsets.symmetric(horizontal: 16.0, vertical: 8.0),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
RichText(
text: TextSpan(
children: [
const WidgetSpan(
child: Icon(Icons.folder_copy_outlined)
),
const WidgetSpan(
child: SizedBox(width: 15)
),
TextSpan(
text: 'Incluir subcarpetas',
style: Theme.of(context).textTheme.bodyLarge
)
]
)
),
Checkbox(
value: _incluirSubcarpetas,
onChanged: (bool? value) {
setState(() {
_incluirSubcarpetas = value!;
});
})
],
),
),
Divider(
thickness: 3
),
_buildFilasFormato(context)
],
),
);
}
Widget _buildCheckboxTodos(BuildContext context){
const Map<TipoMultimedia, String> textos = {
TipoMultimedia.IMAGEN : 'Todas las imágenes',
TipoMultimedia.AUDIO : 'Todos los audios',
TipoMultimedia.VIDEO : 'Todos los vídeos'
};
final lista = <Widget>[];
for(TipoMultimedia t in TipoMultimedia.values){
if(_formatos[t]!.isNotEmpty){
lista.add(Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
RichText(
text: TextSpan(
children: [
WidgetSpan(
child: t.icono
),
const WidgetSpan(
child: SizedBox(width: 15)
),
TextSpan(
text: textos[t]!,
style: Theme.of(context).textTheme.bodyLarge
)
]
)
),
Checkbox(
tristate: true,
value: _allOfType[t],
onChanged: (bool? value) {
setState(() {
_allOfType[t] = value ??
((_allOfType[t] == null)? true : !(_allOfType[t]!));
for(InfoFormato i in widget._formatosCarpeta){
if(_formatos[t]!.contains(i.formatoOriginal) && !(!_incluirSubcarpetas && i.subcarpeta)){
_seleccionados[i.formatoOriginal] = _allOfType[t]!;
}
}
});
})
],
));
}
}
return Padding(
padding: EdgeInsets.all(16.0),
child: Column(
children: lista,
));
}
Widget _buildFilasFormato(BuildContext context){
List<Widget> listaCarpeta = <Widget>[];
List<Widget> listaSubcarpeta = <Widget>[];
for(InfoFormato i in widget._formatosCarpeta){
Widget fila = Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
RichText(
text: TextSpan(
children: [
WidgetSpan(
child: i.formatoOriginal.tipoMultimedia.icono
),
const WidgetSpan(
child: SizedBox(width: 15)
),
TextSpan(
text: 'Archivos ${i.formatoOriginal.name}',
style: Theme.of(context).textTheme.bodyLarge
)
]
)
),
Wrap(
children: [
Checkbox(
value: _seleccionados[i.formatoOriginal]!,
onChanged: (i.subcarpeta && !_incluirSubcarpetas)? null :
(bool? value) {
setState(() {
_seleccionados[i.formatoOriginal] = value!;
_allOfType[i.formatoOriginal.tipoMultimedia] =
_actualizarCheckboxTipo(i.formatoOriginal.tipoMultimedia);
});
}),
IconButton(
icon: const Icon(Icons.edit),
onPressed: ((i.subcarpeta && !_incluirSubcarpetas) || !_seleccionados[i.formatoOriginal]!)? null :
() {
Navigator.push(context,
MaterialPageRoute(builder: (context) {
return PaginaConfiguracion(elementoAsociado: i.conversion);
}
));
},
)
]
)
],
);
if(i.subcarpeta) listaSubcarpeta.add(fila);
else listaCarpeta.add(fila);
}
return Padding(
padding: EdgeInsets.all(16.0),
child: Column(
children: [
...listaCarpeta,
...listaSubcarpeta
]
));
}
}
import 'package:flutter/material.dart';
import 'package:prueba_multimedia/modelo/conversion.dart';
import 'package:prueba_multimedia/modelo/convertible.dart';
import '../modelo/formato.dart';
import '../modelo/perfil.dart';
class PaginaConversion extends StatefulWidget {
final Formato _formatoOriginal;
final ClaseFormato _formatoOriginal;
const PaginaConversion({
super.key,
......@@ -19,6 +20,7 @@ class _PaginaConversionState extends State<PaginaConversion>
with SingleTickerProviderStateMixin {
Formato? _formatoConvertido;
bool _showProfiles = true;
late final _tabController;
int _tabElegida = 0;
......@@ -60,7 +62,7 @@ class _PaginaConversionState extends State<PaginaConversion>
}
Widget _createOriginalFormatBox(){
final String nombreFormato = widget._formatoOriginal.claseFormato.name.toUpperCase();
final String nombreFormato = widget._formatoOriginal.name.toUpperCase();
return DecoratedBox(
decoration: BoxDecoration(
......@@ -124,8 +126,7 @@ class _PaginaConversionState extends State<PaginaConversion>
},
);
}).toList();
// Borramos la calidad "Original"
listaChips.removeLast();
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
......@@ -143,7 +144,7 @@ class _PaginaConversionState extends State<PaginaConversion>
}
Widget _createConversionSelectionPanel(){
if(widget._formatoOriginal.isVideo){
if(widget._formatoOriginal.tipoMultimedia == TipoMultimedia.VIDEO && !_showProfiles){
return _createTabVideos();
}
else{
......@@ -170,11 +171,23 @@ class _PaginaConversionState extends State<PaginaConversion>
color: Theme.of(context).colorScheme.surfaceContainerHighest,
child: Padding(
padding: const EdgeInsets.all(20.0),
child: GridView.count(
crossAxisCount: 3,
crossAxisSpacing: 12,
mainAxisSpacing: 12,
children: _createGridBotonesConversion()
child: Column(
children: [
_createBotonesPerfilFormato(),
Container(
height: MediaQuery.of(context).size.height - 460,
child: Padding(
padding: const EdgeInsets.only(top: 16.0),
child: GridView.count(
crossAxisCount: _showProfiles? 1 : 3,
childAspectRatio: _showProfiles ? 6.0 : 1.0,
crossAxisSpacing: 12,
mainAxisSpacing: 12,
children: _showProfiles? _createListPerfiles() : _createGridBotonesConversion()
),
),
),
],
),
),
),
......@@ -202,28 +215,29 @@ class _PaginaConversionState extends State<PaginaConversion>
padding: const EdgeInsets.all(20.0),
child: Column(
children: [
_createBotonesPerfilFormato(),
Container(
height: 68,
child: TabBar(
controller: _tabController,
tabs: <Widget>[
Tab(
icon: Icon(Icons.movie_creation_outlined),
icon: TipoMultimedia.VIDEO.icono,
text: 'Vídeo',
),
Tab(
icon: Icon(Icons.music_note_outlined),
icon: TipoMultimedia.AUDIO.icono,
text: 'Audio',
),
Tab(
icon: Icon(Icons.image_outlined),
icon: TipoMultimedia.IMAGEN.icono,
text: 'Imagen',
)
]
),
),
Container(
height: MediaQuery.of(context).size.height - 488,
height: MediaQuery.of(context).size.height - 528,
child: Padding(
padding: const EdgeInsets.only(top: 16.0),
child: TabBarView(
......@@ -258,11 +272,108 @@ class _PaginaConversionState extends State<PaginaConversion>
);
}
Widget _createBotonesPerfilFormato(){
return Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Material(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(20.0),
),
color: (_showProfiles)? Theme.of(context).disabledColor : Theme.of(context).cardColor,
child: InkWell(
onTap: () {
setState(() {
_showProfiles = true;
});
},
child: Padding(
padding: const EdgeInsets.symmetric(horizontal: 16.0, vertical: 6.0),
child: Text(
'Perfiles',
style: Theme.of(context).textTheme.titleLarge,
),
),
),
),
const SizedBox(width: 16.0),
Material(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(20.0),
),
color: (!_showProfiles)? Theme.of(context).disabledColor : Theme.of(context).cardColor,
child: InkWell(
onTap: () {
setState(() {
_showProfiles = false;
});
},
child: Padding(
padding: const EdgeInsets.symmetric(horizontal: 16.0, vertical: 6.0),
child: Text(
'Formatos',
style: Theme.of(context).textTheme.titleLarge,
),
),
),
)
],
);
}
List<Widget> _createListPerfiles(){
final toRet = <Widget>[];
for(Perfil elemento in Perfil.values){
ClaseFormato? extension = elemento.extensionImagen;
if(widget._formatoOriginal.tipoMultimedia == TipoMultimedia.VIDEO){
extension = elemento.extensionVideo;
}
if(widget._formatoOriginal.tipoMultimedia == TipoMultimedia.AUDIO){
extension = elemento.extensionMusica;
}
if(extension != null && extension != widget._formatoOriginal){
toRet.add(Material(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(20.0),
),
color: (_formatoConvertido?.claseFormato == extension &&
_formatoConvertido?.calidad == elemento.calidad)?
Theme.of(context).disabledColor : Theme.of(context).cardColor,
child: InkWell(
onTap: () {
setState(() {
_formatoConvertido = Formato(extension: extension!, calidad: elemento.calidad);
});
},
child: Container(
decoration: BoxDecoration(
border: Border.all(
color: Colors.black
),
borderRadius: BorderRadius.circular(20.0),
),
child: Center(
child: Text(
elemento.nombre,
style: Theme.of(context).textTheme.headlineMedium,
),
),
),
),
));
}
}
return toRet;
}
List<Widget> _createGridBotonesConversion({TipoMultimedia? tipo}){
tipo ??= widget._formatoOriginal.claseFormato.tipoMultimedia;
tipo ??= widget._formatoOriginal.tipoMultimedia;
final listaFormatos = ClaseFormato.listadoFormatos(
tipo: tipo,
excepcion: widget._formatoOriginal.claseFormato
excepcion: widget._formatoOriginal
);
return listaFormatos.map((elemento) {
......
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:prueba_multimedia/modelo/archivo_individual.dart';
import 'package:prueba_multimedia/modelo/archivo.dart';
import 'package:prueba_multimedia/modelo/carpeta.dart';
import 'package:prueba_multimedia/modelo/conversion.dart';
import 'package:prueba_multimedia/modelo/convertible.dart';
import 'package:prueba_multimedia/modelo/enlace.dart';
import 'package:prueba_multimedia/modelo/formato.dart';
import 'package:prueba_multimedia/paginas/pagina_configuracion.dart';
import 'package:prueba_multimedia/paginas/pagina_configuracion_carpeta.dart';
import 'package:prueba_multimedia/widget/convertex_fab_bar.dart';
import 'pagina_principal_llena.dart';
......@@ -30,20 +33,6 @@ class PaginaPrincipal extends StatefulWidget {
class _PaginaPrincipalState extends State<PaginaPrincipal> {
@override
Widget build(BuildContext context) {
return PaginaConfiguracion(elementoAsociado: ArchivoIndividual(
id: '1', nombre: 'miArchivo', localizacion: 'C:\\',
conversion: Conversion(formatoOriginal: ClaseFormato.MP4)
));
/*return PaginaConfiguracion(elementoAsociado: Carpeta(
id: '2', nombre: 'miCarpeta', localizacion: 'C:\\'
));
return PaginaConfiguracion(elementoAsociado: Enlace(
id: '3', nombre: 'miArchivo', localizacion: 'C:\\',
conversion: Conversion(formatoOriginal: Formato(
extension: ClaseFormato.PNG
)),
redSocial: RedSocial.INSTAGRAM
));
return Scaffold(
appBar: AppBar(
title: Text('Convertex Prototipo'),
......@@ -74,7 +63,7 @@ class _PaginaPrincipalState extends State<PaginaPrincipal> {
child: ConVertexFabBar()
),
floatingActionButtonLocation: FloatingActionButtonLocation.centerDocked,
);*/
);
}
Widget _construirCuerpo(BuildContext context) {
......
import 'package:flutter/material.dart';
import 'package:prueba_multimedia/paginas/pagina_configuracion.dart';
import '../modelo/carpeta.dart';
class PaginaPrincipalVacia extends StatelessWidget {
const PaginaPrincipalVacia({super.key});
......@@ -19,6 +22,16 @@ class PaginaPrincipalVacia extends StatelessWidget {
Text(
'Pulsa el botón + para agregarlos',
style: Theme.of(context).textTheme.bodyLarge,
),
TextButton(
onPressed: () {
Navigator.push(context,
MaterialPageRoute(builder: (context) {
return PaginaConfiguracion(elementoAsociado: Carpeta(id: "1", nombre: 'miCarpeta'));
}
));
},
child: Text('Pulsá')
)
],
),
......
......@@ -148,6 +148,7 @@ class ExpandableFabState extends State<ExpandableFab>
);
}
return FloatingActionButton.extended(
heroTag: (widget.invert)? 'btn1' : 'btn2',
onPressed: _toggle,
icon: widget.icon,
label: Text(
......
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