我在应用程序中放置了几个DropdownButton,如下所示:
用户可以通过以下切换按钮在布局之间进行切换: Pessoal或Equipe
这些dropdownButton都填充有来自API的数据,其代码如下 这个:
FutureBuilder<List<Map<String, dynamic>>>(
future: loadColaboradores(),
builder: (BuildContext context, AsyncSnapshot<List<Map<String, dynamic>>> snapshot) {
if (!snapshot.hasData)
return CircularProgressIndicator();
else
return Expanded(
child: DropdownButton<String>(
isExpanded: true,
value: _responsavelSelecionado,
onChanged: (String newValue) {
var arr = newValue.split('|');
setState(() {
_responsavelSelecionado = newValue;
});
},
items: snapshot.data.map((Map map) {
return new DropdownMenuItem<String>(
value: map["nome"].toString().inCaps + "|" + map["fotoUrl"].toString(),
child: FittedBox(
child: Row(children: <Widget>[
Container(
width: 35.0,
height: 35.0,
decoration: new BoxDecoration(
shape: BoxShape.circle,
image: new DecorationImage(
fit: BoxFit.fill, image: new NetworkImage(map["fotoUrl"])))),
SizedBox(
width: 10,
),
Text(map["nome"].toString().inCaps,
style:
TextStyle(color: Colors.black54, fontSize: 14, fontWeight: FontWeight.w500),
overflow: TextOverflow.ellipsis)
])),
);
}).toList(),
));
})
它们都有自己的类,并且在单独的方法中调用了API。
如果我来回浏览屏幕,就可以了。
但是,如果我切换布局,则flutter会尝试使用其他填充DropdownMenu 其他类的项目。您会看到一些不属于的物品 到那一类的地方,过了一会儿 正确的。
看看:装备黑洞
黑洞不应该装备齐全,因为正如我们在此处看到的那样,它属于Meta。
但是Responsável更糟,因为它有图片并且在尝试渲染图片时 如果使用了错误的类,它会崩溃并显示像素溢出的消息。
这发生在菜单的第一行,直到Flutter填满所有选项,然后 该应用程序恢复正常。
为了避免这种情况,我在这里尝试了很多事情,但到目前为止没有成功。任何帮助将不胜感激。
答案 0 :(得分:0)
我正在猜测问题是否出在您如何填充单个下拉按钮,而不是上面。您是否正在使用有状态的小部件来包装包含下拉按钮的小部件?如果是这样,您是否使用Keys正确处理它们的呈现方式?
如果您使用的是诸如listView(或Column,row等)之类的Widget,然后将其放入有状态的Widgetview中,则使用键很重要。否则,当您重新填充该ListView时,可能会有不想要的行为。
最终,有关按键的更多信息,请观看以下视频:https://www.youtube.com/watch?v=kn0EOS-ZiIc&t=98s