如何使用提供程序在消费前加载数据



在我的应用程序中,我以以下方式使用provider;

我创建这样的时间表视图;

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"调用此函数并加载初始数据。

有没有一种方法可以在调用生成器之前加载数据。我看到了名为MultiProvider和ChangeNotificationProxyProvider的选项。

它们能在这里使用吗?

我快速猜测:ChangeNotifierProvider.value适合你吗?您可以先将ScheduleViewModel创建为Object,然后将其作为值传递到提供程序中,然后在下面使用它。

我想你可能想要一个futureBuilder,它可以选择在异步数据还没有准备好的时候显示其他小部件。

return FutureBuilder(
future: db.getSchedules(), // it should be a async future function
builder: (BuildContext context, AsyncSnapshot<dynamic> snapshot) {
if(snapshot.connectionState == ConnectionState.done && snapshot.hasData){
return ... // when data is done you can get the data by snapshot.data
}else{
return CircularProgressIndicator(); // waiting widget
}
};
);

你可以在这里看到更多细节FutureBuilder

最新更新