BlocProvider.value 与 BlocProvider(create:)

Osa*_*med 15 flutter flutter-bloc

我正在使用 flutter_bloc,我想知道我应该使用哪种方法,这两种方法有什么区别?:我读到第一个带有(值)的块不会自动关闭,但实际上我不明白什么是什么意思?

BlocProvider<LoginBloc>.value(
  value:  (LoginBloc(LoginInitialState(), AuthRepository())),
  ),

  

 BlocProvider<ProfileBloc>(
         create:  (context) => ProfileBloc(ProfileInitialState(), AuthRepository()),
       ),
Run Code Online (Sandbox Code Playgroud)

小智 24

据我了解,你会使用:

BlocProvider.value(
  value: BlocProvider.of<BlocA>(context),
  child: ScreenA(),
);
Run Code Online (Sandbox Code Playgroud)

当您已经bloc在不同的位置创建了一个块BlocProvider,并且您只想在小部件树的其他位置使用相同的块时

我假设因为这bloc不是由BlocProvider您当前使用的(with BlocProvider.value)创建的,所以它不会处理关闭bloc- 这将由原始的BlocProvider.

因此,除非bloc您想要使用的 已在其他地方不存在,否则您可能只需使用 的普通方法即可create


Luc*_*cas 10

在我们的例子中,如果我们创建一个全新的肘节只是为了传递给孩子,我们将使用:

BlocProvider<NameOfCubit>(
  ...
  child: Screen(),
)
Run Code Online (Sandbox Code Playgroud)

如果我们想使用已经创建的肘节,那么我们将通过以下方式传递它:

BlocProvider<NameOfCubit>.value(
  ...
  child: Screen(),
)
Run Code Online (Sandbox Code Playgroud)