所以我创建了一个 List<Map<String, dynamic>>
状态,但是当我尝试添加一个新元素时,它覆盖了所有元素。例如,一开始我在地址值为1的地方添加了一个新元素,第二次在地址值为9的地方添加了一个新元素,但是所有的元素都被新元素覆盖了(list的所有元素,地址值变为9)。大家有没有和我一样的问题?我坚持了好几天
在我添加新元素之前:
添加新元素后:
这是我如何添加新元素的代码,state.values
来自 BlocListener
,它在状态改变时监听并携带值
...
List<Map<String, dynamic>> _records = [];
Widget build(BuildContext context) {
final GlobalKey<ScaffoldState> _scaffoldKey = GlobalKey<ScaffoldState>();
return Scaffold(
key: _scaffoldKey,
appBar: AppBar(
centerTitle: true,
backgroundColor: ColorConst.appBarColor,
title: Text(
widget.field!.label!,
style: TextStyle(color: Colors.white),
),
),
body: SafeArea(
child: BlocListener<ViewPageBloc, ViewPageState>(
bloc: _formViewBloc,
listener: (context, state) {
if (state.isProcessing) {
if (isSaveAndNew) {
_records.add(state.values);
_formViewBloc.add(ViewPageLoadFormModel(
modelName: (widget.field as RelationalField)
.relation!
.modelName));
isSaveAndNew = false;
}
}
}
.
.
.
)
)
)
}
答案 0 :(得分:0)
final GlobalKey<ScaffoldState> _scaffoldKey = GlobalKey<ScaffoldState>();
不要在构建方法中声明。您的构建方法被触发两次。 改用 ScaffoldMessenger()。
final GlobalKey<ScaffoldState> _scaffoldKey = GlobalKey<ScaffoldState>();
Widget build(BuildContext context) {
return Scaffold(
key: _scaffoldKey,
appBar: AppBar(
centerTitle: true,
backgroundColor: ColorConst.appBarColor,
title: Text(
widget.field!.label!,
style: TextStyle(color: Colors.white),
),
),
body: SafeArea(
child: BlocListener<ViewPageBloc, ViewPageState>(
bloc: _formViewBloc,
listener: (context, state) {
if (state.isProcessing) {
if (isSaveAndNew) {
_records.add(state.values);
_formViewBloc.add(ViewPageLoadFormModel(
modelName: (widget.field as RelationalField)
.relation!
.modelName));
isSaveAndNew = false;
}
}
}
.
.
.
)
)
)
}