I am trying to pass data from a GridView builder with index value but getting following error:
The method '[]' can't be unconditionally invoked because the receiver can be 'null'.
Try making the call conditional (using '?.') or adding a null check to the target ('!').
On this line:
itemBuilder: (BuildContext ctxt, int index) {
return ProductCard(
product: productsProvider.data[index],
);
}),
However if i put null check operator(!) it shows another error:
itemBuilder: (BuildContext ctxt, int index) {
return ProductCard(
product: productsProvider.data![index],
);
}),
The operator '[]' isn't defined for the type 'AsyncData<ProductCategoryDetailsModel>'.
Try defining the operator '[]'.
I have tried placing null safety operators (? and !) every possible place but couldn't find any way. Please help!
@override
Widget build(BuildContext context, ScopedReader watch) {
AsyncValue<ProductCategoryDetailsModel>? productsProvider =
watch(productCategoryDetailsProvider);
return Scaffold(
body: Center(
child: SingleChildScrollView(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
productsProvider!.when(
data: (data) {
return SingleChildScrollView(
child: Column(
children: [
Container(
margin: EdgeInsets.all(20),
child: GridView.builder(
itemCount: data.data!.data!.length,
physics: BouncingScrollPhysics(),
gridDelegate:
SliverGridDelegateWithMaxCrossAxisExtent(
maxCrossAxisExtent: 180,
childAspectRatio: 3 / 4,
crossAxisSpacing: 10,
mainAxisSpacing: 10),
shrinkWrap: true,
itemBuilder: (BuildContext ctxt, int index) {
return ProductCard(
product: productsProvider.data[index],
);
}),
),
],
),
);
},
loading: () => Center(
child: CircularProgressIndicator(),
),
error: (error, stack) => Text(error.toString())),
],
),
),
),
);
}
}