错误:类型 '_InternalLinkedHashMap<String, dynamic>' 不是类型 'List<dynamic>' 的子类型
Posted
技术标签:
【中文标题】错误:类型 \'_InternalLinkedHashMap<String, dynamic>\' 不是类型 \'List<dynamic>\' 的子类型【英文标题】:Error : type '_InternalLinkedHashMap<String, dynamic>' is not a subtype of type 'List<dynamic>'错误:类型 '_InternalLinkedHashMap<String, dynamic>' 不是类型 'List<dynamic>' 的子类型 【发布时间】:2021-04-07 00:00:27 【问题描述】:我是 Flutter 的新手,我尝试阅读 this json file,但出现错误,'like type List dynamic is not a subtype of type 'List.'
请帮助我学习一个有用的教程并告诉我如何修复此代码。
这是我的代码: resto_list_page.dart
import 'package:flutter/material.dart';
import 'resto.dart';
class RestoListPage extends StatelessWidget
static const routeName = '/resto_list';
@override
Widget build(BuildContext context)
return Scaffold(
appBar: AppBar(
title: Text('Restaurant App'),
),
body: FutureBuilder<dynamic>(
future: DefaultAssetBundle.of(context)
.loadString('assets/local_restaurant.json'),
builder: (context, snapshot)
final List<Resto> restos = parseArticles(snapshot.data);
return ListView.builder(
itemCount: restos.length,
itemBuilder: (context, index)
return _buildArticleItem(context, restos[index]);
,
);
,
),
);
Widget _buildArticleItem(BuildContext context, Resto resto)
return ListTile(
contentPadding:
const EdgeInsets.symmetric(horizontal: 16.0, vertical: 8.0),
leading: Image.network(
resto.pictureId,
width: 100,
),
title: Text(resto.name),
subtitle: Column(
children: <Widget>[
Row(
children: <Widget>[
Icon(Icons.place),
Text(resto.city)
],
),
Row(
children: <Widget>[
Icon(Icons.star),
Text('$resto.rating')
],
),
],
),
);
这是另一个文件代码。 resto.dart
import 'dart:convert';
class Resto
String id;
String name;
String description;
String pictureId;
String city;
double rating;
Map<String, String> foods;
Map<String, String> drinks;
Resto(
this.id,
this.name,
this.description,
this.pictureId,
this.city,
this.rating,
this.foods,
this.drinks);
Resto.fromJson(Map<String, dynamic> restos)
id = restos['id'];
name = restos['name'];
description = restos['description'];
pictureId = restos['pictureId'];
city = restos['city'];
rating = restos['rating'];
foods = restos['menus']['foods'];
drinks = restos['menus']['drinks'];
List<Resto> parseArticles(String json)
if (json == null)
return [];
final List parsed = jsonDecode(json);
return parsed.map((json) => Resto.fromJson(json)).toList();
【问题讨论】:
请添加您的 json 文件。此错误表示您尝试解析为列表的 json 文件不是列表,而是地图。 【参考方案1】:parsed
必须声明为List<dynamic>
:
final List<dynamic> parsed = jsonDecode(json);
所以完整的代码变成了:
List<Resto> parseArticles(String json)
if (json == null)
return [];
final List<dynamic> parsed = jsonDecode(json);
return parsed.map((json) => Resto.fromJson(json)).toList();
【讨论】:
以上是关于错误:类型 '_InternalLinkedHashMap<String, dynamic>' 不是类型 'List<dynamic>' 的子类型的主要内容,如果未能解决你的问题,请参考以下文章
错误类型错误:_co.deleteConsulta 不是函数
Alamofire:错误:无法将“结果<_,_>”类型的值分配给“结果”类型