如何解决如何在使用之前使用提供程序加载数据
在我的应用程序中,我通过以下方式使用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
查看更多详细信息版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。