Вложенный объект - необработанное исключение: тип '_InternalLinkedHashMap 'не является подтипом типа' Iterable <dynamic> - PullRequest
1 голос
/ 04 марта 2020

Я ищу данные в API, который содержит информацию с вложенными объектами. Однако, когда я делаю запрос, я получаю сообщение об ошибке: «Необработанное исключение: тип« _InternalLinkedHashMap »не является подтипом типа« Iterable »». Я пробовал разные учебники, но они всегда имеют эту ошибку. Спасибо за помощь. Вот мои коды ниже:

Класс Ресторан:

import 'dart:convert';

import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;
import 'package:owlwee/Models/CardapioLista.dart';
import 'package:owlwee/Views/MainPage.dart';
import 'package:owlwee/http/webclient.dart';

class Restaurant extends StatefulWidget {
  @override
  _RestaurantState createState() => _RestaurantState();
}

class _RestaurantState extends State<Restaurant> {
  List<CardapioItem> _list = [];
  var loading = false;
  Future<Null> _fetchData() async {
    setState(() {
      loading = true;
    });
    final response = await http.get(
      baseUrlEstabelecimento + '/estabelecimento/Lago Sul');
    if (response.statusCode == 200) {
      final data = jsonDecode(response.body);
      setState(() {
        for (Map cardapioJson in data) {
          _list.add(CardapioItem.fromJson(cardapioJson));
        }
        loading = false;
      });
    }
  }

  @override
  void initState() {
    super.initState();
    _fetchData();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
        body: Container(
          height: 1000,
          width: double.maxFinite,
          child: Column(
            mainAxisAlignment: MainAxisAlignment.start,
            crossAxisAlignment: CrossAxisAlignment.center,
            children: <Widget>[
              Padding(
                padding: const EdgeInsets.fromLTRB(0, 20, 0, 0),
                child: Container(
                  margin: EdgeInsets.symmetric(vertical: 10),
                  height: 240,
                  width: double.maxFinite,
                  decoration: new BoxDecoration(
                    image: new DecorationImage(
                      image: new AssetImage(
                        '$estabelecimentoGlobal' != null ? "assets/images/$estabelecimentoGlobal.jpg" : Text("File not found"),
                      ),
                      fit: BoxFit.fill,
                    ),
                  ),
                  child: Padding(
                    padding: const EdgeInsets.fromLTRB(0, 40, 0, 0),
                    child: Container(
                      height: 70,
                      width: 80,
                      margin: EdgeInsets.fromLTRB(170, 45, 0, 75),
                      padding: EdgeInsets.only(right: 10),
                      decoration: BoxDecoration(
                        color: Colors.white,
                        borderRadius: new BorderRadius.only(
                          topLeft: const Radius.circular(40.0),
                          bottomLeft: const Radius.circular(40.0),
                        ),
                      ),
                      child: Text(
                        "Você está em\n" + estabelecimentoGlobal,
                        style: TextStyle(
                          color: Color(0xff203760),
                          fontSize: 32.0,
                        ),
                        textAlign: TextAlign.right,
                      ),
                    ),
                  ),
                ),
              ),
              Expanded(
                child: loading
                    ? Center(child: CircularProgressIndicator())
                    : ListView.builder(
                        itemCount: _list.length,
                        itemBuilder: (context, cardapioJson) {
                          final item = _list[cardapioJson];
                          return Container(
                            height: 100,
                            padding: const EdgeInsets.all(0),
                            child: Card(
                              child: Column(
                                mainAxisAlignment: MainAxisAlignment.center,
                                crossAxisAlignment: CrossAxisAlignment.start,
                                children: <Widget>[
                                  Text(item.produto.nome,
                                    style: TextStyle(
                                      color: Color(0xff203760),
                                      fontSize: 20.0,
                                    ),
                                  ),
                                  Text(item.produto.descricao,
                                    style: TextStyle(
                                      color: Color(0xff203760),
                                      fontSize: 16.0,
                                    ),
                                  ),
                                  Text(item.produto.preco.toString(),
                                    style: TextStyle(
                                      color: Color(0xff203760),
                                      fontSize: 16.0,
                                    ),
                                  ),
                                ],
                              ),
                            ),
                          );
                        },
                      ),
              ),
            ],
          ),
        ),
      );
  }
}

Модели:

class CardapioItem {
  final int id;
  final String estabelecimento;
  final Produto produto;

  CardapioItem({
    this.id,
    this.estabelecimento,
    this.produto,
  });

  factory CardapioItem.fromJson(Map<String, dynamic> json) {
    return new CardapioItem(
      id: json['id'],
      estabelecimento: json['estabelecimento'],
      produto: Produto.fromJson(json['produto']));
  }
}

class Produto {
  final int id;
  final String nome;
  final String descricao;
  final double preco;

  Produto({
    this.id,
    this.nome,
    this.descricao,
    this.preco,
  });

  factory Produto.fromJson(Map<String, dynamic> json) {
    return new Produto(
      id: json['id'],
      nome: json['nome'],
      descricao: json['descricao'],
      preco: json['preco'],
    );
  }
}

