我正在尝试使用StreamProvider从Firebase集合中检索对象列表,并且正在检索这些对象,但是在一秒钟内,控制台会在屏幕上呈现数据之前用红色屏幕引发错误。 。这是显示的错误...
The getter 'length' was called on null.
Receiver: null
Tried calling: length
这就是我现在需要的代码...
StreamProvider(create: (context) => _jobDb.getJobs(),),
Stream<List<Job>> getJobs() {
return _api.streamDataCollection().map((snapshot) => snapshot.documents
.map((document) => Job.fromJson(document.data))
.toList());
}
class ScrollableJobList extends StatelessWidget {
@override
Widget build(BuildContext context) {
final jobs = Provider.of<List<Job>>(context);
return ListView.builder(
itemBuilder: (context, index) {
Job job = jobs[index];
return JobListTile(
jobDetails: job,
);
},
itemCount: jobs.length,
);
}
}
那么我在这里想念什么吗?我尝试在StreamProvider上使用初始数据参数,但这没有用。我应该使某些东西异步化还是使用诸如FutureBuilder之类的东西,或者在没有数据时返回某些东西,但是我将如何实现呢?
答案 0 :(得分:0)
这是迄今为止我看过的最好的教程,请尝试查看。
答案 1 :(得分:0)
您应该将Consumer
小部件与StreamProvider
结合使用。
StreamProvider<List<Job>>(
create: (context) => _jobDb.getJobs(),
child: Consumer<List<Job>>(
builder: (_, jobs, __) {
return jobs == null ?
CircularProgressIndicator() :
jobs.isEmpty ?
Text('No jobs') :
ListView.builder(
itemBuilder: (context, index) {
Job job = jobs[index];
return JobListTile(
jobDetails: job,
);
},
itemCount: jobs.length,
);
}
),
),