Flutter:找不到网络图像或获取错误时显示本地图像?

Posted

技术标签:

【中文标题】Flutter:找不到网络图像或获取错误时显示本地图像?【英文标题】:Flutter : Display Local Image when Network Image not found or error fetching it? 【发布时间】:2020-09-15 13:23:21 【问题描述】:
Center(
                child: CachedNetworkImage(
                  imageUrl: "http:/ sosme link here",
                  errorWidget: (context, url, error) => Icon(Icons.error),
                  fadeInCurve: Curves.easeIn ,
                  fadeInDuration: Duration(milliseconds:1000),
                  fadeOutCurve: Curves.easeOut,
                  fadeOutDuration: Duration(milliseconds:500),
                  imageBuilder: (context, imageProvider) => Container(
                    height: 250.0,
                    width: 250.0,
                    decoration: BoxDecoration(
                    border: Border.all(
                    color: Colors.black,
                    ),
                    borderRadius: BorderRadius.all(Radius.circular(10)),
                    color: Colors.white,
                    image: DecorationImage(
                    image: imageProvider,
                    fit: BoxFit.cover,
                    ),
                    ),
                  ),
                ),
              ),  

我的目标是从可能存在也可能不存在的 URL 加载图像。 如果 URL 不存在,则加载资产图像。 尝试在此处插入资产图像,但没有用。 正如我在想,如果加载它时出错,意味着没有找到图像或其他东西。所以我想显示一个本地图像。

有什么建议吗?

errorWidget: (context, url, error) => Icon(Icons.error),

错误,当我使用资产图像时

【问题讨论】:

【参考方案1】:

您可以将FadeInImage 小部件用于您的用例..

这是给你的样本..


import 'package:flutter/material.dart';

void main() 
  runApp(MyApp());


class MyApp extends StatelessWidget 
  @override
  Widget build(BuildContext context) 
    final title = 'Fade in images';

    return MaterialApp(
      title: title,
      home: Scaffold(
        appBar: AppBar(
          title: Text(title),
        ),
        body: Center(
          child: FadeInImage.assetNetwork(
            placeholder: 'assets/loading.gif',
            image: 'https://picsum.photos/250?image=9',
          ),
        ),
      ),
    );
  


你可以得到more information from official website。

【讨论】:

【参考方案2】:

确保图像存在于路径中的资产文件夹中。 例如:

errorWidget: (context, url, error) => Image.asset('assets/images/image.jpg'),

并在pubspec.yaml 文件中声明该路径。 例如:

assets:
    - assets/images/image.png

【讨论】:

你好。我试过了。但假设 URL 不可用,它给了我一个错误(我通过上传屏幕截图编辑了问题)。 @nelsonwong:在您的代码中,我看不到异常处理,即使您输入了错误的 URL,我的代码也应该按照 CachedNetworkImage 工作 感谢@srikanth7785 使用 Try/Catch 块解决。【参考方案3】:
CachedNetworkImage(
imageUrl: "your image url",
fit: BoxFit.cover,
width: MediaQuery.of(context).size.width,
placeholder: (context,url) => CircularProgressIndicator(),
errorWidget: (context,url,error) => new Icon(Icons.error))

【讨论】:

解释会改善这个答案

以上是关于Flutter:找不到网络图像或获取错误时显示本地图像?的主要内容,如果未能解决你的问题,请参考以下文章

XP网络连接拨号时显示错误693

VSCode 在编译时显示 .vue 导入的“找不到模块”TS 错误

如何在 Flutter 中获取当前位置时显示加载微调器?

win10系统,每次开机都出现找不到元素

当我尝试在 laravel 中添加 vue js 时显示错误 -> 错误:找不到模块 'webpack/lib/rules/DescriptionDataMatcherRulePlugin'

下载Unity时显示找不到文件?