Font size
WorksheetsMoviles II Fase I
Total questions: 30
Worksheet time: 33mins
¿Cuál de los siguientes beneficios ofrece la migración a arquitectura MVVM en una app Flutter?
Aumenta el acoplamiento entre vistas y lógica de negocio
Mejora la mantenibilidad del código
Facilita las pruebas unitarias
Hace que el código sea más difícil de entender
En el patrón MVVM, ¿cuál es la responsabilidad principal del ViewModel?
Mostrar los widgets en pantalla
Encargarse del enrutamiento entre pantallas
Manejar la lógica de presentación y notificar a la vista
Gestionar la conexión con la base de datos directamente
¿Qué cambios suelen implicar una migración de arquitectura "Widget-stateful" a MVVM?
Reemplazar setState() por notificaciones de estado desde el ViewModel
Colocar toda la lógica en la UI para simplificar
Crear clases separadas para la vista, modelo y ViewModel
Usar Scaffold directamente dentro del modelo
¿Cuál de los siguientes gestores de estado es considerado reactivo y escalable para aplicaciones grandes?
Provider
Riverpod
GetX
setState
¿Qué ventaja ofrece Riverpod sobre Provider?
Es menos modular
Soporta más control y pruebas sobre el estado
No permite el uso de hooks
Solo funciona con StatelessWidget
¿Cuál de los siguientes escenarios justifica el uso de un gestor de estado como Bloc o Riverpod?
Actualizar un texto al presionar un botón
Manejar lógica compleja con múltiples flujos de datos
Cambiar el tema de la app en tiempo de ejecución
Mostrar un snackbar
¿Qué es un Subject en RxDart?
Un tipo de widget
Un stream que puede emitir y escuchar valores
Una función para manipular listas
Un decorador para funciones asíncronas
¿Qué hace el operador debounceTime en un stream de RxDart?
Emite los valores inmediatamente
Elimina los errores del stream
Emite el último valor después de un tiempo si no llegan nuevos eventos
Cancela el stream si no hay suscriptore
¿Cuál es una buena práctica al usar RxDart en Flutter?
Usar BehaviorSubject para exponer el estado desde el ViewModel
Usar múltiples StreamBuilders anidados para toda la UI
Cerrar los Subject en el método dispose del ViewModel
Emitir errores como strings directamente
¿Cuál es una característica clave del paquete Bloc en Flutter?
Es sincrónico y basado en setState
Usa una arquitectura basada en eventos y estados
Solo funciona con Firebase
Solo permite manejar UI
¿Para qué se utiliza el operador .debounceTime() en RxDart?
Para aumentar la velocidad de respuesta del stream
Para transformar cada valor emitido
Para limitar la frecuencia con la que se emiten eventos
Para duplicar los valores emitidos
¿Cuál es la diferencia principal entre Provider y Riverpod?
Riverpod es solo para bases de datos
Provider permite pruebas más limpias que Riverpod
Riverpod no requiere BuildContext y es más flexible para pruebas
Provider está basado en Streams y Riverpod no
¿Dónde se recomienda colocar la lógica de negocio según la arquitectura limpia?
En la UI directamente
En la carpeta data
En la capa domain, mediante casos de uso
En main.dart
¿Qué hace BehaviorSubject en RxDart?
Ejecuta animaciones de forma reactiva
Guarda solo el primer valor emitido
Es un stream que retiene y emite el último valor a nuevos suscriptores
Limpia automáticamente el stream tras cada emisión
¿Qué línea de código permite registrar un repositorio usando get_it?
getIt.register(Repository());
registerSingleton(Repository());
getIt.registerLazySingleton<Repository>(() => RepositoryImpl());
Get.put(RepositoryImpl());
¿Cuál es la forma correcta de exponer un stream de solo lectura en una clase ViewModel con RxDart?
¿Qué getter lo expone correctamente como solo lectura?
Stream<int> get contador => _contador.stream;
int get contador => _contador.value;
StreamController<int> get contador => _contador;
contador() => _contador.add();
En MVVM + RxDart, ¿cómo se evitaría emitir el mismo valor consecutivo al stream?
.take(1)
.distinct()
.firstWhere()
.filterNull()
¿Qué patrón sigue esta estructura en Flutter con RxDart?
MVP
MVC
MVVM
Repository
¿Cuál es el propósito de .listen() en RxDart?
Agregar un nuevo valor al stream
Cerrar el stream automáticamente
Escuchar los valores emitidos y reaccionar
Cancelar una suscripción activa
¿Qué hace mal este ViewModel?
Falta llamar a counter.add()
Falta cerrar el stream con counter.close()
Falta un StreamBuilder
El stream debe ser final StreamController
¿Qué problema presenta este StreamBuilder?
El widget no tiene setState()
snapshot.data puede ser nul
Falta cerrar el stream
.listen() debería usarse en lugar de StreamBuilder
¿Qué falta en esta clase ViewModel?
El BehaviorSubject debe ser público
Falta una función que emita nuevos estados
No puede usarse stream en MVVM
Se debería usar StreamController en lugar de BehaviorSubject
¿Qué está mal en este código con RxDart?
listen() no puede usarse en BehaviorSubject
Falta add() antes de listen()
Se cierra el stream inmediatamente después de iniciar la escucha
BehaviorSubject no necesita close()
¿Qué error hay en esta implementación de contador con RxDart?
El stream debería ser late
Le falta getter del valor actual
Falta método para incrementar el contador
No se puede usar BehaviorSubject con enteros
¿Por qué este ViewModel podría causar fugas de memoria?
No se usa StreamBuilder
_emailController no tiene tipo
No hay método dispose() para cerrar el stream
add() no es compatible con strings
¿Qué hace mal esta clase con RxDart?
Está bien implementada
No se puede usar .add() con BehaviorSubject
No se guarda la suscripción para cancelarla
periodic no puede usarse dentro de una clase
¿Qué patrón representa mejor esta estructura de clases en MVVM?
MVC – Modelo y Vista están acoplados
Bloc – Porque gestiona eventos
MVVM – ViewModel transforma datos del modelo
Repository Pattern – Porque usa una entidad
¿Qué hace mal esta clase ViewModel si se usa con Provider?
No tiene acceso a variables privadas
Usa booleanos en lugar de streams
El getter debería ser público
No extiende de ChangeNotifier para notificar cambios
¿Qué hace correctamente esta implementación MVVM en Flutter?
Usa setState() para notificar cambios
No puede usarse con Riverpod
Sigue correctamente el patrón MVVM con ChangeNotifier
No encapsula el estado correctamente
