flutter - 如何在 listview.builder 中管理 listtiles 的选定变量
问题描述
我有一个ListView.builder
返回一个ListTile
. itemCount
设置min(_selectedEvents.length, 3)
为。因此,最多ListTile
返回 3 秒,其中 a backgroundColor
of Colors.grey[200]
。
我想在按下时将颜色设置Colors.red
为单个。ListTile
我设置 selected:(_selectedListtileController
我var
创建的)并将onTap
其设置为 true,这会将颜色更改为红色。
但问题是红色是为所有ListTile
s 设置的,而不是为单个 s 设置的。另外创建 3 个单独的控制器也不是一个选项,因为我将它们返回 aListTile
并且我只能通过 1 个控制器。
ListTile
每次ListTile
按下时如何设置单独的颜色?
提前致谢!
解决方案
如果您希望有多个ListTile
可供选择,我们可以定义一个List<int>
保存indexes
所选ListTile
s 的位置:
// StatefulWidget is required
List<int> _selectedTiles = [];
并使用以下函数来切换特定的选定状态ListTile
:
void toggleSelectedListTile(int index) {
if (_selectedTiles.contains(index))
setState(() => _selectedTiles.remove(index));
else
setState(() => _selectedTiles.add(index));
}
AListTile
Widget
具有selected
我们可以利用的属性:
ListTile(
selected: _selectedTiles.contains(index),
selectedTileColor: Colors.red,
title: Text('List tile $index'),
onTap() { toggleSelectedListTile(index); },
)
因此,此解决方案的完整示例片段将是:
class HomeWidget extends StatefulWidget {
HomeWidget({ Key key }) : super(key: key);
@override
_HomeWidgetState createState() => _StatefulWidgetExampleState();
}
class _HomeWidgetState extends State<StatefulWidgetExample> {
List<int> _selectedTiles = [];
void toggleSelectedListTile(int index) {
if (_selectedTiles.contains(index))
setState(() => _selectedTiles.remove(index));
else
setState(() => _selectedTiles.add(index));
}
Widget _buildListTile(int index) {
return ListTile(
selected: _selectedTiles.contains(index),
selectedTileColor: Colors.red,
title: Text('List tile $index'),
onTap() { toggleSelectedListTile(index); },
);
}
@override
Widget build(BuildContext context)
return Scaffold(
body: new ListView.builder
(
itemCount: 3,
itemBuilder: (BuildContext ctxt, int index) => _buildListTile(index),
),
);
}
推荐阅读
- python - PyQt 中的分辨率 QIcon
- c++ - 如何找出共享库是否从(zlib)链接/请求?
- javascript - 获取当前日期而不是 api 请求的日期 Moment.js
- java - 如何为 IntelliJ(或 Gradle?)控制台创建多行警告?
- anylogic - Anylogic取货数量使用条件
- python - SVG 路径转换解析器
- c# - 为什么 C# 与 .Net 紧密耦合?
- swift - 为什么我的 NavigationBar 颜色在 Swift 中没有改变?
- docker - 获取 CPU 利用率大于的 Docker 统计信息?
- laravel - laravel + vue js API 存储功能不适用于共享主机,但在 localhost 上运行良好