【问题标题】:Can I use BlocBuilder directly in BlocProvider in Flutter?我可以在 Flutter 的 BlocProvider 中直接使用 BlocBuilder 吗?
【发布时间】:2022-01-19 01:24:53
【问题描述】:

我可以直接在 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),
            ),
          );
        },
      ),
    );
  }
}

【问题讨论】:

    标签: flutter bloc


    【解决方案1】:

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

    • 对于小型项目和原型?确定
    • 对于大型项目?大不

    通常您希望尽可能多地分离事物,因为就像它的名称 Blocbuilder 一样,它会在它的“内部”重建小部件

    所以如果你用这么多的小部件包装 示例就像帖子小部件 如果您像 Iconbutton 一样点击,则需要重建的小部件只是 iconButton 正确,但如果您将整个帖子包装起来,它将以 60 fps(标准)在用户屏幕中重新呈现

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

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

    【讨论】:

    • 感谢您的回答。我现在正在构建一个应用程序的骨架。我很确定这样是不正确的,但是很多例子都在树的顶部有 BlocBuilder,我开始怀疑了。
    猜你喜欢
    • 2020-07-17
    • 2019-11-08
    • 2021-05-26
    • 2011-05-30
    • 1970-01-01
    • 2021-11-20
    • 2022-01-06
    • 2021-05-14
    • 2020-04-22
    相关资源
    最近更新 更多