#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. попробовал задать высоту и ширину. Не работает.