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)),
我有一个我正在创建的提供程序:
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)),