我通过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);
},一张更能说明问题的图片:
有人能帮我解决这个问题吗。
谢谢。
发布于 2021-04-14 04:09:41
_gotoSingleImage接受ImageModel的一个实例和一个上下文。但是,您可以使用声明为List<ImageModel>的变量imageModel调用它。这不管用。因此,您必须相应地更改imageModel的类型或修改_gotoSingleImage方法。
附注:这并不特定于Flutter或Dart (这是您正在编写的语言),因此我建议您熟悉函数和方法的一般工作方式。无论您使用哪种语言,您都将需要这些基础知识。
发布于 2021-04-14 04:17:42
你做的一切都错了!首先,你在应该只有一个的地方放置一个imageModel的List,你可以尝试这样做:
注意:我已经用carousel_Slider包尝试过了,因为这就是我的包
child: CarouselSlider(
items: data.map((i) {
return Builder(
builder: (BuildContext context) {
return Container(
width: MediaQuery.of(context).size.width,
decoration: BoxDecoration(color: Colors.red),
child: GestureDetector(
child: Image.network(i, fit: BoxFit.fill),
onTap: () {
_gotoSingleImage( i, context);
),
);
}));
},
);
}).toList(),
));https://stackoverflow.com/questions/67081196
复制相似问题