Rodrigolara05 /
Flutter-Messenger-Clone
FBMessenger es una aplicación para comunicarse en tiempo real usada en todo el mundo por lo que esta es su representación desarrollada con Flutter.
53/100 healthLoading repository data…
luisgamas / repository
Esta es una app demostración para el reto técnico de ROMI Asistente Médico Virtual
A transparent discovery signal based on current public GitHub metadata.
This score does not audit code, security, maintainers, documentation quality, or suitability. Verify the repository and its current documentation before adoption.
Aplicación móvil multiplataforma para el registro diario de signos vitales con almacenamiento local y visualización de tendencias
Ver Proceso de Desarrollo en Kanban • Características • Arquitectura • Instalación
Pulso Vital es una aplicación que permite a los usuarios registrar y visualizar su historial de signos vitales como presión arterial, ritmo cardíaco y temperatura. Su diseño se enfoca en la eficiencia y la privacidad, garantizando que todos los datos se almacenen de forma segura en el dispositivo del usuario, sin necesidad de conexión a internet.
Esta aplicación fue desarrollada como una demostración técnica para el reto de ROMI Asistente Médico Virtual, destacando la implementación de una arquitectura de software robusta y las mejores prácticas de desarrollo en Flutter.
La aplicación implementa una Clean Architecture combinada con el patrón MVVM (Model-View-ViewModel) utilizando Riverpod como solución de gestión de estado, creando una arquitectura híbrida robusta y mantenible.
┌─────────────────────────────────────────────────────────────┐
│ PRESENTATION LAYER │
│ ┌─────────────────┐ ┌──────────────┐ ┌─────────────┐ │
│ │ Screens │ │ Views │ │ Widgets │ │
│ │ (UI Layer) │ │ (UI Logic) │ │(Components) │ │
│ └─────────────────┘ └──────────────┘ └─────────────┘ │
└─────────────────────────────┬───────────────────────────────┘
│
┌─────────────────────────────┴───────────────────────────────┐
│ STATE MANAGEMENT LAYER │
│ ┌─────────────────┐ ┌──────────────┐ ┌─────────────┐ │
│ │ Providers │ │ Notifiers │ │ States │ │
│ │ (Dependency │ │ (Business │ │ (Data │ │
│ │ Injection) │ │ Logic) │ │ Models) │ │
│ └─────────────────┘ └──────────────┘ └─────────────┘ │
└─────────────────────────────┬───────────────────────────────┘
│
┌─────────────────────────────┴───────────────────────────────┐
│ DOMAIN LAYER │
│ ┌─────────────────┐ ┌──────────────┐ ┌─────────────┐ │
│ │ Entities │ │ Repositories │ │ DataSources │ │
│ │ (Business │ │ (Contracts) │ │ (Contracts) │ │
│ │ Objects) │ │ │ │ │ │
│ └─────────────────┘ └──────────────┘ └─────────────┘ │
└─────────────────────────────┬───────────────────────────────┘
│
┌─────────────────────────────┴───────────────────────────────┐
│ INFRASTRUCTURE LAYER │
│ ┌─────────────────┐ ┌──────────────┐ │
│ │ Repository │ │ DataSource │ │
│ │ Implementations │ │Implementations│ │
│ │ │ │ (Isar DB) │ │
│ └─────────────────┘ └──────────────┘ │
└─────────────────────────────────────────────────────────────┘
UserEntity, VitalSignsEntity)HomeScreen, RegisteredUserView)lib/
├── config/ # Configuración global
│ ├── constants/ # Constantes de la aplicación
│ ├── router/ # Configuración de navegación
│ └── theme/ # Temas y estilos
├── modules/ # Módulos funcionales
│ ├── dashboard/ # Módulo principal
│ │ ├── domain/ # Capa de dominio
│ │ │ ├── entities/ # Entidades de negocio
│ │ │ ├── repositories/ # Contratos de repositorios
│ │ │ └── datasources/ # Contratos de fuentes de datos
│ │ ├── infrastructure/ # Implementaciones
│ │ │ ├── repositories/ # Repositorios concretos
│ │ │ └── datasources/ # DataSources concretos
│ │ └── presentation/ # Capa de presentación
│ │ ├── providers/ # Providers de Riverpod
│ │ ├── screens/ # Pantallas principales
│ │ └── views/ # Vistas y componentes
└── shared/ # Recursos compartidos
├── validators/ # Validadores de formularios
├── utils/ # Utilidades y helpers
└── widgets/ # Widgets reutilizables
[!NOTE] la guia oficial de instalación está aquí.
[!TIP] Se puede probar en modo release en un dispositivo Android al descargar el archivo ya compilado en la sección de Releases.
git clone [repository-url]
cd pulso_vital
flutter pub get
dart run build_runner build
flutter run
# Generar código en modo watch
dart run build_runner watch
# Ejecutar lints personalizados
dart run custom_lint
# Organizar imports automáticamente
dart run import_sorter:main -e
# Ejecutar tests
flutter test
Abstrae el acceso a datos proporcionando una interfaz uniforme:
abstract class Repositories {
Future<UserEntity> getUserData();
Future<bool> updateUserData(UserEntity user);
Future<List<VitalSignsEntity>> getVitalSignsRecords();
Future<bool> updateVitalSigns(VitalSignsEntity vitalSign);
Future<bool> deleteVitalSigns(Id vitalSignId);
}
Separa las fuentes de datos de la lógica de negocio:
abstract class DataSources {
Future<UserEntity> getUserData();
Future<bool> updateUserData(UserEntity user);
// ... más métodos
}
Estados inmutables para gestión predecible:
class UserDataState {
final UserEntity userEntity;
final bool isLoading;
final bool isRegistered;
final String message;
UserDataState copyWith({...}) => UserDataState(...);
}
Implementado a través de Riverpod para reactividad:
final userDataProvider = StateNotifierProvider<UserDataNotifier, UserDataState>((ref) {
final repositories = ref.watch(dashRepositoriesProvider);
return UserDataNotifier(repositories: repositories);
});
final dashRepositoriesProvider = Provider<Repositories>((ref) {
return LocalRepositoriesImpl(dataSources: LocalDataSourcesImpl());
});
class UserDataNotifier extends StateNotifier<UserDataState> {
final Repositories repositories;
// Lógica de negocio y actualización de estado
}
Estados inmutables que representan el estado actual de la UI:
UserDataState - Estado del usuario y registroVitalSignsRecordsState - Estado de los registros médicosUserRegistrationFormState - Estado del formulario de registroVitalSignsLogFormState - Estado del formulario de signos vitalesUser Action → StateNotifier → Repository → DataSource → Database
↓ ↓ ↓ ↓ ↓
UI Update ← State Update ← Business Logic ← Data Access ← Isar
Implementación de base de datos NoSQL local de alto rendimiento:
@collection
class VitalSignsEntity {
Id isarId = Isar.autoIncrement;
late DateTime createdAt;
late double tempC;
late int bpSys;
late int bpDia;
late int heartRate;
}
@collection
class UserEntity {
Id isarId = Isar.a
Selected from shared topics, language and repository description—not editorial ratings.
Rodrigolara05 /
FBMessenger es una aplicación para comunicarse en tiempo real usada en todo el mundo por lo que esta es su representación desarrollada con Flutter.
53/100 healthRodrigolara05 /
Youtube es una plataforma de video muy reconocida y usada en todo el mundo por lo que esta es su representación desarrollada con Flutter.
45/100 healthRodrigolara05 /
Twitter es una red social para compartir noticias de ultimo minuto en todo el mundo por lo que esta es su representación desarrollada con Flutter.
Rodrigolara05 /
Esta aplicación realizada en flutter es un ejemplo de como se trabaja con una base de datos SQLite en el dispositivo - CRUD
44/100 healthjohansitoweb /
Esta es una app en el lenguaje dart
36/100 healthmanuelvargastapia /
FWorkout es una app para la gestión de rutinas de entrenamiento personalizadas. Está contruida con Flutter y SQFlite.
43/100 health