首页 > 解决方案 > Dart Global 类返回 Null 列表

问题描述

class Cart {
  static final Cart _instance = Cart._internal();
  List<Food>  _listOfFood = [];
  factory Cart([List food])  => _instance;

  Cart._internal() {
     this._listOfFood = [];
}
void  addItems(Food food) {
 print(this.listOfFood);
 }

当我选择“addItems”时,它返回 null。

标签: listflutterdartglobal

解决方案


我不确定您尝试使用此代码示例实现什么目标:

  1. 似乎您正在实现单例设计模式,但您为工厂提供了一个参数。当您有以下代码时,您期望会发生什么?
final cart1 = Cart();
cart1.addItems(food1);
cart2.addItems(food2);
final cart2 = Cart([food3, food4]);

购物车现在包含什么?

  1. 为什么要初始化_listOfFood两次[]

  2. 您的方法void addItems(Food food)(可能应该被称为addItemor addFood)除了打印列表之外什么都不做。所以,是的,它什么也不返回。


这是此类 Cart Singleton 类的最小工作示例:

void main() {
  final cart1 = Cart();
  cart1.addFood(Food(name: 'banana'));
  cart1.addFood(Food(name: 'apple'));
  cart1.addFood(Food(name: 'orange'));
  final cart2 = Cart();
  cart2.addFood(Food(name: 'mango'));
  print(cart1); // Your cart contains: banana, apple, orange, mango
  print(cart2); // Your cart contains: banana, apple, orange, mango
}

class Cart {

  static final Cart _instance = Cart._internal();
  
  List<Food> _listOfFood = [];
  
  factory Cart()  => _instance;

  Cart._internal();
  
  void  addFood(Food food) {
    _listOfFood.add(food);
  }
  
  String toString() => 'Your cart contains: ${_listOfFood.join(', ')}';
}

class Food {
  final String name;
  
  const Food({required this.name});
  
  String toString() => name;
}

注意:在 Flutter 中,与使用 Singleton 全局类相比,您有更好的方法来实现应用程序的 State。查看所有状态管理方法


推荐阅读