flutter_crud_esquemas_dynamicos_web
Un paquete Flutter para crear formularios CRUD dinámicos con esquemas personalizables. Construye formularios flexibles y orientados a datos con gestión de estado BLoC. Solo para Web.
Características
- Formularios CRUD dinámicos con esquemas personalizables
- Gestión de estado con BLoC (flutter_bloc)
- Constructor de formularios dinámicos con interfaz de asistente (wizard)
- Actualizaciones de campos en tiempo real
- Comunicación por sockets para notificaciones en tiempo real
- Navegación con GoRouter y soporte de breadcrumbs
- Ejecución de código eval para validaciones y acciones en runtime
- Configuración de visibilidad de columnas en tablas
- Selección de archivos y visualización de documentos
- Soporte de geolocalización
- Generación y visualización de PDFs
Instalación
Agrega esto a tu pubspec.yaml:
dependencies:
flutter_crud_esquemas_dynamicos_web: ^2.0.0
Luego ejecuta:
flutter pub get
Uso Básico
Configuración Inicial
import 'package:flutter_crud_esquemas_dynamicos_web/init_config.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
// Configurar la aplicación
await InitConfig.initialize(
clientId: 'tu_client_id',
clientSecret: 'tu_client_secret',
origenColeccion: 'tu_origen',
);
runApp(const MyApp());
}
Ejemplo de Formulario Dinámico
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flutter_crud_esquemas_dynamicos_web/bloc/dynamic_crud/dynamic_crud_bloc.dart';
class MiFormularioDinamico extends StatelessWidget {
const MiFormularioDinamico({super.key});
@override
Widget build(BuildContext context) {
return BlocProvider(
create: (context) => DynamicCrudBloc(),
child: BlocBuilder<DynamicCrudBloc, DynamicCrudState>(
builder: (context, state) {
// Tu implementación de UI aquí
return Container();
},
),
);
}
}
Estructura del Proyecto
El paquete está organizado de la siguiente manera:
BLoCs Principales
- DynamicCrudBloc: Gestiona operaciones CRUD dinámicas
- DynamicCrudProcessBloc: Procesa y ejecuta acciones sobre colecciones
- NavegacionBloc: Gestiona navegación y breadcrumbs
- WizardBloc: Controla el asistente de creación de formularios
- StreamDataBloc: Actualizaciones de campos en tiempo real
- ConfigColumnaBloc: Configuración de visibilidad de columnas
Utilidades
color_utils.dart: Conversión entre String y Colorutils_ui.dart: Funciones de ayuda para la interfazutils_esquema.dart: Manipulación de esquemastablas_utils.dart: Utilidades para tablas
Rutas Disponibles
El paquete utiliza GoRouter con las siguientes rutas predefinidas:
/login- Autenticación/inicio- Dashboard principal/datosColeccion- Vista de tabla/fichaColeccion- Vista de formulario detalle/wizard- Asistente de creación de formularios/adminFormularios- Administración de formularios/adminEsquemas- Administración de esquemas/adminGrupos- Administración de grupos
Sistema de Formularios Dinámicos
Los formularios se construyen dinámicamente usando modelos de widgets:
widget_model.dart- Modelo basedata_widget_model.dart- Propiedades de campos del esquemarow_widget_model.dart- Layout horizontalcolumn_widget_model.dart- Layout verticalwrap_widget_model.dart- Layout adaptativo
Requisitos
- Flutter >= 3.22.0
- Dart SDK >= 3.9.2
- Solo plataforma Web
Dependencias Principales
- flutter_bloc: ^9.1.1
- go_router: ^16.2.4
- equatable: ^2.0.7
- flutter_map: ^8.2.2
- syncfusion_flutter_pdfviewer: ^31.1.22
Licencia
Este proyecto está licenciado bajo la Licencia Apache 2.0 - ver el archivo LICENSE para más detalles.
Copyright 2025 RobleSistemas
Libraries
- bloc/blocs_listeners
- bloc/config_columna/config_columna_bloc
- bloc/dynamic_crud/dynamic_crud_bloc
- bloc/dynamic_crud_process_bloc/dynamic_crud_process_bloc
- bloc/info_ui_app/info_ui_app_bloc
- bloc/perfil_admin/perfil_admin_bloc
- bloc/selector_archivo/descargar_archivos
- bloc/selector_archivo/descargar_archivos_mobile
- bloc/selector_archivo/descargar_archivos_web
- bloc/selector_archivo/selector_archivo_bloc
- bloc/socket/socket_bloc
- bloc/socket_web/w_socket_bloc
- bloc/stream_data/stream_data_bloc
- bloc/ubicacion/ubicacion_bloc
- bloc/visualizador/visualizador_bloc
- bloc/wizard/wizard_bloc
- global/environment
- global/theme
- init_config
- main
- provider/code_implement/auth_utils
- provider/code_implement/esquema_utils
- provider/code_implement/http_request
- provider/code_implement/validacion
- provider/code_implement/validacion_key_desarrollo
- provider/eval_provider
- provider/shortcuts_provider
- provider/shp_dynamic_crud
- router/go_router
- router/go_router_model
- utils/color_utils
- utils/custom_focus_policy
- utils/measure_size
- utils/tablas_utils
- utils/utils_esquemas
- utils/utils_ui
- view/authentication/login_mobile
- view/authentication/login_page
- view/authentication/login_view_nuevo
- view/code_pad/code_utils
- view/ficha_view
- view/formulario_dinamico/formulario_dinamico_view
- view/formulario_dinamico/grupos/model/grupo_model
- view/formulario_dinamico/model/archivo_model
- view/formulario_dinamico/model/column_widget_model
- view/formulario_dinamico/model/custom_widget_builder
- view/formulario_dinamico/model/custom_widget_model
- view/formulario_dinamico/model/data_widget_model
- view/formulario_dinamico/model/enums
- view/formulario_dinamico/model/environment_form
- view/formulario_dinamico/model/expancion_panel_widget_model
- view/formulario_dinamico/model/icono_widget_model
- view/formulario_dinamico/model/label_widget_model
- view/formulario_dinamico/model/row_widget_model
- view/formulario_dinamico/model/stepper_widget_model
- view/formulario_dinamico/model/widget_model
- view/formulario_dinamico/model/wrap_widget_model
- view/formulario_dinamico/widgets/array_object
- view/formulario_dinamico/widgets/build_widget
- view/formulario_dinamico/widgets/campo_selector_archivo
- view/formulario_dinamico/widgets/campo_ubicacion
- view/formulario_dinamico/widgets/check_animation
- view/formulario_dinamico/widgets/expancion_widget
- view/formulario_dinamico/widgets/widget_column
- view/formulario_dinamico/widgets/widget_custom
- view/formulario_dinamico/widgets/widget_data
- view/formulario_dinamico/widgets/widget_expancion_panel
- view/formulario_dinamico/widgets/widget_icon
- view/formulario_dinamico/widgets/widget_label
- view/formulario_dinamico/widgets/widget_row
- view/formulario_dinamico/widgets/widget_stepper
- view/formulario_dinamico/widgets/widget_wrap
- view/home_page
- view/inicio/inicio
- view/inicio/items_from_modulos/items_from_modulos_view
- view/loading_view
- view/page_formularios
- view/tabla_view
- widgets/camara_view
- widgets/campo_lista_widget
- widgets/clip_widget
- widgets/container_punteado
- widgets/custom_scroll_behavior
- widgets/custom_text_widget
- widgets/dropdow_seleccion_simple_widget
- widgets/dynamic_list_widget
- widgets/estado_auditoria_boton
- widgets/field_search_widget/field_search_widget
- widgets/models/esquema_model
- widgets/popup_busqueda/popup_busqueda_tabla
- widgets/popup_configuracion_tabla/popup_configuracion_tabla
- widgets/popup_widget/popup_widget
- widgets/pull_to_load_more
- widgets/shimmer_loading
- widgets/swich_widget_in_dynamic_form
- widgets/tabla/opciones_item_tabla
- widgets/tabla/tabla
- widgets/tabla/tabla_multi_seleccion
- widgets/textfield_busqueda/bloc/textfield_busqueda_bloc
- widgets/textfield_busqueda/popup/popup_widget_textfield
- widgets/textfield_busqueda/textfield_busqueda
- widgets/textfield_widget_busqueda_in_dynamic_form
- widgets/textfield_widget_in_dynamic_form
- widgets/visualizador/dialogo_visualizacion
- widgets/visualizador/pdf_view
- widgets/visualizador/visualizador_imagen
- widgets/widget_from_screen
- widgets/widget_marca_obligatorio
- widgets/widget_personalizado
- widgets/widget_text