flutter - 参数类型'列表'不能分配给参数类型'ImageModel'
问题描述
我通过flutter的语言创建了一个应用程序来显示幻灯片。通过显示的图像,我尝试让用户点击图像并移动到带有图像 ID 的下一页。
我创建了以下代码来做到这一点,但我面临以下问题:
The argument type 'List<ImageModel>' can't be assigned to the parameter type 'ImageModel'.
class Demo extends StatefulWidget {
@override
_HomePageState createState() => _HomePageState();
}
class _HomePageState extends State<Demo> {
bool lodaing=true;
List<ImageModel> imageModel ;
List data;
Future GetAllCategory()async{
var response=await http.get("https://****************.php"
, headers: {"Accept": "application/json"}
);
var jsoBody = response.body;
var jsoData =json.decode(jsoBody);
setState(() {
data= jsoData;
lodaing=false;
});
print('show all data $jsoData');
}
@override
void initState() {
// TODO: implement initState
super.initState();
GetAllCategory();
}
var getId;
void _gotoSingleImage(ImageModel imageModel, BuildContext context) {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => SingleImage(imageModel)),
);
}
@override
Widget build(BuildContext context) {
return Scaffold(
body:lodaing? CircularProgressIndicator() :
GestureDetector(
child:
Center(
child: SizedBox(
height: 150.0,
width: 300.0,
child: InkWell(
onTap: () {
_gotoSingleImage( imageModel, context);
},
child: Carousel(
boxFit: BoxFit.cover,
autoplay: true,
dotSize: 4.0,
dotSpacing: 15.0,
dotColor: Colors.lightGreenAccent,
indicatorBgPadding: 5.0,
dotBgColor: Colors.purple.withOpacity(0.5),
borderRadius: true,
images:
data .map(
(list) {
return Image.network(list['image']
);
},
)
.toList(),
),
),
),
),
)
);
}
}
class SingleImage extends StatefulWidget {
final ImageModel imageModel;
SingleImage(this.imageModel);
@override
_SingleImageState createState() => _SingleImageState();
}
class _SingleImageState extends State<SingleImage> {
@override
void initState() {
// TODO: implement initState
super.initState();
print(widget.imageModel);
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('ImageScreen'),
),
body: Center(
// print(widget.getId.toString());
));
}
}
class ImageModel {
int id;
String src;
ImageModel({
this.id,
this.src,
});
factory ImageModel.fromJson(Map<String, dynamic> json) => ImageModel(
id: json["id"],
src: json["src"],
);
Map<String, dynamic> toJson() => {
"id": id,
"src": src,
};
}
class ImageUrl {
ImageUrl({
this.id,
this.src,
this.name,
this.alt,
});
int id;
String src;
String name;
String alt;
factory ImageUrl.fromJson(Map<String, dynamic> json) => ImageUrl(
id: json["id"],
src: json["src"],
name: json["name"],
alt: json["alt"],
);
Map<String, dynamic> toJson() => {
"id": id,
"src": src,
"name": name,
"alt": alt,
};
}
我得到错误:
onTap: () {
_gotoSingleImage( imageModel, context);
},
一张更能说明问题的图:
有人可以帮我解决这个问题。
谢谢你。
解决方案
_gotoSingleImage
接受一个实例ImageModel
和一个上下文。但是,您使用imageModel
声明为List<ImageModel>
. 那是行不通的。因此,您必须相应地更改类型imageModel
或修改方法_gotoSingleImage
。
旁注:这并不特定于 Flutter 或 Dart(这是您编写的语言),因此我建议您熟悉函数和方法的一般工作方式。无论您使用哪种语言,您都将需要这些基本知识。