gpt4 book ai didi

dart - 如果我的应用正在使用 bloc,我是否需要 StatefulWidget?

转载 作者:IT老高 更新时间:2023-10-28 12:38:27 26 4
gpt4 key购买 nike

我错过了一些东西。

我最近看了讲座here ,在 Dart 中,flutter 开发人员正在使用带有 reactx 的 bloc 开发方法。如果我使用这些流和 streamBuilders 来管理流经我的应用程序的数据,并适本地重建,我是否应该使用 StatefulWidget,无论如何我都在使用 bloc 方法?我想更具体地说,我为什么要使用流和状态使我的应用程序复杂化,而我可以只使用流,将我需要的东西包装在提供程序中,将一些小部件包装在 streamBuilder 中,然后就这样结束了?

最佳答案

does it behoove me to use a StatefulWidget, where I'm using the bloc method anyway? I guess more specifically, why would I want to complicate my app using streams and states, when I could just use streams, wrap what I need to in a provider, wrap some widgets in a streamBuilder, and call it a day?

问题的答案取决于您的目标。

StatefulWidget 无法扩展到更大的应用程序。 BLOC 模式可以。

为什么 StatefulWidget 不适合大型应用程序?

将信息从一个屏幕传递到同级屏幕往往具有挑战性,这意味着您必须编写大量代码才能将数据从一个屏幕传输到另一个屏幕。这是可能的,但它往往是一种痛苦,这就是 BLOC 模式解决的问题。

它使在我们的应用程序内的多个小部件之间共享信息变得容易。

BLOC 代表 Business LOgic Component,它的想法是容纳所有数据或在一个区域内的应用程序内部状态。它位于应用程序的其余部分之外,便于访问。

这与 StatefulWidget 不同,因为使用 BLOC,所有数据都可以存在于组件层次结构之外的一个类中。因此,状态正在集中到某个外部对象。

因此,对于 BLOC 模式,您确实需要对流有深入的了解,并且您提到了 StreamBuilder 小部件,它是 flutter 和流真正融合在一起的。

StreamBuilder 接受一个流和一个构建器函数,并且只要 StreamBuilder 看到一条新数据,它就会调用构建器函数并在我们的移动设备上重新呈现自己,所以它看起来像这个:

Widget emailField() {
return StreamBuilder(
stream: bloc.email,
builder: (context, snapshot) {
return TextField(
keyboardType: TextInputType.emailAddress,
decoration: InputDecoration(
hintText: 'you@example.com',
labelText: 'Email Address',
),
);
});
}

上述方法是单个全局实例,适用于小型应用程序。

你提到的provider是继承了widget基类的类。

import 'package:flutter/material.dart';
import 'bloc.dart';

class Provider extends InheritedWidget {
final bloc = Bloc();

bool updateShouldNotify(_) => true;

static Bloc of(BuildContext, context) {
return (context.inheritFromWidgetOfExactType(Provider) as Provider).bloc;
}
}

关于dart - 如果我的应用正在使用 bloc,我是否需要 StatefulWidget?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51425295/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com