I am currently stuck with the consumption of a new value coming from a Provider.Consumer
Requirement:
Trigger new server call to get new data, refresh UI after coming back from SettingsPage
on my HomePage I am getting all the available strings given the languageCode using a BloC object, this language code I am reading from a LanguageProvider class that pretty much notifies changes in the sharedPreferences.
Here is my consumer part,
class HomePage extends StatelessWidget {
const HomePage({super.key});
@override
Widget build(BuildContext context) {
return Consumer<LanguageProvider>(
builder: (context, languageProvider, child) {
return BlocProvider(
create: (context) => HomePageBloc(
getTerms: context.read<GetAllTerms>(),
languageProvider: languageProvider,
)..add(const FetchTopicsEvent()),
child: const _Content(),
);
});
}
}
HomePageBloc
class HomePageBloc extends Bloc<HomePageEvent, HomePageState> {
HomePageBloc({
required GetAllTerms getTerms,
required LanguageProvider languageProvider,
}) : _getAllTerms = getTerms,
_languageProvider = languageProvider,
super(const HomePageState()) {
on<FetchTopicsEvent>(
_fetchTopics,
transformer: throttleDroppable(const Duration(milliseconds: 100)),
);
}
final GetAllTerms _getAllTerms;
final LanguageProvider _languageProvider;
Future<void> _fetchTopics(event, Emitter<HomePageState> emit) async {
emit(state.copyWith(status: HomePageStatus.loading));
final list = await _getAllTerms(_languageProvider.getPrefLanguageCode());
emit(
state.copyWith(
status: HomePageStatus.success,
terms: list,
),
);
}
}
So far, the consumer bloc is being called every time I update the language preference from Settings and the bloc is being attached but it doesn’t go inside the method _fetchTopics
again, so there is no new state produced from my BloC.
Expectation:
UI should refresh on consumer block