wayground logo

Free Printable Worksheets

Font size

S
M
L
XL
Worksheets

Moviles II Fase I

Total questions: 30

Worksheet time: 33mins

Name
Class
Date
1.

¿Cuál de los siguientes beneficios ofrece la migración a arquitectura MVVM en una app Flutter?

a)

Aumenta el acoplamiento entre vistas y lógica de negocio

b)

Mejora la mantenibilidad del código

c)

Facilita las pruebas unitarias

d)

Hace que el código sea más difícil de entender

2.

En el patrón MVVM, ¿cuál es la responsabilidad principal del ViewModel?

a)

Mostrar los widgets en pantalla

b)

Encargarse del enrutamiento entre pantallas

c)

Manejar la lógica de presentación y notificar a la vista

d)

Gestionar la conexión con la base de datos directamente

3.

¿Qué cambios suelen implicar una migración de arquitectura "Widget-stateful" a MVVM?

a)

Reemplazar setState() por notificaciones de estado desde el ViewModel

b)

Colocar toda la lógica en la UI para simplificar

c)

Crear clases separadas para la vista, modelo y ViewModel

d)

Usar Scaffold directamente dentro del modelo

4.

¿Cuál de los siguientes gestores de estado es considerado reactivo y escalable para aplicaciones grandes?

a)

Provider

b)

Riverpod

c)

GetX

d)

setState

5.

¿Qué ventaja ofrece Riverpod sobre Provider?

a)

Es menos modular

b)

Soporta más control y pruebas sobre el estado

c)

No permite el uso de hooks

d)

Solo funciona con StatelessWidget

6.

¿Cuál de los siguientes escenarios justifica el uso de un gestor de estado como Bloc o Riverpod?

a)

Actualizar un texto al presionar un botón

b)

Manejar lógica compleja con múltiples flujos de datos

c)

Cambiar el tema de la app en tiempo de ejecución

d)

Mostrar un snackbar

7.

¿Qué es un Subject en RxDart?

a)

Un tipo de widget

b)

Un stream que puede emitir y escuchar valores

c)

Una función para manipular listas

d)

Un decorador para funciones asíncronas

8.

¿Qué hace el operador debounceTime en un stream de RxDart?

a)

Emite los valores inmediatamente

b)

Elimina los errores del stream

c)

Emite el último valor después de un tiempo si no llegan nuevos eventos

d)

Cancela el stream si no hay suscriptore

9.

¿Cuál es una buena práctica al usar RxDart en Flutter?

a)

Usar BehaviorSubject para exponer el estado desde el ViewModel

b)

Usar múltiples StreamBuilders anidados para toda la UI

c)

Cerrar los Subject en el método dispose del ViewModel

d)

Emitir errores como strings directamente

10.

¿Cuál es una característica clave del paquete Bloc en Flutter?

a)

Es sincrónico y basado en setState

b)

Usa una arquitectura basada en eventos y estados

c)

Solo funciona con Firebase

d)

Solo permite manejar UI

11.

¿Para qué se utiliza el operador .debounceTime() en RxDart?

a)

Para aumentar la velocidad de respuesta del stream

b)

Para transformar cada valor emitido

c)

Para limitar la frecuencia con la que se emiten eventos

d)

Para duplicar los valores emitidos

12.

¿Cuál es la diferencia principal entre Provider y Riverpod?

a)

Riverpod es solo para bases de datos

b)

Provider permite pruebas más limpias que Riverpod

c)

Riverpod no requiere BuildContext y es más flexible para pruebas

d)

Provider está basado en Streams y Riverpod no

13.

¿Dónde se recomienda colocar la lógica de negocio según la arquitectura limpia?

a)

En la UI directamente

b)

En la carpeta data

c)

En la capa domain, mediante casos de uso

d)

En main.dart

14.

¿Qué hace BehaviorSubject en RxDart?

a)

Ejecuta animaciones de forma reactiva

b)

Guarda solo el primer valor emitido

