【问题标题】:Operator can't be unconditionally invoked because the receiver can be null不能无条件调用操作符,因为接收者可以为空
【发布时间】:2022-01-12 02:40:13
【问题描述】:

我正在尝试将购物功能添加到我的应用中。我正在尝试使用 ChangeNotifier 添加购物车项目计数器,但收到错误消息“错误:无法无条件调用运算符“-”,因为接收者可以为“空”。我是编码新手,所以即使在研究 SO 之后我也无法找到解决方案。提前感谢您提供的任何帮助。

class EcommerceApp {

  static late SharedPreferences sharedPreferences;
  static String collectionUser = "users";
  static String collectionOrders = "orders";
  static String userCartList = 'userCart';
  static String subCollectionAddress = 'userAddress';

class CartItemCounter extends ChangeNotifier {
  final int _counter = EcommerceApp.sharedPreferences
      .getStringList(EcommerceApp.userCartList)
      ?.length - 1;

  int get count => _counter;
}

    
    }

【问题讨论】:

    标签: flutter dart dart-null-safety flutter-change-notifier


    【解决方案1】:

    getStringList() 的返回值有可能是null。 Dart 的 Null-safety 不允许这样做。您可以使用?? 运算符来确保另一个值,以防它是null。我认为这可能有效:

    class CartItemCounter extends ChangeNotifier {
      final int _counter = (EcommerceApp.sharedPreferences
          .getStringList(EcommerceApp.userCartList)
          .length ?? 0) - 1;
    
      int get count => _counter;
    }
    

    【讨论】:

    • 不是SharedPreferences 是可空类型,而是getStringList 的返回值是List<String>? (pub.dev/documentation/shared_preferences/latest/…)。你必须在这里使用?.length 而不是.length 但我认为否则这个答案是正确的。
    • @chralle 如果您可以编辑您的答案以反映 mmcdon20 的评论,我会将您的答案标记为已接受,因为代码肯定解决了我的问题。谢谢。
    猜你喜欢
    • 2022-01-09
    • 1970-01-01
    • 2021-08-18
    • 2021-11-21
    • 2022-08-24
    • 2023-03-05
    • 1970-01-01
    • 1970-01-01
    • 2021-07-03
    相关资源
    最近更新 更多