0

I'm trying to write json data from a third-party site on a flater, but I've already tried different options. I get the same problem on the last step. Please help me very much.

i have this model

class SkinModel {
  String src;
  String name;
  double minprice;
  int count;
  double avgprice;
  double medianprice;
  int popularity;

  SkinModel(
      {required this.src,
      required this.name,
      required this.minprice,
      required this.count,
      required this.avgprice,
      required this.medianprice,
      required this.popularity});

  factory SkinModel.fromJson(Map<String, dynamic> json) {
    return SkinModel(
      src: json['src'],
      name: json['name'],
      minprice: json['minprice'],
      count: json['count'],
      avgprice: json['avgprice'],
      medianprice: json['medianprice'],
      popularity: json['popularity'],
    );
  }
}

and such a class for receiving and processing data

import 'dart:convert';

import 'package:flutter_application_1/data_skins.dart';
import 'package:flutter_application_1/model/model_skin.dart';
import 'package:http/http.dart' as http;

class Skins {
  Future<dynamic>? getSkinsPopular(String game, String? method) async {
    late List<SkinModel> skinListModel = [];
    if (method == null) {
      skinListModel = skinssamplelist;
    }

    String url = 'https://market.dota2.net/api/v2/prices/USD.json';
    print('Step 1 ' + url);

    http.Response response = await http.get(
      Uri.parse(url),
    );
    print('Step 2 ' + response.reasonPhrase!);
    if (response.statusCode == 200) {
      var decodeData = json.decode(response.body);
      var rest = decodeData['items'] as List;
      print('Step 3');
      print(rest);
      skinListModel =
          rest.map<SkinModel>((json) => SkinModel.fromJson(json)).toList();
      print('Step 4');
      print(skinListModel);

    } else {
      throw 'Problem with get request';
    }

    return skinListModel;
  }
}
}

But the last successful step 3 and after the debugger writes flutter: Sorry try again I absolutely do not understand what the error is and what I did wrong

2
  • you are using wrong api. Commented Nov 4, 2022 at 10:09
  • replance this line skinListModel = rest.map<SkinModel>((json) => SkinModel.fromJson(json)).toList(); to for (var element in rest) {skinListModel.add(SkinModel.fromJson(element)); } Commented Nov 4, 2022 at 10:17

2 Answers 2

2
 late List<SkinModel> skinListModel = [];
  String url = 'https://market.dota2.net/api/v2/prices/USD.json';
  print('Step 1 ' + url);

  http.Response response = await http.get(
    Uri.parse(url),
  );
  print('Step 2 ' + response.reasonPhrase!);
  if (response.statusCode == 200) {
    var decodeData = jsonDecode(response.body);
    var rest = decodeData['items'] as List;
    print('Step 3');
    print(rest);
    for (var element in rest) {skinListModel.add(SkinModel.fromJson(element)); } //replace this line
    print('Step 4');
    print(skinListModel);

  } else {
    throw 'Problem with get request';
  }
Sign up to request clarification or add additional context in comments.

Comments

0

You are trying to send a request to https://market.dota2.net/api/v2/prices/USD.json and it returns items array of object. Object has fields:

market_hash_name: String,
volume: String,
price: String,

In your code you are trying to parse the json, but your SkinModel has these fields:

String src;
String name;
double minprice;
int count;
double avgprice;
double medianprice;
int popularity;

While converting json to your SkinModel, you try to get values from fields that don't exist. The error occurs in this line.

src: json['src'], // You try to get src but it does not exist

Flutter says that you cannot transform null to String.

_TypeError (type 'Null' is not a subtype of type 'String')

In order to fix error, use another api url. Or change your model to this:

class SkinModel {
  final String market_hash_name;
  final String volume;
  final String price;
}

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.