flutter - DropdownButton 尝试使用 Flutter 中另一个类的项目重新创建
问题描述
我在我的应用程序中放置了几个 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 在单独的方法中调用。
如果我来回导航到屏幕,它可以正常工作。
但是,如果我切换布局,颤动会尝试用其他类的项目填充其他 DropdownMenu。你可以看到几个不属于该类的项目在一段时间后将填充正确的项目。
看:装备黑洞
Black Hole 不应该处于equipe,因为它属于 Meta,正如我们在那里看到的那样。
但是 Responsável 更糟糕,因为它有图片,当它尝试用错误的类渲染图片时,它会崩溃并显示溢出像素的消息。
这发生在菜单的第一行,直到 Flutter 填满所有选项,然后应用程序恢复正常。
我在这里尝试了很多东西,但直到现在都没有成功来避免这种情况。任何帮助将不胜感激。
解决方案
我猜问题是否不在于您如何填充单个下拉按钮,而在于上方。您是否使用有状态小部件来包装包含下拉按钮的小部件?如果是这样,您是否使用 Keys 来正确处理它们的呈现方式?
如果您正在使用像 listView(或 Column、row 等)这样的 Widget,然后您在该 listview 中放入有状态的小部件,那么使用键很重要。否则,当您重新填充该 ListView 时,您可能会遇到不需要的行为。
最后,有关键的更多信息,有这个视频:https ://www.youtube.com/watch?v=kn0EOS-ZiIc&t=98s
推荐阅读
- jenkins - 字符串变量赋值不包括 Jenkinsfile 中的字符串引用
- javascript - 是否可以从 react-leaflet 更改默认请求行为?
- javascript - 带有 websocket 的无服务器 lambda 不保存接收到的数据
- shell - 终端创建 Mac 别名给出权限错误
- docker - “在上游找不到主机......”使用“kubectl apply -f”但在“docker-compose up”中有效
- python - 如何将自定义过滤器应用于 django 过滤器 ModelChoicefilter
- python - 生成随机数时额外不需要的结果
- javascript - Antlr4 词法分析器规则仅应在行首匹配
- c++ - 缺少类型说明符和显式类型是缺少错误
- sql-server - 50%拆分的SSIS百分比抽样甚至不是