首页 > 解决方案 > 参数类型'列表'不能分配给参数类型'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);

            },

一张更能说明问题的图:

在此处输入图像描述

有人可以帮我解决这个问题。

谢谢你。

标签: flutter

解决方案


_gotoSingleImage接受一个实例ImageModel和一个上下文。但是,您使用imageModel声明为List<ImageModel>. 那是行不通的。因此,您必须相应地更改类型imageModel或修改方法_gotoSingleImage

旁注:这并不特定于 Flutter 或 Dart(这是您编写的语言),因此我建议您熟悉函数和方法的一般工作方式。无论您使用哪种语言,您都将需要这些基本知识。


推荐阅读