【发布时间】:2021-02-18 14:23:23
【问题描述】:
我正在制作一个页面,其中包含一些相互交互的保管箱和一个 Futurebuilder 包装的 ListView。
当 Dropbox 更改并单击复选框时,我正在调用“setState”。 但是,由于复选框的 onChanged 中的 setState,Futurebuilder 不断被调用,并且 ListView 被重建。 因此,当像下面的视频一样单击复选框时,整个 Listview 都会闪烁。
我想保留 Listview 并仅更新复选框。 有谁能帮助我吗? 谢谢。
完整代码是
class _StatefulDialogWidgetState extends State<StatefulDialogWidget> {
....
@override
Widget build(BuildContext context) {
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
// Dropdown's
Dropdown(0, widget.ReceiveArgs, _lListOfDepthList),
Dropdown(1, widget.ReceiveArgs, _lListOfDepthList),
Dropdown(2, widget.ReceiveArgs, _lListOfDepthList),
Dropdown(3, widget.ReceiveArgs, _lListOfDepthList),
Dropdown(4, widget.ReceiveArgs, _lListOfDepthList),
// Listview with FutureBuilder
AptListview(),
],
);
}
列表查看代码
Widget AptListview() {
return FutureBuilder<List<String>>(
future: AptNameListView(widget.ReceiveArgs),
builder: (context, snapshot) {
if (_bLastDepth == false) {
return Text("Select Address");
} else {
if (snapshot.hasData == false || snapshot.data.isEmpty == true) {
return CircularProgressIndicator();
} else {
return Expanded(
child: ListView.builder(
shrinkWrap: true,
itemCount: _AptNameList.length,
itemBuilder: (context, index) {
//return new Text("${_AptName[index]}");
return CheckboxListTile(
title: Text(_AptNameList[index]),
value: _isAptChecked[index],
onChanged: (value) {
setState(() { // SetState in FutureBuilder
_isAptChecked[index] = value;
});
},
);
},
),
);
}
}
});
}
下拉代码
Widget Dropdown(int nDepth, ArgumentClass ReceiveArgs,
List<List<String>> ListOfDepthList) {
String _Value = "";
List<DropdownMenuItem<String>> _itemList = null;
if (ListOfDepthList.length <= nDepth) {
_Value = "";
_itemList = null;
} else {
_Value = _SelectedAddressList[nDepth];
_itemList = GetMainItem(ListOfDepthList[nDepth]);
}
return DropdownButton(
value: _Value,
items: _itemList,
onChanged: (value) {
if (value.compareTo(GlobalObject().startMessage) != 0) {
setState(() {
.....
// setState in Dropdown
});
}
});
}
【问题讨论】:
标签: flutter dart checkbox setstate flutter-futurebuilder