我一直在设计一个应用程序,其中用户搜索一个术语,并显示GridView
,其中包含与该术语有关的所有图像。所有这些图像均制成Draggable
。
在同一页面上的另一个GridView
中,我放置了40 Dragtargets
。因此,用户可以拖动搜索到的图像并将其放置在DragTargets
之一中,从而可以选择40张图像。
问题是,当我将一个图像拖到Dragtarget
网格时,dragtargets
的所有40个都被同一图像填充。我认为这是因为每个Dragtarget
都是在itemBuilder中生成的,因此具有相同的键。但是我不知道在生成它时如何为每个Dragtarget
设置不同的键。在实现相同方案的过程中也将赞赏替代解决方案!
可拖动图像的代码:
SliverGrid(
gridDelegate: SliverGridDelegateWithMaxCrossAxisExtent(
maxCrossAxisExtent: 350,
mainAxisSpacing: 10,
crossAxisSpacing: 10),
delegate: SliverChildBuilderDelegate(
(BuildContext context, int index) {
return Container(
child: LongPressDraggable<String>(
data: imageLinks[index],
feedback: Image(
image: NetworkImage(imageLinks[index])),
child: Image(
image: NetworkImage(imageLinks[index])),
onDragStarted: () {
panelController.close();
},
),
);
GridView和DragTargets的代码:
GridView.builder(
itemCount: 40,
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 5,),
itemBuilder: (context,index){
return Container(
padding: EdgeInsets.only(top:5,right:5,bottom:5,left:5),
child: DragTarget<String>(
builder: (context, List<String> candidateData, rejectedData) {
if (dragged == true) {
return Container(
height: 50.0,
width: 50.0,
child: Image(
image: NetworkImage(draggedImage),
),
);
} else {
return Container(
height: 50.0,
width: 50.0,
color: Colors.yellow,
);
}
},
onWillAccept: (data) {
return true;
},
onAccept: (data) {
setState(() {
dragged = true;
draggedImage = data;
//panelController.open();
});
}
),
);}
),
问题是,您正在对所有dragtarget元素使用单个变量。