Reputation: 311
I am using riverpod ^1.0.0. I have created a StateClass which extends Equatable. In my StateNotifier i set state depending on events and outcomes. One being an async http request which upon success sets
state=SalesOrderListSuccess(salesOrderListItems: _items);
Upon http client failure however i set state to:
state = SalesOrderListError(error: response.data);
This works, upon success it renders the list in below UI builder. And it also using ref.listen and shows the snackbar. However, because the state changes from SalesOrderListSuccess and i am using ref.watch it seems that it cant keep the former known list and UI. How can i show the snackbar above the last known SalesOrderListSuccess/UI without rendering an entire new Error Page that is empty of all the items i have already managed to render in the list ?
Basically i dont want the list to change, just show a snackbar above last known list before the http client error happend.
Here the current widget: (this requires the SalesOrderListSuccess state in order to show the list).
@override
Widget build(BuildContext context, WidgetRef ref) {
final todos = ref.watch(todoListProvider);
final selectedtrack = ref.read(selectedProductIdProvider2.notifier);
ref.listen(todoListProvider, (previous, count) {
print(previous);
print(count);
switch (count.runtimeType) {
case SalesOrderListError:
ScaffoldMessenger.of(context).showSnackBar(
const SnackBar(content: Text('Ohh no some error happend')),
);
}
});
return ListView.builder(
shrinkWrap: true, // 1st add
physics: ClampingScrollPhysics(),
itemCount: (todos as SalesOrderListSuccess).salesOrderListItems.length,
itemBuilder: (context, index) {
final current=
(todos as SalesOrderListSuccess).salesOrderListItems[index];
return ListTile(
title: Text('${current.title}'),
onTap: () {
selectedtrack.state = index;
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => DetailScreen(),
),
);
});
},
);
}
Upvotes: 2
Views: 1379
Reputation: 481
Hi have a look at riverpod_messages. I had your same problems and I have written a package for this
https://pub.dev/packages/riverpod_messages/versions/1.0.0
Let me know!
Upvotes: 0