编辑:已修复。向下看
旧问题:
我正在试验Dismissible小部件。
我可以成功监视该方向的状态,该状态存储在directionVar中。
它输出类似DismissDirection.endToStart
我想使用此信息来更改显示的图标的位置。 删除项目时,背景为红色,右侧为图标。像Gmail这样的样式。
Widget build(BuildContext context) {
DismissDirection directionVar;
return ListView.builder(
itemBuilder: (BuildContext context, int index) {
return Dismissible(
key: Key(products[index]['title']), //Should be unique.
onDismissed: (DismissDirection direction) {
directionVar = direction;
},
我的问题是这部分:
background: Container(
color: Colors.red,
padding: EdgeInsets.only(left: 20.0),
child: Row(
mainAxisAlignment: MainAxisAlignment.start,
children: <Widget>[
Icon(
Icons.delete,
)
],
),
),);});}
我希望该部分根据directionVar
的值进行更改。
padding
应该随directionVar
和mainAxisAlignment
的值而变化。
遵循以下原则:
if(directionVar == DismissDirection.endToStart){
} else if (directionVar == DismissDirection.startToEnd){
}
但是我无法访问这些语句中的background
:和padding
属性,因为它们是Dismissible
小部件的属性,并且无法在{{1 }}
这似乎是简单的问题,但似乎无法解决。
编辑:已修复。。非常简单。只需添加以下内容:
onDismissed(){}
答案 0 :(得分:0)
有几种方法可以实现此目的。例如,您可以创建一种方法来动态处理方向,然后在小部件树中相应地对其进行更新。像
List<dynamic> _resolveDirection(DismissDirection direction) {
switch (direction) {
case DismissDirection.endToStart:
return [MainAxisAlignment.center, 20.0];
break;
case DismissDirection.startToEnd:
return [MainAxisAlignment.start, 10.0];
break;
case DismissDirection.vertical:
return [MainAxisAlignment.end, 5.0];
break;
// And so on...
default:
return [];
}
}
然后用
替换树 background: Container(
color: Colors.red,
padding: _resolveDirection(directionVar)[1],
child: Row(
mainAxisAlignment: _resolveDirection(directionVar)[0],
children: <Widget>[
Icon(
Icons.delete,
)
],
),
),);});}
最后,每次滑动时您要做的就是以更新的方向重建树
setState(() => directionVar = direction);