0
votes

Exception non confondue: type '_internallinkedhashmap ' n'est pas un sous-type de type 'List ' dans Type Cast?

Voici la réponse

  Future <List<Movies>> fetchMovies () async {
    var response = await http.get(url);
    var jsonData = jsonDecode(response.body) as List ;
    List<Movies> movies = jsonData.map((e) => Movies.fromJson(e)).toList();
    
    print(movies.length);
    return movies;

  }


1 commentaires

Pouvez-vous s'il vous plaît joindre l'exemple de réponse JSON de http.get? De plus, la réponse sera une paire de valeurs essentielles afin que celui-ci soit directement sur la liste consiste à créer un problème ci-dessus.


3 Réponses :


1
votes

Vous avez essayé de lancer Jsondata comme liste, mais le décodeur dit qu'il est de type carte (votre réponse affiche également sa carte de type)

Future <List<Movies>> fetchMovies () async {
  var response = await http.get(url);
  var jsonData = jsonDecode(response.body);
  if(jsonData is List) //check if it's a List
    return List<Movies>.from(jsonData.map(map) => Movies.fromJson(map));
  else if(jsonData is Map) //check if it's a Map
    return [Movies.fromJson(jsonData)]; //return a List of length 1

}


2 commentaires

Il montre des données mais comme vous avez indiqué que la longueur est 1, comment puis-je afficher toutes les données?


Comme dit, si c'est une longueur 1, cela signifie qu'il n'y a qu'une seule carte dans votre réponse JSON, à moins que des objets plus profonds à l'intérieur de cette carte ne sont pas clairs pour savoir comment faire plus d'objets de films, dans votre exemple, votre JSON ne semble en avoir un, faire Vous avez un exemple complet ou un URI d'en voir un?



0
votes

Vous pouvez copier Coller Run Code complet ci-dessous
Vous pouvez utiliser filmsFromjson code> et afficher avec fuleBuilder code>
Code snippet xxx pré>

Démo de travail P>

Entrez la description de l'image ici p>

Code complet P>

import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;
import 'dart:convert';

List<Movies> moviesFromJson(String str) =>
    List<Movies>.from(json.decode(str).map((x) => Movies.fromJson(x)));

String moviesToJson(List<Movies> data) =>
    json.encode(List<dynamic>.from(data.map((x) => x.toJson())));

class Movies {
  Movies({
    this.overview,
    this.title,
  });

  String overview;
  String title;

  factory Movies.fromJson(Map<String, dynamic> json) => Movies(
        overview: json["overview"],
        title: json["title"],
      );

  Map<String, dynamic> toJson() => {
        "overview": overview,
        "title": title,
      };
}

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
        visualDensity: VisualDensity.adaptivePlatformDensity,
      ),
      home: MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key key, this.title}) : super(key: key);

  final String title;

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  int _counter = 0;
  Future<List<Movies>> _future;

  Future<List<Movies>> fetchMovies() async {
    String jsonString = '''
    [{
"overview" : "with underground \\"fight clubs\\" forming in every town, until an eccentric gets in the way and ignites an out-of-control spiral toward oblivion",
"title" : "Fight Club"
},
{
"overview" : "test overview",
"title" : "test title"
}
]
    ''';

    var response = http.Response(jsonString, 200);

    if (response.statusCode == 200) {
      return moviesFromJson(jsonString);
    } else {
      print(response.statusCode);
    }
  }

  @override
  void initState() {
    _future = fetchMovies();
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(
          title: Text(widget.title),
        ),
        body: FutureBuilder(
            future: _future,
            builder: (context, AsyncSnapshot<List<Movies>> snapshot) {
              switch (snapshot.connectionState) {
                case ConnectionState.none:
                  return Text('none');
                case ConnectionState.waiting:
                  return Center(child: CircularProgressIndicator());
                case ConnectionState.active:
                  return Text('');
                case ConnectionState.done:
                  if (snapshot.hasError) {
                    return Text(
                      '${snapshot.error}',
                      style: TextStyle(color: Colors.red),
                    );
                  } else {
                    return ListView.builder(
                        itemCount: snapshot.data.length,
                        itemBuilder: (context, index) {
                          return Card(
                              elevation: 6.0,
                              child: Padding(
                                padding: const EdgeInsets.only(
                                    top: 6.0,
                                    bottom: 6.0,
                                    left: 8.0,
                                    right: 8.0),
                                child: Row(
                                  crossAxisAlignment: CrossAxisAlignment.start,
                                  children: <Widget>[
                                    Text(snapshot.data[index].title),
                                    Spacer(),
                                    Expanded(
                                      child: Text(
                                        snapshot.data[index].overview,
                                      ),
                                    ),
                                  ],
                                ),
                              ));
                        });
                  }
              }
            }));
  }
}


0 commentaires

0
votes

Découvrez simplement il répondez

import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:json_parsing_example/models.dart';

// To parse this JSON data, do
//
//     final user = userFromJson(jsonString);

void main() => runApp(new MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return new MaterialApp(
      title: 'Flutter Demo',
      theme: new ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: new MyHomePage(title: 'Users'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key key, this.title}) : super(key: key);

  final String title;

  @override
  _MyHomePageState createState() => new _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  bool _isLoading = false;
  List<Movies> dataList = List();
  Future<String> loadFromAssets() async {
    return await rootBundle.loadString('json/parse.json');
  }

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

  getData() async {
    setState(() {
      _isLoading = true;
    });
    String jsonString = await loadFromAssets();
    final movies = moviesFromJson(jsonString);

    dataList = movies;

    setState(() {
      _isLoading = false;
    });
  }
    // In your case you just check out this code check out the model class
  /* Future <List<Movies>> fetchMovies () async {
    var response = await http.get(url);
    return moviesFromJson(response.body);

  } */

  @override
  Widget build(BuildContext context) {
    return new Scaffold(
      appBar: new AppBar(
        title: new Text(widget.title),
      ),
      body: _isLoading
          ? Center(
              child: CircularProgressIndicator(),
            )
          : Container(
              child: ListView.builder(
                  itemCount: dataList.length,
                  shrinkWrap: true,
                  itemBuilder: (context, i) {
                    return Card(
                        child: Padding(
                      padding: const EdgeInsets.all(8.0),
                      child: Text(dataList[i].overview),
                    ));
                  }),
            ),
    );
  }
}


0 commentaires