Flutter Error: Invalid argument(s): No host specified in URI file:///null
Flutter Error: Invalid argument(s): No host specified in URI file:///null
我想从 Firebase 实时数据库访问我的图像。但我还没有将图像保存在 Db 上,所以它应该显示默认图像,但相反,我得到了这张蓝色图像,它与 Welcome Back Hania 一起显示。
我收到这张图片:
我的 Db 还没有图像 URL:
所以如果没有 URL 保存在数据库中,它应该像这样显示我的默认图像:
我在 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 用于从数据库获取图像的代码:
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"));
}
},
),
),
),
我会在编辑USer的个人资料时存储图片,暂时不添加。那么我的错误的解决方案是什么。请帮助我,因为我是 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)
════════════════════════════════════════════════════════════════════════════════════════════════════
问题出在这一行:
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
值将从这个未来返回,而不是它的字符串表示。
我想从 Firebase 实时数据库访问我的图像。但我还没有将图像保存在 Db 上,所以它应该显示默认图像,但相反,我得到了这张蓝色图像,它与 Welcome Back Hania 一起显示。 我收到这张图片:
我的 Db 还没有图像 URL:
所以如果没有 URL 保存在数据库中,它应该像这样显示我的默认图像:
我在 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 用于从数据库获取图像的代码:
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"));
}
},
),
),
),
我会在编辑USer的个人资料时存储图片,暂时不添加。那么我的错误的解决方案是什么。请帮助我,因为我是 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)
════════════════════════════════════════════════════════════════════════════════════════════════════
问题出在这一行:
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
值将从这个未来返回,而不是它的字符串表示。