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

类型“List”不是类型“Map”的子类型,在flatter应用程序中获取此错误

宓昂雄
2023-03-14

我试图加载数据从我的strapi数据库列表,即:http://localhost:1337/products下面是一个示例数据从我的数据库:

[{“picture”:[{“_id”:“602d327fe790253a44f466e7”,“name”:“petromax.png”,“alternativeText”:“caption”:“hash”:“petromax_14618; add72”,“ext”:“ext”:“image/png”,“size”:73.87,“width”:444,“height”:512,“url”:“/上传/petromax_14618add72.png”,“格式”:“{“缩略图”:“缩略图”:“thumbnail_petromax.png”,“hash”:“thumnail_petromax 14618add72”,“ext”:“ext”:“png”:“mime”:“image/png”,“width”:135,“height”:156,“size”:30.2,“path”:null,“url”:“/uploads/thumble\u petromax\u 14618add72.png”,“small”:“name”:“small\u petromax\u 14618add72”,“ext”:.png”,“mime”:“image/png”,“width”:434,“height”:500,“size”:205.37,“path”:null,“url”:“/uploads/small\u petromax\u 14618add72.png”,“provider”:“local”,“相关”:[“602d3287e790253a44f466e8”],“创建日期”:“2021-02-17T15:13:03.648Z”,“更新日期”:“2021-02-17T15:13:11.831Z”;“创建人”:“60278359e1626337e009d550”;“更新人”:“60278359e1626337e009d550”;“id”:“602d327fe790253a44f466e7”;“id”:“602D3287E798”;“说明”;“KG”;“说明”;“KG”,“圆柱体”:780,“创建人”:“2021-02-17T15:13:11.285Z”,“更新日期”:“2021-02-21T15:35:58.368Z”,“创建人”:{“id”:“60278359e1626337e009d550”,“用户名”:null,“名字”:“DokanDar”,“姓氏”:“eComm”,“创建日期”:“2021-02-13T07:44:25.817Z”,“更新日期”:“2021-02-13T07:44:26.35Z”,“用户名”:602039E00”,“更新人”:{“_id”:“60278359e1626337e009d550”,“用户名”:null,“名字”:“DokanDar”,“lastname”:“eComm”,“createdAt”:“2021-02-13T07:44:25.817Z”,“updatedAt”:“2021-02-13T07:44:26.352Z”,“_uv”:0,“id”:“60278359e1626337e009d550”,“Price”:850,“id”:“602d3287e790253a44f466e8”,

我想展示此产品项中的每个产品。省道页面:

import 'package:flutter/material.dart';
import 'package:flutter_ecommerce/models/app_state.dart';
import 'package:flutter_ecommerce/models/product.dart';
import 'package:flutter_redux/flutter_redux.dart';

class ProductItem extends StatelessWidget {
  final Product item;
  ProductItem({this.item});

  @override
  Widget build(BuildContext context) {
    final String pictureUrl = 'http://localhost:1337${item.picture['url']}';
    return GridTile(
        footer: GridTileBar(
            title: FittedBox(
                fit: BoxFit.scaleDown,
                alignment: Alignment.centerLeft,
                child: Text(item.name, style: TextStyle(fontSize: 20.0))),
            subtitle: Text("\$${item.price}", style: TextStyle(fontSize: 16.0)),
            backgroundColor: Color(0xBB000000),
            trailing: StoreConnector<AppState, AppState>(
                converter: (store) => store.state,
                builder: (_, state) {
                  return state.user != null
                      ? IconButton(
                          icon: Icon(Icons.shopping_cart),
                          color: Colors.white,
                          onPressed: () => print('pressed'))
                      : Text('');
                })),
        child: Image.network(pictureUrl, fit: BoxFit.cover));
  }
}

启动应用程序后,我收到以下错误:

E/flutter(25288):[ERROR: flutter/lib/ui/ui_dart_state.cc(184)]未处理的异常:类型列表不是类型映射的子类型

这些是文件中actions.dart产品操作:

ThunkAction<AppState> getProductsAction = (Store<AppState> store) async {
  http.Response response = await http.get('http://localhost:1337/products');
  final List<dynamic> responseData = json.decode(response.body);
  List<Product> products = [];
  responseData.forEach((productData) {
    final Product product = Product.fromJson(productData);
    products.add(product);
  });
  store.dispatch(GetProductsAction(products));
};

class GetProductsAction {
  final List<Product> _products;

  List<Product> get products => this._products;

  GetProductsAction(this._products);
}

这也是product.dart文件:

import 'package:meta/meta.dart';

class Product {
  String id;
  String name;
  String description;
  num price;
  Map<String, dynamic> picture;

  Product(
      {@required this.id,
      @required this.name,
      @required this.description,
      @required this.price,
      @required this.picture});

  factory Product.fromJson(Map<String, dynamic> json) {
    return Product(
        id: json['id'],
        name: json['name'],
        description: json['description'],
        price: html" target="_blank">json['price'],
        picture: json['picture']);
  }
}

共有1个答案

晏卓君
2023-03-14

我想你得到的是地图

final Map<String, dynamic> responseData = json.decode(response.body);

 类似资料:
  • 在这里,我试图创建一个未来的listview生成器,得到一条错误消息:_TypeError(type'List'不是type'Map'的子类型)flift。我需要在列表视图中获取帖子中的所有数据。使用JSON到dart转换器quicktype创建模型类。木卫一 未来电话 模型

  • 我相信你知道上面的问题。我想知道我怎样才能解决它。我知道我的数据是列表形式的,但在我使用的数据类map中。我真的不明白我应该如何改变它的工作,基本上我只是跟随颤振。开发文档 如果你想知道我做了什么 我基本上是用json_serializable解析数据的。在使用测试数据进行的测试中,所有测试都运行良好。 我的数据: 我的模型包含一个标题,图像 ` 我正在使用以下代码使用数据: 我希望我写得清楚 -

  • 我怎样才能解决这个问题?? 编辑:“extractedData”是映射,如何将其转换为列表以添加到“final List loadedProducts=[];”中? 对于要求的帖子:“看起来你的帖子大部分是代码,请添加更多细节。”“看起来您的帖子大部分是代码;请添加更多详细信息。” 输出:

  • 我正在开发一个依靠API REST调用的flutter应用程序。来自API的响应有点复杂。当调用我的API(例如:api/产品)时,我可以从日志中看到响应:但是我有这个错误: 类型列表 StackTrace: [更新]:退货产品响应。fromJson(response)而不是response ProductsRespository: ProductsBloc: 回应: ApiProvider: 模

  • 我正在解码一个响应体,我得到了错误: 我正在解析JSON对象的JSON数组,其中一个字段也是对象列表,我怀疑我的问题源于此。我也在使用json_serializable库。下面是我的代码,我省略了一些字段,更改了一些变量名称,但它代表相同的代码: 从。json_serializable生成的g dart文件(将编码部分复制): 这是我未来的职能:

  • 我正在学习飞镖和颤振。现在,我尝试将JSON作为一种持久性方法。我犯了很多错误,都是关于类型和内容的。这是我遇到的最新错误: