Flutter中的BlocProvider可以直接使用BlocBuilder吗?

Can I use BlocBuilder directly in BlocProvider in Flutter?

我能否直接在 BlocProvider 中使用 BlocBuilder 并访问整个树中的状态,或者如果我打算通过状态更改它,我应该在每个小部件上单独使用 BlocBuilder 吗?

现在我在顶层有这个构造并将状态注入树的较低部分:

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return MultiBlocProvider(
      providers: [
        BlocProvider<NavigationCubit>(create: (context) => NavigationCubit())
      ],
      child: BlocBuilder<NavigationCubit, NavigationState>(
        builder: (context, state) {
          return WillPopScope(
            onWillPop: () async => false,
            child: const MaterialApp(
              home: RootContainer(state),
            ),
          );
        },
      ),
    );
  }
}

嗯是的你可以但不建议以某种方式这样做

  • 对于小型项目和原型?当然
  • 大型项目?大不

通常你想尽可能多地分离东西,因为就像它的名字 Blocbuilder 它将重建它的小部件 'INSIDE'

所以如果你包装了那么多小部件 示例类似于 post 小部件 如果你像 Iconbutton 一样点击,需要重建的小部件只是 iconButton,但如果你包裹整个 post 它将以 60 fps(标准)

在用户屏幕中重新呈现

所以如果你那样做就不要再做一次,因为当项目变大时用户体验会很糟糕

tldr:如果你这样做的话,它就像 setstate 一样有额外的步骤