dart Flutter:_InternalLinkedHashMap没有示例>方法“cast”

disho6za  于 2023-03-10  发布在  Flutter
关注(0)|答案(1)|浏览(130)

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();
}

产品列表类:

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:

我试过了:

错误:

c9x0cxw0

c9x0cxw01#

这是我解析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;
}

相关问题