我正在使用flutter_bloc,我想知道我应该使用哪种方法,这两种方法有什么区别?:我读到第一个有(值)的集团不会自动关闭,但实际上我不明白这是什么意思?
BlocProvider<LoginBloc>.value(
value: (LoginBloc(LoginInitialState(), AuthRepository())),
),
BlocProvider<ProfileBloc>(
create: (context) => ProfileBloc(ProfileInitialState(), AuthRepository()),
),
6条答案
按热度按时间taor4pac1#
据我所知,你会用途:
当您已经在另一个
BlocProvider
中创建了一个bloc
,并且您只希望同一个块在小工具树中的其他位置可用时。我假设,因为这个
bloc
不是由您当前使用的BlocProvider
(与BlocProvider.value
一起)创建的,所以它不会处理关闭bloc
-这将由原始BlocProvider
完成。因此,除非您要使用的
bloc
在其他地方已经不存在,否则您可能只需要对create
使用常规方法。yzxexxkh2#
在我们的例子中,如果我们要创建一个全新的腕尺来传递给孩子,我们将用途:
如果我们想使用一个已经创建好的腕尺,那么我们可以通过以下方式传递它:
cmssoen23#
在我看来,块提供程序将重置所有的状态和事件,并再次发送一个新的EventIntial。另一方面,Bloc.value不会再次发送EventIntial。
ctzwtxfj4#
除非您不需要挑选和使用已经存在的Bloc示例,否则应该使用BlocProvider(create:)。
来自 * 软件包:flutter_bloc/src/bloc_provider.dart*:
不应在BlocProvider. value中创建新的[Bloc]或[Cubit]。应始终使用[Create]函数中的默认构造函数创建新示例。
以下代码错误,因为您在值中创建了LoginBloc示例:
但您可以使用此函数从上下文树中的其他位置获取LoginBloc示例:
bksxznpy5#
**BlocProvider.value()**不会自动关闭您的区块,您需要使用dispose方法手动关闭它。
rt4zxlrg6#
根据官方文档,
BlocProvider
应该用于创建新的块,这些块将对子树的其余部分可用。在这种情况下,由于BlocProvider负责创建块,它将自动处理关闭它。在某些情况下,BlocProvider可用于将现有区块提供给小工具树的新部分。这在现有区块需要提供给新路由时最常用。在这种情况下,BlocProvider不会自动关闭区块,因为它没有创建区块。
所以第一种方法是错误的