问题描述
我正在尝试从具有索引值的 GridView 构建器传递数据,但出现以下错误:
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 ('!').
在这一行:
itemBuilder: (BuildContext ctxt,int index) {
return ProductCard(
product: productsProvider.data[index],);
}),
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 '[]'.
我曾尝试将空安全运算符(? 和 !)放置在每个可能的位置,但找不到任何方法。请帮忙!
@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())),);
}
}
解决方法
尝试使用运算符 List?['property']
访问地图
itemBuilder: (BuildContext ctxt,int index) {
return ProductCard(
product: productsProvider.data?[index],//edit in the above line data![index] to data?[index]
);
}),
,
哦!我传递了错误的信息。正确的代码是:
itemBuilder: (BuildContext ctxt,int index) {
return ProductCard(
product: data.data!.data![index],);
}),