【发布时间】:2020-08-21 19:03:13
【问题描述】:
我的集团中有一些流。我不确定这是否是正确和正确的方法,因为我是 Flutter 和 Bloc 模式的新手。 但是我怎样才能将 Bloc 中的流合并为一个呢?
欢迎任何关于该主题的提示......
我的 Bloc 文件
import 'package:flutter/material.dart';
import 'package:rxdart/rxdart.dart';
class WelcomeBloc {
final _controller = PublishSubject<PageController>();
final _page = PublishSubject<int>();
final _lastPage = PublishSubject<bool>();
Stream<dynamic> get combinedStream =>
CombineLatestStream.list([getController, currentPage, isLastPage]);
Stream<PageController> get getController => _controller.stream;
Stream<int> get currentPage => _page.stream;
Stream<bool> get isLastPage => _lastPage.stream;
updatePage(int page) {
_page.sink.add(page);
}
updatePageState(bool state) {
_lastPage.sink.add(state);
}
dispose() {
_controller.close();
_page.close();
_lastPage.close();
}
}
final welcomeBloc = WelcomeBloc();
消费者
import 'package:flutter/material.dart';
import '../../blocs/welcome_bloc.dart';
import './pages/page.dart';
import './pages/page2.dart';
import './pages/login.dart';
class ViewerWrapper extends StatelessWidget {
@override
Widget build(BuildContext context) {
return StreamBuilder(
stream: welcomeBloc.combinedStream,
builder: (context, AsyncSnapshot snapshot) {
return PageView(
children: <Widget>[
Page1(),
Page2(),
Login(),
],
onPageChanged: (page) {
welcomeBloc.updatePage(page);
print(snapshot.data._page);
// welcomeBloc.updatePage(page + 1);
},
// controller: snapshot.data.getController,
);
});
}
}
【问题讨论】:
-
合并是什么意思?
-
@AnirudhBagri 感谢您来到这里,伙计!)我的意思是,在我的 Bloc 文件中,我有三个流,但在 StreamBuilder 中,我只能订阅一个流。因此,据我所知,我应该将它们合并在一起,以便可以在我的 StreamBuilder 中使用它。我尝试使用combinedlatest,但它为我返回null。我想我在那里做错了什么。
标签: flutter flutter-dependencies rxdart