首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不能将参数类型“List<ImageModel>”分配给参数类型“ImageModel”

不能将参数类型“List<ImageModel>”分配给参数类型“ImageModel”
EN

Stack Overflow用户
提问于 2021-04-14 03:23:53
回答 2查看 24关注 0票数 0

我通过flutter语言创建了一个应用程序来显示幻灯片。通过显示的图像,我尝试使用户能够单击图像并移动到具有所拍摄的图像ID的下一页。

我创建了以下代码来实现这一点,但我面临以下问题:

代码语言:javascript
复制
The argument type 'List<ImageModel>' can't be assigned to the parameter type 'ImageModel'.
代码语言:javascript
复制
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,
  };
}

我在以下位置得到错误:

代码语言:javascript
复制
onTap: () {

              _gotoSingleImage( imageModel, context);

            },

一张更能说明问题的图片:

enter image description here

有人能帮我解决这个问题吗。

谢谢。

EN

回答 2

Stack Overflow用户

发布于 2021-04-14 04:09:41

_gotoSingleImage接受ImageModel的一个实例和一个上下文。但是,您可以使用声明为List<ImageModel>的变量imageModel调用它。这不管用。因此,您必须相应地更改imageModel的类型或修改_gotoSingleImage方法。

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

票数 0
EN

Stack Overflow用户

发布于 2021-04-14 04:17:42

你做的一切都错了!首先,你在应该只有一个的地方放置一个imageModelList,你可以尝试这样做:

注意:我已经用carousel_Slider包尝试过了,因为这就是我的包

代码语言:javascript
复制
 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(),
        ));
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67081196

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档