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 Color
  • utils_ui.dart: Funciones de ayuda para la interfaz
  • utils_esquema.dart: Manipulación de esquemas
  • tablas_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 base
  • data_widget_model.dart - Propiedades de campos del esquema
  • row_widget_model.dart - Layout horizontal
  • column_widget_model.dart - Layout vertical
  • wrap_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/button_widget
widgets/camara_view
widgets/campo_lista_widget
widgets/clip_widget
widgets/container_punteado
widgets/custom_button
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/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/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