无效参数:在 URI 文件中未指定主机:///null
Posted
技术标签:
【中文标题】无效参数:在 URI 文件中未指定主机:///null【英文标题】:Invalid argument(s): No host specified in URI file:///null 【发布时间】:2021-06-10 05:26:29 【问题描述】:GetPhotoUrlStream 提供存储在我的 Cloud Firebase FireStore 中的个人资料照片 (data['profilePhoto']) 的 Url 流。然后被networkimage用来显示个人资料照片(圆形头像)
class GetUserPhotoUrlStream extends StatelessWidget
final String documentId; // This is your User UID
GetUserPhotoUrlStream(this.documentId);
@override
Widget build(BuildContext context)
DocumentReference users = FirebaseFirestore.instance.collection('users').doc(documentId);
return StreamBuilder<DocumentSnapshot>(
stream: users.snapshots(),
builder: (BuildContext context, AsyncSnapshot<DocumentSnapshot> snapshot)
if (snapshot.hasError)
return Image.asset('assets/images/NouserImage.png');
if (snapshot.connectionState == ConnectionState.waiting)
return CircularProgressIndicator();
Map<String, dynamic> data = snapshot.data.data();
return CircleAvatar(
maxRadius: 80,
backgroundColor: Colors.grey,
child: ClipOval(child: FadeInImage(placeholder: AssetImage('assets/images/NouserImage.png'),image: NetworkImage("$data['profilePhoto']"),),),
);
,
);
removeUserPhotoUrl 将 GetUserPhotoUrlStream 正在使用的“profilePhoto”更新为 null。
Future<void> removeUserPhotoUrl(BuildContext context) async
var user = _auth.currentUser;
DocumentReference users = FirebaseFirestore.instance.collection('users').doc(user.uid);
users.update('profilePhoto':null).then((_)
Navigator.pop(context);
);
await deleteUserImage(context);
notifyListeners();
当使用 removeUserPhotoUrl 将 data['profilePhoto'] 的值设为 null 时,它应该显示占位符图像,它提供了一个assetImage,而不是它给出了一个错误
错误信息
====================================================================================================
======== Exception caught by image resource service ================================================
Invalid argument(s): No host specified in URI file:///null
====================================================================================================
此外,当应用程序处于 HotReload 或 HotRestart 时,错误消失并开始向我显示 PlaceHolder(资产图像)
请帮助。我想在“profilePhoto”变为空时显示占位符(资产图像)
【问题讨论】:
【参考方案1】:你需要先了解FadeInImageWidget的作用,
FadeInImage(
placeholder: AssetImage('assets/images/NouserImage.png'),
image: NetworkImage("$data['profilePhoto']"),
),
简而言之,它的作用是显示您作为小部件提供的占位符,以显示实际网络图像何时从 URL 加载,然后当 URL 以图像形式获得响应时,它以小部件形式显示给我们占位符。
这就是为什么当您 HOT RESTART 或 HOT RELOAD 应用程序的整个 UI 以及 FadeInImage 小部件都会被重建的原因。
有什么问题:
======== Exception caught by image resource service ================================================
Invalid argument(s): No host specified in URI file:///null
====================================================================================================
上面的消息说没有指定主机。这意味着您从 data['profilePhoto']
获得的数据或 URL 返回一个没有指定 http://
或 https://
的 URL。
解决方案
您需要确保在data['profilePhoto']
中指定了主机。
如果您想确保在 URL 失败时显示您的小部件,您应该在 FadeInImage 中使用 imageErrorBuilder
属性,如下所示:
FadeInImage(
placeholder: placeholder,
image: image,
imageErrorBuilder: (ctx, exception, stackTrace)
return Container(); //THE WIDGET YOU WANT TO SHOW IF URL NOT RETURN IMAGE
,
)
希望你明白我的意思。?
【讨论】:
感谢@kishan dhankecha 这很有效,你也很好地解释了解决方案,比我更了解我的问题?。以上是关于无效参数:在 URI 文件中未指定主机:///null的主要内容,如果未能解决你的问题,请参考以下文章
Flutter 错误:无效参数:URI 文件中未指定主机:///null
UriFormatException:无效的URI:指定的端口无效
无效的 URI:无法解析主机名。 Visual Studio 和 Chocolatey 安装问题
无效的 URI:无法通过我们的自定义重写 IHttpModule 解析主机名