在我的应用程序中,我以以下方式使用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