Flutter中如何调用CachedNetworkImageProvider的list方法进入carousel pro
How to call CachedNetworkImageProvider's list method into carousel pro in Flutter
我想在 Flutter 轮播中使用带有 CachedNetworkImageProvider 列表的图像。
但是我收到了这种错误类型
你能帮忙解决这个问题吗?
编辑
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.black,
appBar: AppBar(
backgroundColor: Colors.black,
title: Text("Home"),
),
body: ListView(
children: [
SizedBox(
height: 200.0,
width: double.infinity,
child: Carousel(
images: [
//CachedNetworkImageProvider('https://cdn-images-1.medium.com/max/2000/1*GqdzzfB_BHorv7V2NV7Jgg.jpeg'),
//CachedNetworkImageProvider('https://cdn-images-1.medium.com/max/2000/1*wnIEgP1gNMrK5gZU7QS0-A.jpeg'),
getOtherUserPhoto(),
],
),
),
],
),
);
}
Future<List<CachedNetworkImageProvider>> getOtherUserPhoto() async {
try{
List<CachedNetworkImageProvider> _userPhotosWidgetList = [];
final _userModel = Provider.of<OtherUserViewModel>(context, listen: false);
List<String> _userPhotosList = await _userModel.getOtherUserPhoto();
for(int i = 0; i < _userPhotosList.length; i++){
_userPhotosWidgetList.add(CachedNetworkImageProvider(_userPhotosList[i].toString()));
}
return _userPhotosWidgetList;
}catch(e){
print("Exception cause : " + e.toString());
return null;
}
}
错误日志:
======== widgets库捕获异常================================ =======================
以下 _TypeError 被抛出构建 Carousel(脏,状态:CarouselState#3294f):
类型 'Future<List>' 不是类型 'Widget'
的子类型
您不能将未来直接分配给列表,您必须等待响应,因此我们将使用这样的 FutureBuilder:
SizedBox(
height: 200.0,
width: double.infinity,
child: FutureBuilder<List<Widget>>(
future: getOtherUserPhoto(),
builder: (context, snapshot) {
if (!snapshot.hasData) {
return LinearProgressIndicator();
}
return Carousel(images: snapshot.data);
}),
),
并且您需要更改函数类型,因为 CachedNetworkImageProvider 不是小部件,而是使用 CachedNetworkImage:
Future<List<Widget>> getOtherUserPhoto() async {
List<CachedNetworkImage> _userPhotosWidgetList = [];
final _userModel = Provider.of<OtherUserViewModel>(context, listen: false);
List<String> _userPhotosList = await _userModel.getOtherUserPhoto();
for(int i = 0; i < _userPhotosList.length; i++){
_userPhotosWidgetList.add(CachedNetworkImage(imageUrl: _userPhotosList[i].toString()));
}
return _userPhotosWidgetList;
}
从 getOtherUserPhoto()
符号中删除 Future
。
我想在 Flutter 轮播中使用带有 CachedNetworkImageProvider 列表的图像。
但是我收到了这种错误类型
你能帮忙解决这个问题吗?
编辑
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.black,
appBar: AppBar(
backgroundColor: Colors.black,
title: Text("Home"),
),
body: ListView(
children: [
SizedBox(
height: 200.0,
width: double.infinity,
child: Carousel(
images: [
//CachedNetworkImageProvider('https://cdn-images-1.medium.com/max/2000/1*GqdzzfB_BHorv7V2NV7Jgg.jpeg'),
//CachedNetworkImageProvider('https://cdn-images-1.medium.com/max/2000/1*wnIEgP1gNMrK5gZU7QS0-A.jpeg'),
getOtherUserPhoto(),
],
),
),
],
),
);
}
Future<List<CachedNetworkImageProvider>> getOtherUserPhoto() async {
try{
List<CachedNetworkImageProvider> _userPhotosWidgetList = [];
final _userModel = Provider.of<OtherUserViewModel>(context, listen: false);
List<String> _userPhotosList = await _userModel.getOtherUserPhoto();
for(int i = 0; i < _userPhotosList.length; i++){
_userPhotosWidgetList.add(CachedNetworkImageProvider(_userPhotosList[i].toString()));
}
return _userPhotosWidgetList;
}catch(e){
print("Exception cause : " + e.toString());
return null;
}
}
错误日志:
======== widgets库捕获异常================================ ======================= 以下 _TypeError 被抛出构建 Carousel(脏,状态:CarouselState#3294f): 类型 'Future<List>' 不是类型 'Widget'
的子类型您不能将未来直接分配给列表,您必须等待响应,因此我们将使用这样的 FutureBuilder:
SizedBox(
height: 200.0,
width: double.infinity,
child: FutureBuilder<List<Widget>>(
future: getOtherUserPhoto(),
builder: (context, snapshot) {
if (!snapshot.hasData) {
return LinearProgressIndicator();
}
return Carousel(images: snapshot.data);
}),
),
并且您需要更改函数类型,因为 CachedNetworkImageProvider 不是小部件,而是使用 CachedNetworkImage:
Future<List<Widget>> getOtherUserPhoto() async {
List<CachedNetworkImage> _userPhotosWidgetList = [];
final _userModel = Provider.of<OtherUserViewModel>(context, listen: false);
List<String> _userPhotosList = await _userModel.getOtherUserPhoto();
for(int i = 0; i < _userPhotosList.length; i++){
_userPhotosWidgetList.add(CachedNetworkImage(imageUrl: _userPhotosList[i].toString()));
}
return _userPhotosWidgetList;
}
从 getOtherUserPhoto()
符号中删除 Future
。