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

颤振错误:应为“Map”类型的值,但出现了“List”类型的值

璩正志
2023-03-14

我使用超文本传输协议:^0.13.3,这是我的简单代码,当我运行此代码时,我得到了错误:"期望类型'Map的值

class SubCategoryObject {
  final int id;
  final String category;

  SubCategoryObject({@required this.id, @required this.category});

  factory SubCategoryObject.fromJson(Map<String, dynamic> json) {
    return SubCategoryObject(
      id: json['id'],
      category: json['title'],
    );
  }
}
class SubCategoryListScreen extends StatelessWidget {
  static const route = 'sub-category-list';
  SubCategoryListScreen({Key key}) : super(key: key);

  Future<SubCategoryObject> getData() async {
    final res =
        await http.get(Uri.https("jsonplaceholder.typicode.com", "todos"));

    if (res.statusCode == 200) {
      return SubCategoryObject.fromJson(jsonDecode(res.body));
    } else {
      // If that call was not successful, throw an error.
      throw Exception('Failed to load ');
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("martman"),
      ),
      body: FutureBuilder<SubCategoryObject>(
        future: getData(),
        builder: (ctx, snapshot) {
          // Checking if future is resolved or not
          if (snapshot.connectionState == ConnectionState.done) {
            // If we got an error
            if (snapshot.hasError) {
              return Center(
                child: Text(
                  '${snapshot.error} occured',
                  style: TextStyle(fontSize: 18),
                ),
              );

              // if we got our data
            } else if (snapshot.hasData) {
              return Text(snapshot.data.category);
            }
          }

          // Displaying LoadingSpinner to indicate waiting state
          return Center(
            child: CircularProgressIndicator(),
          );
        },

        
      ),
    );
  }
}

共有1个答案

易星宇
2023-03-14

请检查以下链接。它返回列表,而不是地图数据。https://jsonplaceholder.typicode.com/todos

Future<List<SubCategoryObject>> getData() async {
    final res =
        await http.get(Uri.https("jsonplaceholder.typicode.com", "todos"));

    if (res.statusCode == 200) {
      dynamic result = jsonDecode(res.body);
      return (result as List).map((e) => SubCategoryObject.fromJson(e)).toList();
    } else {
      // If that call was not successful, throw an error.
      throw Exception('Failed to load ');
    }
}
 类似资料: