如何在颤振中修复此错误:预期值类型为"Map<字符串,动态>",但得到类型为"列表"的值之一<dynamic>



我尝试通过api接收类别列表,但我得到了此错误!当我改变我的fromJson fromJson(列表)我的变量不接受字符串值,因为然后期望一个int值。

我CategoryModel

import 'dart:convert';
class Category {
String? id;
String? tenantId;
String? userId;
String? name;
String? description;
String? createdAt;
String? updatedAt;
Category(
{this.id,
this.tenantId,
this.userId,
this.name,
this.description,
this.createdAt,
this.updatedAt});
Category.fromJson(Map<String, dynamic> json) {
id = json['id'];
tenantId = json['tenant_id'];
userId = json['user_id'];
name = json['name'];
description = json['description'];
createdAt = json['created_at'];
updatedAt = json['updated_at'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['id'] = id;
data['tenant_id'] = tenantId;
data['user_id'] = userId;
data['name'] = name;
data['description'] = description;
data['created_at'] = createdAt;
data['updated_at'] = updatedAt;
return data;
}
}

My API Call

import 'package:http/http.dart' as http;
import 'dart:convert';
import 'package:mcea_master_application/config/config.dart';
import 'package:mcea_master_application/models/CategoryModel.dart';
final String urlCategories = '${Config.baseUrl}categories';
Future getMceaCategories() async {
final response = await http.get(Uri.parse(urlCategories), headers: {
'Content-Type': 'application/json',
'Accept': 'application/json',
'Authorization': 'Bearer 6|b8Wi0V95n3fgZyCg3DiJFymdx10jZsX2K58vpVcq',
});
if (response.statusCode == 200) {
var categories = Category.fromJson(jsonDecode(response.body));
// return jsonDecode(response.body);
return categories;
} else {
throw Exception('Falha ao carregar as categorias!');
}
}

if返回直接响应。身体没有地图我的模型,它工作!

我这页

import 'dart:html';
import 'dart:js';
import 'package:flutter/material.dart';
import 'package:carousel_slider/carousel_slider.dart';
import 'package:mcea_master_application/config/config.dart';
import 'package:mcea_master_application/config/mcea-api.dart';
import 'package:mcea_master_application/models/CategoryModel.dart';
// ignore: use_key_in_widget_constructors
class Home extends StatefulWidget {
const Home({super.key});
@override
State<Home> createState() => _HomeState();
}
class _HomeState extends State<Home> {
@override
Widget build(BuildContext context) {
return Scaffold(
// backgroundColor: Colors.black,
appBar: AppBar(
backgroundColor: Colors.black,
title: Text(Config.title),
),
body: FutureBuilder(
future: getMceaCategories(),
builder: (context, snapshot) {
if (snapshot.hasData) {
print(snapshot.data);
return ListView.builder(
itemCount: snapshot.data.length,
itemBuilder: (context, index) {
return ListTile(
title: Text(snapshot.data[index]['name']),
);
});
}
if (snapshot.hasError) {
print(snapshot.error);
}
return const Center(
child: CircularProgressIndicator(),
);
}),
);
}
}

我的Json

[
{
"id": "6f8c3398-c671-424f-a31c-86c0589ab6a7",
"tenant_id": "866a0842-e227-41b8-a73a-d224f6599412",
"user_id": "e66beb23-50ee-46e3-b6c6-d146f7f3987f",
"name": "Treinos para Perna",
"description": "Aqui você tem todos os treinos para a perna",
"created_at": "2022-12-14T22:11:06.000000Z",
"updated_at": "2022-12-14T22:11:06.000000Z"
},
{
"id": "a65553cd-4f17-4629-9ef9-648797e4d687",
"tenant_id": "866a0842-e227-41b8-a73a-d224f6599412",
"user_id": "e66beb23-50ee-46e3-b6c6-d146f7f3987f",
"name": "Treinos para a Bunda",
"description": "Aqui você encontra todos os treinos para a bunda",
"created_at": "2022-12-14T22:11:21.000000Z",
"updated_at": "2022-12-14T22:11:21.000000Z"
},
{
"id": "c8f07e7c-7f25-4713-b4d2-f901a5bda8be",
"tenant_id": "866a0842-e227-41b8-a73a-d224f6599412",
"user_id": "e66beb23-50ee-46e3-b6c6-d146f7f3987f",
"name": "Comece Aqui",
"description": "Aqui você aprende a usar o nosso aplicativo",
"created_at": "2022-12-12T23:21:22.000000Z",
"updated_at": "2022-12-14T22:11:34.000000Z"
}

)

我尝试了这些解决方案,但都不适合我!

My Sdk version

sdk: '>=2.18.5 <3.0.0'

似乎api在你的代码中返回一个列表,你已经这样做了var categories = Category.fromJson(jsonDecode(response.body)); the响应。body '将是一个类别数组,你可能需要这样做

import 'package:http/http.dart' as http;
import 'dart:convert';
import 'package:mcea_master_application/config/config.dart';
import 'package:mcea_master_application/models/CategoryModel.dart';
final String urlCategories = '${Config.baseUrl}categories';
Future getMceaCategories() async {
final response = await http.get(Uri.parse(urlCategories), headers: {
'Content-Type': 'application/json',
'Accept': 'application/json',
'Authorization': 'Bearer 6|b8Wi0V95n3fgZyCg3DiJFymdx10jZsX2K58vpVcq',
});
if (response.statusCode == 200) {
final result = jsonDecode(response.body) as List<Map<String,dynamic>>;
final categories = result.map((data) => Category.fromJson(data)).toList();
return categories;
} else {
throw Exception('Falha ao carregar as categorias!');
}
}

相关内容

最新更新