flutter - Flutter Visibility 小部件第三次无法正常工作
问题描述
我已经包裹ListView.builder
在Visible
小部件中,其可见属性的按钮位于ListTile
带有变量的小部件中_currencyVisible
。小部件 Visible 工作 2 次 ie false/hidden(default)
,然后在单击时变为可见,并在第二次单击时再次隐藏,但在那之后它就不起作用了。在控制台上打印_currencyVisible
显示正确的数据。
这是我的代码:
menuItems(BuildContext context) {
bool _currencyVisible = false;
return StatefulBuilder(
builder: (BuildContext context, void Function(void Function()) setState) {
return ListView(
children: [
ListTile(
title: FutureBuilder<dynamic>(
future: getUserCurrencySymbol(),
builder:(BuildContext context, AsyncSnapshot<dynamic> snapshot) {
return Text("Currency " + snapshot.data.toString());
}),
trailing: IconButton(
icon: Icon(Icons.refresh),
onPressed: () { setState(() { _currencyVisible = !_currencyVisible; }); },
),
),
Visibility(
visible: _currencyVisible,
child: ListView.builder(
shrinkWrap: true,
itemCount:
currency.allCurrenciesList.length,
itemBuilder: (context, index) {
for (Currency c in currency.allCurrenciesList) {
currency.allCurrenciesList.removeAt(0);
return Card(
child: ListTile(
title: Text(c.country),
subtitle: Text(c.shortCurrency),
trailing: Text(c.symbol),
onTap: () {
saveUserCurrency(c.country, context);
},
),
);
}
return Text("Not Null");
},
),
),
],
);
},
);
}
解决方案
您正在从货币列表中删除所有数据。小部件显示正确,但没有要显示的数据。
删除此行
currency.allCurrenciesList.removeAt(0);
不要循环遍历itemBuilder
. 改为使用index
。
Visibility(
visible: _currencyVisible,
child: ListView.builder(
shrinkWrap: true,
itemCount: currency.allCurrenciesList.length,
itemBuilder: (context, index) {
final c = currency.allCurrenciesList[index];
return Card(
child: ListTile(
title: Text(.country),
subtitle: Text(c.shortCurrency),
trailing: Text(c.symbol),
onTap: () {
saveUserCurrency(c.country, context);
},
);
}
return Text("Not Null");
),
),
推荐阅读
- nginx - Nginx `$remote_addr` 总是只返回 `127.0.0.1`
- r - 使用分隔符拆分字符串,除非在括号中,并保留分隔符
- javascript - Firebase Auth v9:Object(...) 不是函数
- javascript - 如何进行循环,返回字典对象 - 未定义 - jquery
- tensorflow - tf.random_normal_initializer 和 tf.keras.initializers.RandomNormal 的区别
- assembly - EMU 8086 在寄存器中存储错误的数组元素值
- c++ - Codelite 使用 libpqxx 连接示例和 g++ 在 macOS 上失败
- postgresql - timescaledb 将连续聚合提取为另一个超表
- arrays - 在 Verilog 中分配一个二维实数数组
- r - 我运行了一个包含 ggplot 函数的循环,但没有出现