不再发出 Bloc 初始状态
Posted
技术标签:
【中文标题】不再发出 Bloc 初始状态【英文标题】:Bloc initial state is not emitted anymore 【发布时间】:2020-12-09 18:08:32 【问题描述】:我有一个听另一个集团的集团。将flutter_bloc
包更新为version 6.0.2
后,初始状态下监听器将不再调用。
class BlocA extends Bloc
final BlocB blocB = ...;
...
blocA.blocB.listen((state)
DO SOMTTHING...
);
...
我找到了这个解决方案:
class BlocB extends Bloc<..., ...> with BehaviorSubjectBloc
...
mixin BehaviorSubjectBloc<TEvent, TState> on Bloc<TEvent, TState>
@override
StreamSubscription<TState> listen(
void Function(TState state) onData,
Function onError,
void Function() onDone,
bool cancelOnError,
)
onData(this.state);
return super.listen(
onData,
onError: onError,
onDone: onDone,
cancelOnError: cancelOnError,
);
不知道有没有更好的解决方案?
【问题讨论】:
你需要完成什么?从 BlocB 构造函数访问 blocA.state 并将其视为特殊情况不是解决方案吗?这是一个已知的重大更改(可悲),记录在(迁移页面](bloclibrary.dev/#/…) 上。 【参考方案1】:flutter_bloc repo 中有一个关于它的问题: https://github.com/felangel/bloc/issues/1641
问题在待办事项列表上。
您可以修复您的 yaml 以强制使用以前的版本,使用单引号并删除“^”或任何其他符号。删除您的~/.pub-cache/...
文件夹和您的pubspec.lock
文件,再次运行flutter packages get
并开心。
请注意,pub-cache 文件夹在您的所有项目之间共享,因此您可以尝试仅删除其中的特定包。
您可以使用flutter packages pub deps
调查传递依赖关系,以查看flutter_bloc
依赖关系并将它们也删除。
【讨论】:
只是对您的回答的补充:Migration to 6.0.0 Documentation 中说明了此重大更改。以上是关于不再发出 Bloc 初始状态的主要内容,如果未能解决你的问题,请参考以下文章
Flutter Bloc 不会改变 TextFormField 的初始值