我有一个 Flutter 应用,它使用 Bloc 模式进行状态管理。
我在存储状态的页面中有一个局部变量。
PageA:
// Outside build function
List<String> _names = []; // local variable to show the changes visually
.
.
.
// Inside build function
return Scaffold(
body: BlocConsumer<PageABloc, PageAState>(
builder: (context, state) {
if (state is PageASuccessState) {
_names = state.names; // here is problem
return _body();
} else if (state is PageALoadingState ||
state is PageAInitState) {
return Center(child: CircularProgressIndicator());
} else
return Center(child: Text("Something went wrong"));
},
listener: (context, state) {},
),
);
当用户点击state.names
中的保存按钮时,我只需要更新_body()
的状态,但要显示视觉效果对用户的更改,我使用的是 _names
局部变量。
如何将state.names
的初始值加载到_names
?
我尝试的代码不起作用,因为它会在每一帧上将任何更改重置为 _names
(local)。
我试过类似的东西,
if (state is PageASuccessState) {
final List<String> _n = state.names;
_names.addAll(_n);
return _body(_width);
}
但这只是将 state.names
重复添加到 _names
,无限次。
帮助!
答案 0 :(得分:0)
发生这种情况是因为每次调用 BlocBuilder 的构建器时,您的状态都包含 names
列表。
您应该将 List<String> _names = []
替换为 LinkedHashSet<String> _names = LinkedHashSet<String>()
;
LinkedHashSet 的工作方式与 list 完全一样,但不允许重复。您可以通过调用将其更改为列表
_names.iterator.toList();
随时随地。