【发布时间】: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:
【问题讨论】:
-
虽然api.dartlang.org/stable/2.1.0/dart-core/Map/cast.html你使用的是什么Dart版本,但该方法存在?
-
我更新了答案。
-
仅供参考,this article 非常方便地解释在 Flutter 中解析 JSON,我发现自己时不时会回到它。
-
我正在使用 Dart2 @GünterZöchbauer