【问题标题】:Flutter: _InternalLinkedHashMap has no instance > method 'cast'Flutter:_InternalLinkedHashMap 没有实例> 方法“cast”
【发布时间】:2019-04-22 00:45:47
【问题描述】:

Sthg 让我发疯,我尝试在卡片中显示 json 产品,但它不起作用。到目前为止,这是我尝试过的:

产品类别:

class Product {
   final String id;

   Product({this.id});

   factory Product.fromJson(Map<String, dynamic> json) {
       return new Product(
          id: json['id'] as String
       );
  }
 }

JSON:

Future loadProducts() async {
   final response = await http.get('https://api.stripe.com/v1/products');
   return response.body;
}

json 结构如下(数据包含产品列表):

小部件:

Widget get _homeView {
  return new Column(
    children: <Widget>[
       new FutureBuilder(
             future: loadProducts(),
             builder: (context, snapshot) {

                  List<Product> products = parseJson(snapshot.data.toString());
                  return !products.isEmpty 
                     ? new ProductsList(product: products) 
                     : new CircularProgressIndicator();
             }
       ),
       ...
     ]
  );
}

List<Product> parseJson(String response) {
    final parsed = json.decode(response.toString()).cast<Map<String, dynamic>>();
    return parsed.map<Product>((json) => new Product.fromJson(json)).toList();
}

ProductsList 类:

class ProductsList extends StatelessWidget {
    final List<Product> product;
    ProductsList({Key key, this.product}) : super(key: key);

    @override
    Widget build(BuildContext context) {
        return new ListView.builder(
          itemCount: product == null ? 0 : product.length,
          itemBuilder: (BuildContext context, int index) {
             return new Card(
                child: new Container(
                  children: <Widget>[
                    new Text(product[index].id),
                  ],
                )
             );
          }
        );
      }
   }

错误:

类“_InternalLinkedHashMap”没有实例 具有匹配参数的方法“cast”。

编辑 1:

我试过了: 错误 :

【问题讨论】:

标签: dart flutter


【解决方案1】:

这是我解析对象的 json 列表的常用方法(有点简单但有效):

List<Product> parseJson(String response) {
    List<Product> products = new List<Product>();
    List jsonParsed = json.decode(response.toString());
    for (int i = 0; i < jsonParsed.length; i++) {
      products.add(new Product.fromJson(jsonParsed[i]));
    }
    return products;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-07
    • 2020-12-20
    • 2019-11-20
    • 1970-01-01
    • 2022-11-24
    • 2020-12-19
    • 2020-04-27
    相关资源
    最近更新 更多