【问题标题】:Flutter null safety: The method '[]' can't be unconditionally invoked because the receiver can be 'null' [duplicate]Flutter null 安全性:不能无条件调用方法“[]”,因为接收器可以为“null”[重复]
【发布时间】:2021-09-16 03:57:43
【问题描述】:

我正在尝试从具有索引值的 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())),
          ],
        ),
      ),
    ),
  );
 }
}

【问题讨论】:

    标签: flutter riverpod null-check


    【解决方案1】:

    尝试使用运算符List?['property'] 访问地图

    itemBuilder: (BuildContext ctxt, int index) {
       return ProductCard(
          product: productsProvider.data?[index],
            //edit in the above line data![index] to data?[index]
       );
    }),
    

    【讨论】:

    • 能否请您关联我的代码
    【解决方案2】:

    哦!我传递了错误的信息。正确的代码是:

     itemBuilder: (BuildContext ctxt, int index) {
         return ProductCard(
           product: data.data!.data![index],
         );
     }),
    

    【讨论】:

      猜你喜欢
      • 2021-09-18
      • 1970-01-01
      • 2021-12-01
      • 2022-08-15
      • 2021-09-05
      • 2023-03-05
      • 1970-01-01
      • 1970-01-01
      • 2021-08-27
      相关资源
      最近更新 更多