无效参数:URI 文件中未指定主机:///null
Invalid argument(s): No host specified in URI file:///null
GetPhotoUrlStream 提供存储在我的 Cloud Firebase FireStore 中的 Url 个人资料照片流(数据['profilePhoto'])。然后被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 将数据 ['profilePhoto'] 的值设置为 null 时,它应该向我显示占位符图像,它提供了一个 assetImage 而不是它给出了一个错误
错误信息
====================================================================================================
======== Exception caught by image resource service ================================================
Invalid argument(s): No host specified in URI file:///null
====================================================================================================
此外,当应用程序为 HotReload 或 HotRestart 时,错误消失了,它开始向我显示 PlaceHolder(资产图像)
请Help.I希望在 'profilePhoto' 变为 null
时立即显示占位符(资产图像)
您需要先了解 FadeInImage Widget 的作用,
FadeInImage(
placeholder: AssetImage('assets/images/NouserImage.png'),
image: NetworkImage("${data['profilePhoto']}"),
),
简而言之,它的作用是显示您作为小部件提供的占位符,以显示实际网络图像何时从 URL 加载,然后在 URL 得到响应后它作为小部件而不是占位符向我们显示的图像。
这就是为什么当您热重启或热重新加载时,整个应用程序 UI 以及 FadeInImage 小部件都会被重建。
问题是什么:
======== Exception caught by image resource service ================================================
Invalid argument(s): No host specified in URI file:///null
====================================================================================================
上面的消息说没有指定主机。这意味着您从 data['profilePhoto']
return a URL 获得的数据或 URL 没有指定 http://
或 https://
.
解决方案
您需要确保在 data['profilePhoto']
中指定了主机。
不过,如果您想确保在 URL 失败时显示您的 Widget,您应该在 FadeInImage 中使用 imageErrorBuilder
属性,如下所示:
FadeInImage(
placeholder: placeholder,
image: image,
imageErrorBuilder: (ctx, exception, stackTrace) {
return Container(); //THE WIDGET YOU WANT TO SHOW IF URL NOT RETURN IMAGE
},
)
希望你明白我的意思。
GetPhotoUrlStream 提供存储在我的 Cloud Firebase FireStore 中的 Url 个人资料照片流(数据['profilePhoto'])。然后被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 将数据 ['profilePhoto'] 的值设置为 null 时,它应该向我显示占位符图像,它提供了一个 assetImage 而不是它给出了一个错误
错误信息
====================================================================================================
======== Exception caught by image resource service ================================================
Invalid argument(s): No host specified in URI file:///null
====================================================================================================
此外,当应用程序为 HotReload 或 HotRestart 时,错误消失了,它开始向我显示 PlaceHolder(资产图像)
请Help.I希望在 'profilePhoto' 变为 null
时立即显示占位符(资产图像)您需要先了解 FadeInImage Widget 的作用,
FadeInImage(
placeholder: AssetImage('assets/images/NouserImage.png'),
image: NetworkImage("${data['profilePhoto']}"),
),
简而言之,它的作用是显示您作为小部件提供的占位符,以显示实际网络图像何时从 URL 加载,然后在 URL 得到响应后它作为小部件而不是占位符向我们显示的图像。
这就是为什么当您热重启或热重新加载时,整个应用程序 UI 以及 FadeInImage 小部件都会被重建。
问题是什么:
======== Exception caught by image resource service ================================================
Invalid argument(s): No host specified in URI file:///null
====================================================================================================
上面的消息说没有指定主机。这意味着您从 data['profilePhoto']
return a URL 获得的数据或 URL 没有指定 http://
或 https://
.
解决方案
您需要确保在 data['profilePhoto']
中指定了主机。
不过,如果您想确保在 URL 失败时显示您的 Widget,您应该在 FadeInImage 中使用 imageErrorBuilder
属性,如下所示:
FadeInImage(
placeholder: placeholder,
image: image,
imageErrorBuilder: (ctx, exception, stackTrace) {
return Container(); //THE WIDGET YOU WANT TO SHOW IF URL NOT RETURN IMAGE
},
)
希望你明白我的意思。