I’m facing an issue with Riverpod where a counter that increments every second stops updating when another state (a list of orders) is updated. Here’s a simplified version of my code:
class Orders extends StatelessWidget {
const Orders({
super.key,
});
@override
Widget build(BuildContext context) {
return Consumer(builder: (context, ref, _) {
final orders = ref.watch(ordersProvider);
return orders != null
? Expanded(
child: ListView.separated(
shrinkWrap: true,
padding: const EdgeInsets.all(16),
separatorBuilder: (context, i) => const SizedBox(
height: 18,
),
itemBuilder: (context, index) {
final item = deliveries[index];
return OrderItem(
order: item,
);
},
itemCount: deliveries.take(5).length,
),
)
: const CircularLoader();
});
}
}
// Order provider
final ordersProvider =
StateNotifierProvider<OrdersNotifier, List<OrderModel>?>((ref) {
return OrdersNotifier();
});
class OrdersNotifier extends StateNotifier<List<OrderModel>?> {
OrdersNotifier() : super(null);
void updateDeliveries(List<dynamic> data) async {
List<OrderModel> updatedOrders =
data.map((order) => OrderModel.fromJson(order)).toList();
updatedOrders.sort(
(a, b) => b.createdAt!pareTo(a.createdAt!),
);
state = [...updatedOrders];
}
}
I’ve ensured that the counter logic is isolated in its own provider: