Flutter 错误:无效参数:URI 文件中未指定主机:///null

Posted

技术标签:

【中文标题】Flutter 错误:无效参数:URI 文件中未指定主机:///null【英文标题】:Flutter Error: Invalid argument(s): No host specified in URI file:///null 【发布时间】:2021-08-10 01:22:18 【问题描述】:

我想从 Firebase 实时数据库访问我的图像。但是我还没有将图像保存在 Db 上,所以它应该显示默认图像,但相反,我得到的是与 Welcome Back Hania 一起显示的蓝色图像。 我得到这张图片:

我的数据库还没有图片 URL:

所以如果没有 URL 保存在 DB 中,它应该显示我的默认图像,如下所示:

我在 Future 函数中获取图像的代码是:

Future<String> getPicture() async 
    User cuser = await firebaseAuth.currentUser;
    return ref.child('User_data').child(cuser.uid).once().then((DataSnapshot snap) 
      return snap.value['profile_photo'].toString();
    );
  

Future Builder 用于从 DB 获取图像的代码:

 Container(
                alignment: Alignment.centerRight,
                width: size.width,
                padding: EdgeInsets.symmetric(horizontal: 33),
                child: CircleAvatar(
                  radius: 46,
                  backgroundColor: Colors.white,
                  child: FutureBuilder(
                    future: getPicture(),
                    builder: (context, snapshot) 
                      if (snapshot.hasData) 
                        return CircleAvatar(
                          radius: 40,
                          backgroundImage: NetworkImage(snapshot.data),
                        );
                       else 
                        return CircleAvatar(
                            radius: 40,
                            backgroundImage:
                                AssetImage("assets/images/avatar.jpg"));
                      
                    ,
                  ),
                ),
              ),

我稍后会在编辑用户的个人资料信息时存储图像,目前我不添加它。那么我的错误的解决方案是什么。请帮助我,因为我是 Flutter 的新手

错误:

════════ Exception caught by image resource service ════════════════════════════════════════════════
The following ArgumentError was thrown resolving an image codec:
Invalid argument(s): No host specified in URI file:///null

When the exception was thrown, this was the stack: 
#0      _HttpClient._openUrl (dart:_http/http_impl.dart:2425:9)
#1      _HttpClient.getUrl (dart:_http/http_impl.dart:2346:48)
#2      NetworkImage._loadAsync (package:flutter/src/painting/_network_image_io.dart:89:59)
#3      NetworkImage.load (package:flutter/src/painting/_network_image_io.dart:50:14)
#4      ImageProvider.resolveStreamForKey.<anonymous closure> (package:flutter/src/painting/image_provider.dart:503:13)
...
Image provider: NetworkImage("null", scale: 1.0)
Image key: NetworkImage("null", scale: 1.0)
════════════════════════════════════════════════════════════════════════════════════════════════════

【问题讨论】:

【参考方案1】:

问题出在这一行:

return snap.value['profile_photo'].toString();

由于snap.value['profile_photo']null,那么null.toString() 的结果为“null”——字符串值为null

你需要做的是稍微调整一下这个语句:

return snap.value['profile_photo']?.toString();

现在,如果 snap.value['profile_photo']null,那么实际的 null 值将从这个未来返回,而不是它的字符串表示形式。

【讨论】:

非常感谢。我已经尝试解决这个问题很多天了。感谢您的帮助

以上是关于Flutter 错误:无效参数:URI 文件中未指定主机:///null的主要内容,如果未能解决你的问题,请参考以下文章

无效参数:在 URI 文件中未指定主机:///null

Flutter Web:文件选择器抛出“无效参数(路径):不能为空”错误

Cognito 错误 I/flutter(4963):无效参数:需要 PASSWORD 参数

flutter webView脚本非英文错误:无效参数(字符串):包含无效字符

Flutter 项目运行时显示错误无效参数:源不得为空

Flutter中的参数类型“String”无法分配给参数类型“Uri”[重复]