использовать автономное изображение для слайдера во флаттере - PullRequest
0 голосов
/ 28 февраля 2020

добрый вечер

Я использовал этот образец изображения слайдера, и он работал правильно, но у меня небольшая проблема, я хочу использовать локальное изображение в этом коде, но когда проект запущен, он показывает мне синий прямоугольник, как я могу использовать мое локальное изображение на этом слайдере? спасибо вот код:

    class CarouselDemo extends StatefulWidget {
    CarouselDemo() : super();

     final String title = "Carousel Demo";

     @override
    CarouselDemoState createState() => CarouselDemoState();
    }

    class CarouselDemoState extends State<CarouselDemo> {

    CarouselSlider carouselSlider;
    int _current = 0;
     List imgList = [
    new AssetImage('images/main-slider/1.jpg'),
    new AssetImage('images/main-slider/2.jpg'),
    new AssetImage('images/main-slider/3.jpg'),
    new AssetImage('images/main-slider/4.jpg'),
    ];


     @override
     Widget build(BuildContext context) {
       return Scaffold(
      body: Container(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          crossAxisAlignment: CrossAxisAlignment.center,
          children: <Widget>[
            carouselSlider = CarouselSlider(
              height: 400.0,
              initialPage: 0,
                                onPageChanged: (index) {
                setState(() {
                  _current = index;
                });
              },
              items: imgList.map((imgUrl) {
                return Builder(
                  builder: (BuildContext context) {
                    return Container(
                      width: MediaQuery.of(context).size.width,
                      margin: EdgeInsets.symmetric(horizontal: 10.0),
                      decoration: BoxDecoration(
                        color: Colors.green,
                      ),
                      child: Image.network(
                        imgUrl,
                        fit: BoxFit.fill,
                      ),
                    );
                  },
                );
              }).toList(),
            ),
        ),
      ),
    );
  }

1 Ответ

1 голос
/ 29 февраля 2020

Проблема в том, что imgList - это List<AssetImage>, но вы пытаетесь отобразить изображения с помощью Image.network.

Image.network создает виджет, который отображает [ImageStream], полученный из сети.

Вам нужно создать List<Sring>, где строка будет пути относительно файла pubspec.yaml. Также не используйте Image.Network, вам следует использовать Image.assest, потому что вы хотите создать виджет, который отображает [ImageStream], полученный из пакета активов.

class CarouselDemo extends StatefulWidget {
  CarouselDemo() : super();

  final String title = "Carousel Demo";

  @override
  CarouselDemoState createState() => CarouselDemoState();
}

class CarouselDemoState extends State<CarouselDemo> {
  CarouselSlider carouselSlider;
  int _current = 0;
  List imgList = [
    'images/main-slider/1.jpg',
    'images/main-slider/2.jpg',
    'images/main-slider/3.jpg',
    'images/main-slider/4.jpg'
  ];

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Container(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          crossAxisAlignment: CrossAxisAlignment.center,
          children: <Widget>[
            carouselSlider = CarouselSlider(
              height: 400.0,
              initialPage: 0,
              onPageChanged: (index) {
                setState(() {
                  _current = index;
                });
              },
              items: imgList.map((imgUrl) {
                return Builder(
                  builder: (BuildContext context) {
                    return Container(
                      width: MediaQuery.of(context).size.width,
                      margin: EdgeInsets.symmetric(horizontal: 10.0),
                      decoration: BoxDecoration(
                        color: Colors.green,
                      ),
                      child: Image.asset(
                        imgUrl,
                        fit: BoxFit.fill,
                      ),
                    );
                  },
                );
              }).toList(),
            ),
          ],
        ),
      ),
    );
  }
}
...