собственный «AssertionError_throwNew», использующий кэшированное сетевое изображение в Flutter

#image #flutter #exception

Вопрос:

Я разрабатывал свое приложение, когда решил разместить кэшированные изображения вместо сетевых изображений, потому что оно работает намного лучше. Я сделал это. Но мои изображения больше не прослушиваются. Когда я нажимаю на полноэкранное изображение, оно только белое и показывает ошибку, которую вы, ребята, видели в заголовке (родной «AssertionError_throwNew»;) в «errors_patch.dart». Держу пари, это из-за кэшированного сетевого изображения, смешанного только с сетевым изображением в ImageProvider внутри PhotoView, idk. Заранее спасибо, и вот мой код(чтобы помочь вам больше, я тоже поместил контейнер, где находятся изображения):

     final urlImages1 = [
     'https://i.imgur.com/Y3UejT0.jpg',
     'https://i.imgur.com/KNFL3qd.jpg',
     'https://i.imgur.com/fxAH9HY.jpg',
     'https://i.imgur.com/9GkgdKx.jpg',
    ]; 

    Widget buildImage(String urlImage01, int index) => Container(
    margin: EdgeInsets.symmetric(horizontal: 5),
    child: ClipRRect(
      borderRadius: BorderRadius.circular(20),
      child: GestureDetector(
        child: Hero(
          tag: 'imageHero',
          child: CachedNetworkImage(
            imageUrl: urlImage01,
            imageBuilder: (context, imageProvider) => Container(
              width: 350,
              height: 405,
              decoration: BoxDecoration(
                borderRadius: BorderRadius.circular(20),
                image: DecorationImage(
                    image: imageProvider, fit: BoxFit.cover),
              ),
            ),
            placeholder: (context, url) => SizedBox(
              width: 100,
              height: 100,
              child: Center(
                  child: CircularProgressIndicator(
                valueColor:
                    AlwaysStoppedAnimation<Color>(Colors.pink.shade700),
              )),
            ),
            errorWidget: (context, url, error) => Icon(Icons.error),
          ),
        ),
        onTap: () {
          Navigator.push(
            context,
            MaterialPageRoute(
              builder: (_) {
                return Scaffold(
                  extendBodyBehindAppBar: true,
                  appBar: AppBar(
                    elevation: 0,
                    backgroundColor: Colors.transparent,
                    leading: backIcon(),
                  ),
                  body: GestureDetector(
                    child: Center(
                      child: Hero(
                        tag: 'imageHero',
                        child: PhotoView(
                          backgroundDecoration:
                              BoxDecoration(color: Colors.black87),
                          minScale: PhotoViewComputedScale.contained * 0.9,
                          maxScale: PhotoViewComputedScale.covered * 2,
                          imageProvider: NetworkImage(
                            urlImage01,
                          ),
                        ),
                      ),
                    ),
                  ),
                );
              },
            ),
          );
        },
      ),
    ),
  );

                                          Container(
                                            width: 405,
                                            child: ClipRRect(
                                              borderRadius:
                                                  BorderRadius.only(
                                                topLeft:
                                                    Radius.circular(20),
                                                topRight:
                                                    Radius.circular(20),
                                              ),
                                              child: Column(
                                                mainAxisAlignment:
                                                    MainAxisAlignment
                                                        .center,
                                                children: [
                                                  CarouselSlider.builder(
                                                    itemCount:
                                                        urlImages1.length,
                                                    itemBuilder: (context,
                                                        index, realIndex) {
                                                      final urlImage01 =
                                                          urlImages1[index];
                                                      return buildImage(
                                                          urlImage01,
                                                          index);
                                                    },
                                                    options:
                                                        CarouselOptions(
                                                      height: 300,
                                                      enlargeStrategy:
                                                          CenterPageEnlargeStrategy
                                                              .height,
                                                      enlargeCenterPage:
                                                          true,
                                                      onPageChanged: (index,
                                                              reason) =>
                                                          setState(() =>
                                                              currentIndex =
                                                                  index),
                                                    ),
                                                  ),
                                                  SizedBox(
                                                    height: 10,
                                                  ),
                                                ],
                                              ),
                                            ),
                                          ),
 

Ответ №1:

Обновление, ребята, я был прав. Это действительно было то место, которое я считал неправильным. Так что просто измените эту частицу:

                     child: PhotoView(
                      backgroundDecoration:
                          BoxDecoration(color: Colors.black87),
                      minScale: PhotoViewComputedScale.contained * 0.9,
                      maxScale: PhotoViewComputedScale.covered * 2,
                      imageProvider: NetworkImage(
                        urlImage01,
                      ),
                    ),
 

к этому:

                       child: PhotoView(
                          backgroundDecoration:
                              BoxDecoration(color: Colors.black87),
                          minScale: PhotoViewComputedScale.contained * 0.9,
                          maxScale: PhotoViewComputedScale.covered * 2,
                          imageProvider: CachedNetworkImageProvider(
                            urlImage01,
                          ),
                        ),
 

Я сделал это. Так что не беспокойтесь. Проблема в том, что я не могу отметить этот ответ как решенный. Только через 2 дня