c)

Es un stream que retiene y emite el último valor a nuevos suscriptores

d)

Limpia automáticamente el stream tras cada emisión

15.

¿Dónde está el error?

a)

Falta usar ref.read en lugar de ref.watch

b)

authProvider debería estar en la capa domain

c)

La declaración es correcta

d)

El widget debe extender ConsumerWidget en lugar de StatefulWidget

16.

¿Qué línea de código permite registrar un repositorio usando get_it?

a)

getIt.register(Repository());

b)

registerSingleton(Repository());

c)

getIt.registerLazySingleton<Repository>(() => RepositoryImpl());

d)

Get.put(RepositoryImpl());

17.

¿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?

a)

Stream<int> get contador => _contador.stream;

b)

int get contador => _contador.value;

c)

StreamController<int> get contador => _contador;

d)

contador() => _contador.add();

18.

En MVVM + RxDart, ¿cómo se evitaría emitir el mismo valor consecutivo al stream?

a)

.take(1)

b)

.distinct()

c)

.firstWhere()

d)

.filterNull()

19.

¿Qué patrón sigue esta estructura en Flutter con RxDart?

a)

MVP

b)

MVC

c)

MVVM

d)

Repository

20.

¿Cuál es el propósito de .listen() en RxDart?

a)

Agregar un nuevo valor al stream

b)

Cerrar el stream automáticamente

c)

Escuchar los valores emitidos y reaccionar

d)

Cancelar una suscripción activa

21.

¿Qué hace mal este ViewModel?

a)

Falta llamar a counter.add()

b)

Falta cerrar el stream con counter.close()

c)

Falta un StreamBuilder

d)

El stream debe ser final StreamController

22.

¿Qué problema presenta este StreamBuilder?

a)

El widget no tiene setState()

b)

snapshot.data puede ser nul

c)

Falta cerrar el stream

d)

.listen() debería usarse en lugar de StreamBuilder

23.

¿Qué falta en esta clase ViewModel?

a)

El BehaviorSubject debe ser público

b)

Falta una función que emita nuevos estados

c)

No puede usarse stream en MVVM

d)

Se debería usar StreamController en lugar de BehaviorSubject

24.

¿Qué está mal en este código con RxDart?

a)

listen() no puede usarse en BehaviorSubject

b)

Falta add() antes de listen()

c)

Se cierra el stream inmediatamente después de iniciar la escucha

d)

BehaviorSubject no necesita close()

25.

¿Qué error hay en esta implementación de contador con RxDart?

a)

El stream debería ser late

b)

Le falta getter del valor actual

c)

Falta método para incrementar el contador

d)

No se puede usar BehaviorSubject con enteros

26.

¿Por qué este ViewModel podría causar fugas de memoria?

a)

No se usa StreamBuilder

b)

_emailController no tiene tipo

c)

No hay método dispose() para cerrar el stream

d)

add() no es compatible con strings

27.

¿Qué hace mal esta clase con RxDart?

a)

Está bien implementada

b)

No se puede usar .add() con BehaviorSubject

c)

No se guarda la suscripción para cancelarla

d)

periodic no puede usarse dentro de una clase

28.

¿Qué patrón representa mejor esta estructura de clases en MVVM?

a)

MVC – Modelo y Vista están acoplados

b)

Bloc – Porque gestiona eventos

c)

MVVM – ViewModel transforma datos del modelo

d)

Repository Pattern – Porque usa una entidad

29.

¿Qué hace mal esta clase ViewModel si se usa con Provider?

a)

No tiene acceso a variables privadas

b)

Usa booleanos en lugar de streams

c)

El getter debería ser público

d)

No extiende de ChangeNotifier para notificar cambios

30.

¿Qué hace correctamente esta implementación MVVM en Flutter?

a)

Usa setState() para notificar cambios

b)

No puede usarse con Riverpod

c)

Sigue correctamente el patrón MVVM con ChangeNotifier

d)

No encapsula el estado correctamente