#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 дня