¿Cómo distribuir por ID utilizando el Patrón de Bloque?
Como empecé a aprender el patrón bloc, quería crear una pequeña aplicación con este patrón. Ahora estoy tratando de entender qué debo hacer si quiero que cada usuario de la primera lista pueda tener sus propias tareas por ID.
Creé esta función para separar la lógica de la interfaz de usuario:
void findByID(List<Users> users){
if(users == null) return;
final _findById = users.where((element) => element.id == element.id).toList();
}
Ahora no entiendo cómo poner esta función en la interfaz de usuario. Ahora tengo dos listas cargadas desde la API que simplemente muestran la lista de usuarios y la lista de tareas sin distribución por ID de usuario.
Toda la clase con la lógica es así:
class ApisBloc{
final _repos = Repositary();
final _usersFetcher = PublishSubject<List<Users>>();
final _todoUsers = PublishSubject<List<UsersToDos>>();
Stream<List<Users>> get allUsers => _usersFetcher.stream;
Stream<List<UsersToDos>> get allTodos => _todoUsers.stream;
fetchUsers() async{
List<Users> usersModels = await _repos.fetchUsers();
_usersFetcher.sink.add(usersModels);
}
fetchTodos() async{
List<UsersToDos> todo = await _repos.fetchTodosUsers();
_todoUsers.sink.add(todo);
}
dispose(){
_usersFetcher.close();
_todoUsers.close();
}
void findByID(List<Users> users){
if(users == null) return;
final _findById = users.where((element) => element.id == element.id).toList();
}
}
final bloc = ApisBloc();
Creo que debería poner la función findByID
en la navegación y hacerla asíncrona.
davy.ai
Para usar la función
findByID
en la interfaz de usuario, es necesario llamarla desde un método en su bloque y exponer los resultados a través de un flujo. Aquí hay un ejemplo de cómo se podría modificar su claseApisBloc
:La función
findByID
ahora toma un argumentouserId
y recupera los TODOs para ese usuario desde el repositorio llamando a un nuevo método llamadofetchTodosByUser
. Luego expone los todos a través de un nuevo flujouserTodos
.Para usar esta función en la interfaz de usuario, puede llamarla desde un método en su
BlocBuilder
:En este ejemplo, cada
ListTile
para un usuario tiene una funciónonTap
que llama a la funciónfindByID
con el id del usuario. Esto actualiza el flujouserTodos
y desencadena un cambio de estado que muestra los todos para ese usuario en lugar de la lista de usuarios.</apisbloc,>