Flutter Provider 初始化默认状态?

Flutter Provider initialize default state?

我有一个我正在创建的提供程序:

ChangeNotifierProvider<WeekList>(create: (context) => WeekList()

但我想通过在开始时添加一周来初始化列表。在阅读这篇 Stack Overflow 文章之前,我感到很困惑:

但是当我自己尝试时:

    ChangeNotifierProvider<WeekList>(create: (context) => WeekList().addWeek(budget: 300.00)),

我收到这个错误:

The return type 'void' isn't a 'WeekList', as required by the closure's context.dartreturn_of_invalid_type_from_closure

因为它是空的,所以我尝试删除这样的类型:

    ChangeNotifierProvider(create: (context) => WeekList().addWeek(budget: 300.00)),

但这也没有用。

我的 WeekList class 是:

class WeekList extends ChangeNotifier {
  List<Week> listOfWeeks = [];

  void addWeek({
    required double budget,
  }) {
    Week newWeek = Week(
      budget: budget,
    );
    listOfWeeks.add(newWeek);
    
  }
}

create 您需要 return 一个 WeekList。 函数 addWeek 的类型是 void 而不是 WeekList。 您可以将该函数更改为 return WeekList,然后将使用包含新周的 listOfWeeks 创建 ChangeNotifierProvider,因为现在 listOfWeeks 将被 returned.

class WeekList extends ChangeNotifier {
  List<Week> listOfWeeks = [];

  WeekList createWeekList({
    required double budget,
  }) {
    Week newWeek = Week(
      budget: budget,
    );
    listOfWeeks.add(newWeek);
    return listOfWeeks; 
  }
}

另一种选择是用 Week 初始化 listOfWeeks,然后不在 create

中使用 addWeek
ChangeNotifierProvider<WeekList>(create: (context) => WeekList())

...

class WeekList extends ChangeNotifier {
  List<Week> listOfWeeks = [Week(budget: budget: 300.00)];

  void addWeek({
    required double budget,
  }) {
    Week newWeek = Week(
      budget: budget,
    );
    listOfWeeks.add(newWeek);
    
  }
}

如果您需要指定预算金额,另一种选择是使用预算金额的首字母 WeekList

ChangeNotifierProvider<WeekList>(create: (context) => WeekList(budget: 300.00))

...

class WeekList extends ChangeNotifier {
  final double budget;
  const WeekList({required this.budget}){
    listOfWeeks = [Week(budget: budget: budget)]
  }
  Late final List<Week> listOfWeeks;

  void addWeek({
    required double budget,
  }) {
    Week newWeek = Week(
      budget: budget,
    );
    listOfWeeks.add(newWeek);
    
  }
}

那么我能想到的还有一种选择,那就是使用级联表示法。 https://dart.dev/guides/language/language-tour#cascade-notation 看起来像这样。

 ChangeNotifierProvider<WeekList>(create: (context) => WeekList()..addWeek(budget: 300.00)),