当前位置: 首页 > 知识库问答 >
问题:

类型“\u InternalLinkedHashMap”不是类型转换中“Topic”类型的子类型

赫连黎昕
2023-03-14

我对flatter是个新手,我想呈现一个ListView。但是我犯了一个错误。

我有3个模型课:

主题、主题和内容。

这是模型文件主题。省道

import './content.dart';

class Topic {
  String name;
  List<Content> contents;

  Topic(this.name, this.contents);

  factory Topic.fromJSON(Map<String, dynamic> json) {
    if (json != null) {
      return Topic(json['name'], json['contents'].cast<Content>());
    } else {
      return null;
    }
  }
}

这是topics_page.dart文件:

import 'package:flutter/material.dart';
import './../models/subject.dart';

class TopicsPage extends StatefulWidget {
  final Subject _subject;

  TopicsPage(this._subject);

  @override
  State<StatefulWidget> createState() {
    return _TopicsPageState();
  }
}

class _TopicsPageState extends State<TopicsPage> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(
          title: Text(widget._subject.name),
        ),
        body: Container(
          child: ListView.separated(
            separatorBuilder: (BuildContext context, int index) => Divider(
              color: Colors.grey[200],
              thickness: 1.5,
            ),
            itemCount: widget._subject.topics.length,
            itemBuilder: (BuildContext context, int index) {
              return InkWell(
                onTap: () {
                  Navigator.of(context).pushNamed('/contents',
                      arguments: widget._subject.topics[index]);
                },
                child: ListTile(
                  title: Text(
                    widget._subject.topics[index].name,
                    style: TextStyle(
                        fontSize: 18.0,
                        fontWeight: FontWeight.w500,
                        letterSpacing: 0.3),
                  ),
                ),
              );
            },
          ),
        ));
  }
}

问题出现在小部件上_主题主题[索引]。名称

错误消息是:type'_InternalLinkedHashMap

现在我需要一些帮助来找出可能的解决方案!

有什么想法吗?

谢谢你!

更新

content.dart

class Content {
  String title;
  String body;

  Content(this.title, this.body);

  factory Content.fromJSON(Map<String, dynamic> json) {
    if (json != null) {
      return Content(json['title'], json['body']);
    } else {
      return null;
    }
  }
}

主题。省道

import './topic.dart';

class Subject {
  String name;
  List<Topic> topics;

  Subject(this.name, this.topics);

  factory Subject.fromJSON(Map<String, dynamic> json) {
    if (json != null) {
      return Subject(json['name'], json['topics'].cast<Topic>());
    } else {
      return null;
    }
  }
}

这是我的其他模型文件。

请告诉我我做错了什么!谢谢

更新2

现在我收到错误消息:参数类型“Content”无法分配给参数类型“List”

这是您建议的新代码:

import './content.dart';

class Topic {
  String id;
  String name;
  int order;
  bool isImportant;
  List<Topic> contents;

  Topic({this.id, this.name, this.order, this.isImportant, this.contents});
  factory Topic.fromJSON(Map<String, dynamic> json) {
    if (json != null) {
      return Topic(
          name: json['name'],
          order: json['order'],
          isImportant: json['isImportant'],
          contents: Content.fromJSON(json['contents'] as Map<String, dynamic>));
    } else {
      return null;
    }
  }
}

共有2个答案

谷梁裕
2023-03-14

使用var而不是Map

class Content {
  String title;
  String body;

  Content(this.title, this.body);

  factory Content.fromJSON(var json) {
    if (json != null) {
      return Content(json['title'], json['body']);
    } else {
      return null;
    }
  }
}

东方吕恭
2023-03-14

如果你的Content是一个类,你的主题内容应该将json['内容']映射到你的Content工厂

在您的内容

factory Content.fromJSON(Map<String, dynamic> json) {
if (json != null) {
  return Content(json['content1']);
} else {
  return null;
}
}

在您的主题:

factory Topic.fromJSON(Map<String, dynamic> json) {
if (json != null) {
  return Topic(json['name'], Content.fromJson(json['content'] as Map<String, dynamic>);
} else {
  return null;
}
}

最后,在定义类之后,实际上可以使用JsonSerializer为您生成所有这些。这是医生。希望这有帮助。

 类似资料:
  • 当我运行我的代码时,它返回了错误:类型“Future”不是类型转换中“List”类型的子类型。我该如何修复它?它是在我从Firebase获取数据之前匹配引擎运行的?我试图将wait添加到List demoProfiles=getdata()作为wait List;但它返回错误。我真的是新手,这个问题已经困扰了我一整天。请帮帮我

  • 我试图在Dart中反序列化一个非常复杂的JSON,但是我不知道出了什么问题。 当它尝试反序列化时,它向我显示了以下错误:“type'\u InternalLinkedHashMap” 有人知道发生了什么事吗? 这是我的密码:

  • 我试图将一个嵌套的JSON对象发布到API。下面是我正在尝试的简单代码。 我收到错误消息:

  • 我有错误从标题时试图这样做 > 我创建了@JsonSerialiazable()类来处理json 然后,在调用http时。get(),我执行以下操作: map变量如下所示: 当调用$MyResponseFromJson(json)时,当它试图从我的响应中执行(json['a']as List)时,它会给出一个错误。g、 构建运行程序生成的dart文件。 我如何修复错误? 谢啦

  • 我在尝试使用JSON_serializable序列化从internet获取的复杂JSON并使用FutureProvider将它们连接在一起时遇到了这个问题。这是json文件, 这是包含序列化类的代码, 获取json文件并将其转换为dart的未来提供者, 这是基因编码, 这是转换后的json文件显示的代码 当我试着运行这个项目时,我遇到了这个错误 i/flutter(23347): type'Lis

  • 我有这个通用函数: 我这样称呼它: 但是,由于我将使用get_存储框作为我的_数据客户端,改为使用配置单元框,因此出现以下错误: 配置单元必须以不同的格式存储数据,这可能是由于加密造成的,但如何解释这一点并消除此错误?