如何在不使用任何库的情况下在颤振中使用 bloc
Posted
技术标签:
【中文标题】如何在不使用任何库的情况下在颤振中使用 bloc【英文标题】:How to use bloc in flutter without using any library 【发布时间】:2020-09-06 22:56:44 【问题描述】:我想用bloc pattern
管理我的应用程序的状态,我在互联网上搜索并找到了很多主题,但我不想都使用third party libraries
。
那么是否有任何资源或示例可以帮助我们使用 bloc pattern
而无需依赖任何外部库,例如:bloc, flutter_bloc, rxdart
?
我只想使用flutter built-in
功能,而不是任何其他库。
【问题讨论】:
【参考方案1】:这是我旧代码中的一个 sn-p,但我强烈建议使用 bloc 和 flutter_bloc,它删除了很多样板代码,它更安全且更广为人知,VSCode 插件也处理大量代码生成。
class VotesBloc
final List<VoteCount> voteGroups = []; // initial state
// broadcasting stream so it can be used multiple times
final _controlStateController = StreamController<List<VoteCount>>.broadcast();
StreamSink<List<VoteCount>> get _incomingVote => _controlStateController.sink;
Stream<List<VoteCount>> get outgoingVote => _controlStateController.stream;
final _votesEventController = StreamController<VoteEvent>.broadcast();
Sink<VoteEvent> get votesEventSink => _votesEventController.sink;
VotesBloc()
_votesEventController.stream.listen(_mapValuesToState);
void _mapValuesToState(VoteEvent event)
if (event is NewVoteEvent)
// handle this state
else if (event is VoteChangedEvent)
// handle this state
_incomingVote.add(voteGroups);
void dispose()
_controlStateController.close();
_votesEventController.close();
abstract class VoteEvent
final Vote _vote;
VoteEvent(this._vote);
class NewVoteEvent extends VoteEvent
NewVoteEvent(Vote vote) : super(vote);
class VoteChangedEvent extends VoteEvent
VoteChangedEvent(Vote vote) : super(vote);
class VoteCount
final String value;
int counter;
List<Vote> votes;
VoteCount(this.value, this.counter, this.votes);
和builder函数:
StreamBuilder<List<VoteCount>>(
stream: votesBloc.outgoingVote,
initialData: votesBloc.voteGroups,
builder: (BuildContext context, AsyncSnapshot<List<VoteCount>> snapshot)
return Widget();
)
在外面使用 bloc:
votesBloc.votesEventSink.add(VoteChangedEvent(vote));
【讨论】:
哇,谢谢你的代码,你能分享你用过的这些课程的任何在线文档吗?为什么我不想要第三方库?因为我为他们工作的公司,他们从不建议我们使用第三方包,因为他们认为第三方包没有维护很长时间。Sink
和 StreamSink
有什么区别,因为你都用过,是不是很重要
一个流用于发布事件,另一个用于发布事件。可以在没有两个的情况下进行设计,我发现有两个更符合“关注点分离”原则。以上是关于如何在不使用任何库的情况下在颤振中使用 bloc的主要内容,如果未能解决你的问题,请参考以下文章
如何在不需要自定义库的情况下在 Google Colabs 上使用 Selenium IDE,例如科拉?
如何在没有任何 vue 库的情况下在 vue 回调中获取 http 响应标头(axios)
我已经安装了 OpenCV C++。我可以在不重新安装库的情况下在 Python 中使用它的功能吗?
如何在不使用任何形式的查找表的情况下在 Swift for iOS 8 中列出(几乎)所有表情符号?