gpt4 book ai didi

Flutter:我可以在 BLoC 架构中使用 setState() 吗?

转载 作者:行者123 更新时间:2023-12-03 18:28:38 25 4
gpt4 key购买 nike

我对状态管理的理解是调用setState()单独打开各种困惑的问题,代码文件变得庞大且难以调试,并且它阻止了项目的合理结构。在小部件的外观略有变化的情况下,拥有像 BLoC 或 ScopedModel 这样的复杂架构只是为了显示/隐藏小部件(例如)是没有意义的。但是,我的理解是不能混用setState()和一个架构在一起,否则架构的意义何在?

让我们用 BLoC 来回答这个问题(只是因为我碰巧在用它),特别是 this package .假设我有这个 super 简单的示例代码:

class MyWidget extends StatefulWidget {
@override
void createState() {
return _MyWidgetState();
}
}

class _MyWidgetState extends State<MyWidget>() {
bool _isShowing = false;
MyBloc bloc;

@override
void initState() {
super.init();
bloc = MyBloc();
}

@override
Widget build(BuildContext context) {
return BlocBuilder(
bloc: bloc,
builder: (context, state) {
return Column(
children: <Widget>[
Text(state.myText),
if (_isShowing)
Text("Button has been pressed!"),
RaisedButton(
child: Text("Show label"),
onTap: () => setState(() => _isShowing = true),
),
RaisedButton(
child: Text("Run event"),
onTap: () => bloc.add(NewEvent()),
),
],
);
},
);
}
}

在上面的粗略示例中,将 BLoC 模式与 setState() 混合是否正确/可接受?为什么我不使用 BLoC 来处理显示 Text小部件?我在哪里划线?有什么优点/缺点?有性能差异吗?

注意:我不是在寻找“将两个 Text 小部件合并在一起”的答案。我正在寻找纯粹的建筑观点。

最佳答案

你可以。

像 scoped_model/bloc/etc 这样的架构并不是要删除对 setState 的调用。
它们是关于分离关注点和简化实现

你可以而且应该在需要使用 setState 时使用它,例如动画。

首先,即使是这些架构也使用 setState。你只是没有看到它,但它就在那里

关于Flutter:我可以在 BLoC 架构中使用 setState() 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59392401/

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