ОШИБКА КОНСОЛЬНОГО СООБЩЕНИЯ:

E/flutter (12678): [ERROR:flutter/lib/ui/ui_dart_state.cc(157)] Unhandled Exception: type '_InternalLinkedHashMap<String, dynamic>' is not a subtype of type 'Iterable<dynamic>'
E/flutter (12678): #0      _RestaurantState._fetchData.<anonymous closure> (package:owlwee/Views/Restaurant.dart:26:34)
E/flutter (12678): #1      State.setState (package:flutter/src/widgets/framework.dart:1148:30)
E/flutter (12678): #2      _RestaurantState._fetchData (package:owlwee/Views/Restaurant.dart:25:7)
E/flutter (12678): <asynchronous suspension>
E/flutter (12678): #3      _RestaurantState.initState (package:owlwee/Views/Restaurant.dart:37:5)
E/flutter (12678): #4      StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:4355:58)
E/flutter (12678): #5      ComponentElement.mount (package:flutter/src/widgets/framework.dart:4201:5)
E/flutter (12678): #6      Element.inflateWidget (package:flutter/src/widgets/framework.dart:3194:14)
E/flutter (12678): #7      Element.updateChild (package:flutter/src/widgets/framework.dart:2988:12)
E/flutter (12678): #8      SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:5445:14)
E/flutter (12678): #9      Element.inflateWidget (package:flutter/src/widgets/framework.dart:3194:14)
E/flutter (12678): #10     Element.updateChild (package:flutter/src/widgets/framework.dart:2988:12)
E/flutter (12678): #11     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4243:16)
E/flutter (12678): #12     Element.rebuild (package:flutter/src/widgets/framework.dart:3947:5)
E/flutter (12678): #13     ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:4206:5)
E/flutter (12678): #14     ComponentElement.mount (package:flutter/src/widgets/framework.dart:4201:5)
E/flutter (12678): #15     Element.inflateWidget (package:flutter/src/widgets/framework.dart:3194:14)
E/flutter (12678): #16     Element.updateChild (package:flutter/src/widgets/framework.dart:2988:12)
E/flutter (12678): #17     SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:5445:14)
E/flutter (12678): #18     Element.inflateWidget (package:flutter/src/widgets/framework.dart:3194:14)
E/flutter (12678): #19     Element.updateChild (package:flutter/src/widgets/framework.dart:2988:12)
E/flutter (12678): #20     SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:5445:14)
E/flutter (12678): #21     Element.inflateWidget (package:flutter/src/widgets/framework.dart:3194:14)
E/flutter (12678): #22     Element.updateChild (package:flutter/src/widgets/framework.dart:2988:12)
E/flutter (12678): #23     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4243:16)
E/flutter (12678): #24     Element.rebuild (package:flutter/src/widgets/framework.dart:3947:5)
E/flutter (12678): #25     ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:4206:5)
E/flutter (12678): #26     StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:4381:11)
E/flutter (12678): #27     ComponentElement.mount (package:flutter/src/widgets/framework.dart:4201:5)
E/flutter (12678): #28     Element.inflateWidget (package:flutter/src/widgets/framework.dart:3194:14)
E/flutter (12678): #29     Element.updateChild (package:flutter/src/widgets/framework.dart:2988:12)
E/flutter (12678): #30     SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:5445:14)
E/flutter (12678): #31     Element.inflateWidget (package:flutter/src/widgets/framework.dart:3194:14)
E/flutter (12678): #32     Element.updateChild (package:flutter/src/widgets/framework.dart:2988:12)
E/flutter (12678): #33     SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:5445:14)
E/flutter (12678): #34     Element.inflateWidget (package:flutter/src/widgets/framework.dart:3194:14)
E/flutter (12678): #35     Element.updateChild (package:flutter/src/widgets/framework.dart:2988:12)
E/flutter (12678): #36     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4243:16)
E/flutter (12678): #37     Element.rebuild (package:flutter/src/widgets/framework.dart:3947:5)
E/flutter (12678): #38     ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:4206:5)
E/flutter (12678): #39     StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:4381:11)
E/flutter (12678): #40     ComponentElement.mount (package:flutter/src/widgets/framework.dart:4201:5)
E/flutter (12678): #41     Element.inflateWidget (package:flutter/src/widgets/framework.dart:3194:14)
E/flutter (12678): #42     Element.updateChild (package:flutter/src/widgets/framework.dart:2988:12)
E/flutter (12678): #43     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4243:16)
E/flutter (12678): #44     Element.rebuild (package:flutter/src/widgets/framework.dart:3947:5)
E/flutter (12678): #45     ComponentElement._firs

1 Ответ

0 голосов
/ 04 марта 2020

My Json Данные: {"id": 1, "estabelecimento": "La go Sul", "produto": {"id": 2, "nome": "Файл com panache de legumes" , "descricao": "Vagem, chuchu, cenoura e batata", "preco": 59.99}}

...