Olá, estou implementando uma funcionalidade no sistema utilizando o Cubit como gerencia de estado. No sistema tenho duas telas, na telaA o usuário visualiza uma lista de prestadores de serviços e pode "favoritar" determinado profissional clicando num IconButton que chama um método Cubit que por sua vez vai na API para adicionar esse profissional como favorito do cliente logado, e devolve para a telaA se ocorreu tudo certo ou se teve falha no processo, até aqui está tudo correto. No método do Cubit o que eu faço é em caso de sucesso eu emito no construtor do State uma lista contendo os profissionais favoritos do usuário. Na telaB eu tenho uma listViewBuilder que consume BlocConsumer esse State, entretanto a lista sempre fica em branco, mesmo contendo itens favoritados, abaixo vou colocar os códigos
TelaA:
GestureDetector(
onTap: () async {
/// Chamamdo o método para favoritar ou não o profissional
final _clienteCubit = context.read<ClientCubit>();
final _result = await _clienteCubit.favoritarDesfavoritarProfissional(
clienteID: _clienteCubit.clientModel.id,
profissionalID: widget.professional.id,
favoritar: !favorito, #favorito é um bool
);
if (_result == true) {
setState(() {
favorito = !favorito;
});
}
},
child: favorito
? Icon(
Icons.favorite,
color: Color(0xff8A8AD3),
size: Util.getProportionScreenWidth(
context,
0.055,
),
)
: Icon(
Icons.favorite_border,
color: Color(0xff8A8AD3),
size: Util.getProportionScreenWidth(
context,
0.055,
),
),
),
TelaB:
import ...
class FavoritePage extends StatefulWidget {
@override
_FavoritePageState createState() => _FavoritePageState();
}
class _FavoritePageState extends State<FavoritePage> {
@override
Widget build(BuildContext context) {
return Container(
margin: const EdgeInsets.only(top: heightAppBarPage),
child: Scaffold(
body: _buildBody(),
backgroundColor: customBodyBackgroundColor,
),
);
}
_buildBody() {
return SingleChildScrollView(
child: Column(
...
child: _buildList(context),
),
],
),
);
}
/// Método que consume o ClientCubit/ClientState
/// que contem a lista de profissionais favoritados
_buildList(BuildContext context) {
return BlocConsumer<ClientCubit, ClientState>(
listener: (context, state) {
if (state is ClientErrorState) {}
if (state is ClientSuccessState) {}
},
builder: (context, state) {
if (state is ClientProcessState) {...}
if (state is ClientSuccessState) {...}
/// SEMPRE CAI AQUI
if (state.professionalList.length == 0) {
return customEmptyData();
}
if (state.professionalList.length > 0) {
return ListView.builder(
...
itemCount: state.professionalList.length,
itemBuilder: (context, index) {
final pModel = state.professionalList[index];
...
},
);
}
}
return Container();
},
);
}
}
Cubit:
class ClientCubit extends Cubit<ClientState> {
ClientService _service;
ClienteData _data;
ClientModel clientModel;
List<ClientModel> clientList;
List<ProfessionalModel> listaProfissionalFavorito;
ClientCubit() : super(ClientInitial()) {
_service = ClientService();
}
...
Future<bool> favoritarDesfavoritarProfissional({
String clienteID,
String profissionalID,
bool favoritar = true,
ProfessionalModel profissional,
}) async {
try {
final resultService = await _service...;
if (resultService == true) {
...
emit(
ClientSuccessState(
...
professionalList: [...listaProfissionalFavorito],
),
);
}
return resultService;
} catch (e) {return false;}
}
State:
part of 'cubit.dart';
abstract class ClientState extends Equatable {const ClientState();}
class ClientInitial extends ClientState {
@override
List<Object> get props => [];
}
class ClientProcessState extends ClientState {
@override
List<Object> get props => [];
}
class ClientSuccessState extends ClientState {
final String successMessage;
final ClientModel clientModel;
final List<ClientModel> clientList;
final List<ProfessionalModel> professionalList;
ClientSuccessState({
this.successMessage,
this.clientModel,
this.clientList,
this.professionalList,
});
@override
List<Object> get props => [];
}
class ClientErrorState extends ClientState {
final String error;
ClientErrorState(this.error);
@override
List<Object> get props => [error];
}
Gostaria de saber o que está faltando fazer?