Как решить исключение, обнаруженное библиотекой виджетов?

#flutter #dart

Вопрос:

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

 ═══════ Exception caught by widgets library ═══════════════════════════════════ Invalid argument (onError): Error handler must accept one Object or one Object and a StackTrace as arguments.: Closure: () =gt; Null The relevant error-causing widget was CachedNetworkImage lib/widgets/custom_image.dart:5 ════════════════════════════════════════════════════════════════════════════════  

custom_image.dart

 import 'package:flutter/material.dart';  Widget cachedNetworkImage(String mediaUrl) {  return CachedNetworkImage(  imageUrl: mediaUrl,  fit: BoxFit.cover,  placeholder: (context, url) =gt; Padding(  child: CircularProgressIndicator(),  padding: EdgeInsets.all(20.0),  ),  errorWidget: (context, url, error) =gt; Icon(Icons.error),  ); }  

Пожалуйста, помогите.

Комментарии:

1. Я попробовал этот пакет и код в своей среде разработки и запустил его на своем устройстве. Я дал неверный URL-адрес, поэтому на моем экране появился значок ошибки. Единственное отличие, которое я сделал, заключалось в том, что я использовал этот виджет cachedNetwork на своем теле эшафота прямо в отличие от вас, создал для этого метод.

2. так что вы можете показать код, в котором вы используете этот метод.

3.да, конечно, извини за это. post_tile.dart: import 'package:flutter/material.dart'; import 'package:fluttershare/widgets/custom_image.dart'; import 'package:fluttershare/widgets/post.dart'; class PostTile extends StatelessWidget { final Post post; PostTile(this.post); @override Widget build(BuildContext context) { return GestureDetector( onTap: () =gt; print('showing post'), child: cachedNetworkImage(post.mediaUrl), ); } }

4. После некоторых исследований, проб и ошибок. Я думаю, что проблема в пакете. Ошибка, которую вы получаете, была ошибкой в старой версии пакета http, и я думаю, что ваш cached_network_image устарел. Попробуйте flutter pub upgarde, разрешите любые конфликты зависимостей, очистите flutter, получите flutter pub. Также убедитесь, что ваш sdk flutter также обновлен.

Ответ №1:

Оберните изображение CachedNetworkImage контейнером.

 return Container( width:..., height:...,  child: CachedNetworkImage(..)));  

Комментарии:

1. Привет @Reham Alraee . Это не работает. custom_image.dart : import 'package:cached_network_image/cached_network_image.dart'; import 'package:flutter/material.dart'; Widget cachedNetworkImage(String mediaUrl) { return Container( child: CachedNetworkImage( imageUrl: mediaUrl, fit: BoxFit.cover, placeholder: (context, url) =gt; Padding( child: CircularProgressIndicator(), padding: EdgeInsets.all(20.0), ), errorWidget: (context, url, error) =gt; Icon(Icons.error), ), ); }

2. как вы назвали эту функцию? не могли бы вы предоставить минимальный код?

3. Назначьте ширину и высоту для вашего контейнера

4. да, конечно, извини за это. post_tile.дротик : import 'package:flutter/material.dart'; import 'package:fluttershare/widgets/custom_image.dart'; import 'package:fluttershare/widgets/post.dart'; class PostTile extends StatelessWidget { final Post post; PostTile(this.post); @override Widget build(BuildContext context) { return GestureDetector( onTap: () =gt; print('showing post'), child: cachedNetworkImage(post.mediaUrl), ); } }

5. попробовал задать высоту и ширину. Не работает.