如何在Flutter中为使用itemBuilder生成的列表中的每个项分配不同的键?

问题描述 投票:1回答:1

我一直在设计一个应用程序,其中用户搜索一个术语,并显示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();
                    });
                }
                  ),
                  );}
              ),
android user-interface flutter dart flutter-layout
1个回答
0
投票

问题是,您正在对所有dragtarget元素使用单个变量。

© www.soinside.com 2019 - 2024. All rights reserved.