【发布时间】:2021-02-05 02:42:21
【问题描述】:
在我的应用程序中,我以下列方式使用提供者;
我这样创建日程视图;
await Navigator.of(context, rootNavigator: true).push(
MaterialPageRoute(
builder: (BuildContext context) =>
ScheduleView.create(context, experience),
),
);
创建函数;
static Widget create(BuildContext context, ExperienceDetailed experience) {
final db = Provider.of<Database>(context, listen: false);
// to get initial data i need to call function
// db.getSchedules();
// can i just do it here ?
return ChangeNotifierProvider<ScheduleViewModel>(
create: (context) => ScheduleViewModel(db, experience),
child: Consumer<ScheduleViewModel>(
builder: (context, model, _) => ScheduleView(
experience: experience,
model: model,
),
),
);
} 在加载 ScheduleView 之前,我还想加载 ScheduleView 中显示的初始数据集。
加载函数在名为“getSchedule()”的模型内部
目前我在“ScheduleView”中使用initState来调用这个函数并加载初始数据。
有没有办法在调用构建器之前加载数据。我见过名为 MultiProvider 和 ChangeNotifierProxyProvider 的选项。
可以在这里使用吗?
【问题讨论】:
-
你的意思是
using data inside ScheduleView when rebuilding ScheduleView吗?我认为您的问题有点令人困惑。 -
是的,我需要在 ScheduleView 首次加载时显示初始数据集。我只需要它进行第一次构建。后续构建用户可以随意加载。
-
我仍然不明白 ScheduleView 在构建之前如何包含数据(第一次)?你能更详细地描述你的问题吗? (也许在代码中?)
-
我传递了 db,一个可以将数据获取到 ScheduleViewModel 构造函数的提供程序。然后我可以调用 ScheduleViewModel 中的方法来获取数据。在这里您可以看到我构造了 ScheduleViewModel 对象并将其传递给 ScheduleView 构造函数。但是我仍然需要调用一个方法来在 ScheduleView 的 initState 中加载必要的数据。我想要做的是将初始数据也作为参数传递给 ScheduleView。我通过 ScheduleViewModel 的方式相同。或者调用 ScheduleViewModel 内部的一个方法,在将数据作为参数传递给 ScheduleView 之前获取数据。
标签: flutter provider consumer flutter-change-notifier