flutter 如何从当前选中的照片列表中删除图像路径?

1bqhqjot  于 2022-12-05  发布在  Flutter
关注(0)|答案(1)|浏览(216)

我需要一个按钮来删除当前查看的图像。图像路径存储在List<String>中。图像通过CarouselSliderImagePicker出现。
我试着看看我是否可以通过.removeAt()的硬编码索引删除图像,但同样,无法找到如何获得当前图像
什么是正确的方法来获取当前索引的屏幕上的图像?我已经尝试了与单一的图像和它的工作找到,但获得当前索引的当前查看照片是我遇到麻烦的地方。
这就是我获取图像的方式:

List<String> pickedImageList = [];
  final imagePicker = ImagePicker();

  Future pickImage() async {
    final userPickedImages = await imagePicker.pickMultiImage();
    for (var image in userPickedImages!) {
      pickedImageList.add(image.path);
    }
    setState(() {});
  }

这是我如何显示图像。按钮删除当前选定的照片是在底部的通用功能:

Column(
  children: [
    ElevatedButton(
        onPressed: pickImage,
        child: const Text('Add another image')),
    CarouselSlider(
      options: CarouselOptions(
        // height: 200,
        viewportFraction: .9,
        enlargeCenterPage: true,
      ),
      items: pickedImageList
          .map(
            (item) => SizedBox(
              width: 200,
              height: 200,
              child: ClipRRect(
                  borderRadius: BorderRadius.circular(10),
                  child: Image.asset(
                    item,
                    height: 200,
                    width: 200,
                  )),
            ),
            // color: Colors.green,
          )
          .toList(),
    ),
    ElevatedButton(
        onPressed: () {
          setState(() {
            removeImage();
          });
        },
        child: const Text('Remove'))
  ],
),

所有的删除按钮,人们已经解决了SO都涉及单一的图像,这不是问题。
我想也许是一个手势检测器计数上下左右滑动,重置计数器时,它达到了列表的长度。负数将乘以它自己,以获得当前的索引可用。

ztigrdn8

ztigrdn81#

要获取CarouselSlider构件中当前查看的照片的索引,可以使用onPageChanged回调属性用当前页面索引更新_currentPage变量。然后,可以使用_currentPage变量从pickedImageList列表中删除当前查看的照片。
下面是一个如何实现这一点的示例:

// Initialize the _currentPage variable with the first photo in the list
int _currentPage = 0;

// In the CarouselSlider widget, set the onPageChanged callback property
CarouselSlider(
  options: CarouselOptions(
    // height: 200,
    viewportFraction: .9,
    enlargeCenterPage: true,
    // Set the onPageChanged callback property
    onPageChanged: (index, reason) {
      // Update the _currentPage variable with the current page index
      setState(() {
        _currentPage = index;
      });
    },
  ),
  items: pickedImageList
      .map(
        (item) => SizedBox(
          width: 200,
          height: 200,
          child: ClipRRect(
              borderRadius: BorderRadius.circular(10),
              child: Image.asset(
                item,
                height: 200,
                width: 200,
              )),
        ),
        // color: Colors.green,
      )
      .toList(),
),

// In the delete button, use the _currentPage variable to remove the currently viewed photo from the pickedImageList list
ElevatedButton(
    onPressed: () {
      setState(() {
        pickedImageList.removeAt(_currentPage);
      });
    },
    child: const Text('Remove')
)

在本例中,每当用户在CarouselSlider小部件中滑动到新照片时,都会调用onPageChanged回调函数。该回调函数将使用当前页面的索引更新_currentPage变量,然后您可以使用该索引从pickedImageList列表中删除当前查看的照片。
我希望这对你有帮助!如果你有任何其他问题,请告诉我。

相关问题