如何解决无法获取流的第一个值,颤振中的 BLOC 模式
我正在使用 BLOC 模式制作我的第一个项目,但我一直坚持这一件事。我做了一个 bloc 类并在里面放了一个搜索功能。我想搜索流的第一个值并将结果添加到流中。但出于某种原因,编译器没有进入该逻辑。 请告诉我出了什么问题。有一个更好的方法吗。我找不到任何关于响应式编程的详尽演示或文档。
import 'package:mathecad/Models/assignment.dart';
import 'package:mathecad/Resources/repository.dart';
import 'package:rxdart/rxdart.dart';
class AssignmentBloc {
final _repository = Repository(true);
final _assignmentStream = PublishSubject<List<Assignment>>();
Stream<List<Assignment>> get assignments => _assignmentStream.stream.asBroadcastStream();
getAssignments() async {
List<Assignment> list = await _repository.getAllAssignments();
_assignmentStream.sink.add(list);
}
filterByCourse(String course) async {
List<Assignment> _filteredAssignments = [];
if (course == 'All') {
_assignmentStream.first.then((assignmentList) => _assignmentStream.sink.add(assignmentList));
} else {
assignments.first.then((asssignmentList) {
asssignmentList.forEach((assignment) { // =========== code not executed =============
if (assignment.session.course.name == course) {
_filteredAssignments.add(assignment);
}
});
_assignmentStream.sink.add(_filteredAssignments);
},onError: (error) {
print("Error" + error);
});
}
}
dispose() {
_assignmentStream.close();
}
}
流用于在屏幕中构建列表视图。
Expanded(
flex: 15,child: StreamBuilder(
initialData: null,stream: _bloc.assignments,builder: (context,AsyncSnapshot<List<Assignment>> snapshot) {
if (snapshot.hasData) {
return ListView.builder(
physics: BouncingScrollPhysics(),padding: EdgeInsets.symmetric(horizontal: 8.0),itemCount: snapshot.data.length,itemBuilder: (context,index) {
return AssignmentTile(assignment: snapshot.data[index]);
},);
} else {
return Center(
child: CircularProgressIndicator(
strokeWidth: 3,));
}
},),
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。