как передать URL-адрес изображения в другую строку при изменении карусели? - PullRequest
0 голосов
/ 13 июля 2020

Это может быть глупый вопрос, но я хочу сохранить image url из карусели в другую String pathImage, чтобы сохранить его в галерее. когда я перехожу к следующему изображению в карусели, я хочу обновить imagePath до этого image url в карусели. Я использую пакеты carousel_pro и gallery_saver. Это код:

import 'package:carousel_pro/carousel_pro.dart';
import 'package:flutter/material.dart';
import 'package:pursattm/models/models.dart';
import 'package:pursattm/utils/utils.dart';
import 'package:gallery_saver/gallery_saver.dart';

class DetailsFullImage extends StatefulWidget {
  DetailsFullImage({Key key, this.imagesForCarousel}) : super(key: key);

  final List<Images> imagesForCarousel;
  @override
  _DetailsFullImageState createState() => _DetailsFullImageState();
}

class _DetailsFullImageState extends State<DetailsFullImage> {
  // image download declarations
  String pathImage = '';
  String albumName = 'Media';

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: Colors.white,
      body: Center(
        child: Container(
          height: SizeConfig.sh / 3,
          child: Carousel(
            // onImageChange: () {},
            images: widget.imagesForCarousel.map((image) {
              pathImage = image.url; // declaring image.url to pathImage
              return CachedNetworkImage(
                imageUrl: image.url,
                fit: BoxFit.fill,
                alignment: Alignment.bottomCenter,
                placeholder: (context, url) => Image.asset(
                  'assets/placeholder.png',
                  fit: BoxFit.fill,
                ),
                errorWidget: (context, url, error) {
                  return Center(
                    child: Icon(
                      Icons.refresh,
                      color: Colors.black12,
                    ),
                  );
                },
              );
            }).toList(),
            animationDuration: const Duration(seconds: 1),
            dotSize: 8.0,
            dotSpacing: 20.0,
            autoplay: false,
            autoplayDuration: const Duration(seconds: 4),
            dotColor: Colors.white,
            dotIncreasedColor: AppColors.GREEN_JUST,
            dotIncreaseSize: 2.2,
            dotPosition: DotPosition.bottomLeft,
            indicatorBgPadding: 15,
            dotBgColor: Colors.transparent,
            borderRadius: false,
            // moveIndicatorFromBottom: 250.0,
            noRadiusForIndicator: true,
          ),
        ),
      ),
      floatingActionButton: Builder(
        builder: (BuildContext context) {
          return FloatingActionButton(
            backgroundColor: Colors.white,
            onPressed: () async {
              GallerySaver.saveImage(pathImage, albumName: albumName)
                  .then((bool success) {
                setState(() {
                  Scaffold.of(context).showSnackBar(
                    SnackBar(
                      content: Text('Sucsess!'),
                      backgroundColor: Colors.green,
                      behavior: SnackBarBehavior.floating,
                    ),
                  );
                });
              }).catchError((e) {
                setState(() {
                  Scaffold.of(context).showSnackBar(
                    SnackBar(
                      content: Text('Error!'),
                      backgroundColor: Colors.red,
                      behavior: SnackBarBehavior.floating,
                    ),
                  );
                });
              });
            },
            child: Icon(
              Icons.file_download,
              color: AppColors.GREEN,
              size: 30,
            ),
          );
        },
      ),
    );
  }
}

Здесь, когда я нажимаю на FloatingActionButton, он должен сохранить imagePath из карусели на этом отображаемом изображении из списка изображений в карусели. С этим кодом imagePath берет только последний image Url из списка изображений в карусели.

1 Ответ

0 голосов
/ 14 июля 2020

Вы можете попробовать использовать свойства onImageChange вроде этого:

    onImageChange: (last, current) {
      setState (() {
       pathImage = widget.imagesForCarousel[current].url;
     });
    }

В событии смены изображения в качестве аргументов передает индекс предыдущего изображения и индекс текущего изображения. Вы можете использовать это как преимущество

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...