问题描述
在我的应用程序中,我通过以下方式使用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,child: Consumer<Scheduleviewmodel>(
builder: (context,model,_) => ScheduleView(
experience: experience,model: model,);
} 在加载ScheduleView之前,我还想加载ScheduleView中显示的初始数据集。
加载函数位于名为“ getSchedule()”的模型内部
此刻,我在“ ScheduleView”中使用initState调用此函数并加载初始数据。
有没有一种方法可以在调用构建器之前加载数据。我已经看到了名为MultiProvider和ChangeNotifierProxyProvider的选项。
可以在这里使用它们吗?
解决方法
我快速猜测:
ChangeNotifierProvider.value
对您有用吗?
您可以先将ScheduleViewModel创建为对象,然后将其作为值传递给provider并在下面使用它。
我认为您可能需要一个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
查看更多详细信息