6
votes

le type 'int' n'est pas un sous-type de type 'double'

J'ai ce problème sur mon application Flutter. Il semble qu'il n'a pas réussi à charger une demande d'API, mais lorsque j'essaye sur le navigateur, il renvoie bien " http://vplay.id/api/series/popular ".

Déboguer

static double checkDouble(dynamic value) {
    if (value is String) {
      return double.parse(value);
    } else {
      return value;
    }
  }
}

Series_provider.dart

import 'dart:async';
import 'dart:convert';

import 'package:http/http.dart' as http;
import '../helpers/api.dart';
import '../models/serie_model.dart';
export '../models/serie_model.dart';

class SeriesProvider {
  String _url = Api.url;
  bool _loading = false;
  int _currentPage = 1;
  int _pages = 1;
  List<Serie> _series = List();
  final _seriesStream = StreamController<List<Serie>>();

  Function(List<Serie>) get seriesSink => _seriesStream.sink.add;
  Stream<List<Serie>> get seriesStream => _seriesStream.stream;

  void dispose() {
    _seriesStream?.close();
  }

  Future<List<Serie>> _process(String endpoint) async {
    try {
      final resp = await http.get(_url + endpoint);

      if (resp.statusCode != 200) {
        throw Exception('Failed to load');
      }

      final data = json.decode(resp.body);

      final series = Series.fromJsonList(data);

      return series.items;
    } catch (e) {
      throw Exception('Failed to load');
    }
  }

Helpers / parse.dart

exception = {_Exception} Exception: Failed to load
message = "Failed to load"
this = {SeriesProvider} 
 _url = "http://vplay.id/api/"
 _loading = false
 _currentPage = 1
 _pages = 1
 _series = {_GrowableList} size = 0
 _seriesStream = {_AsyncStreamController} 
endpoint = "series/popular"
e = {_TypeError} type 'int' is not a subtype of type 'double'
 _stackTrace = {_StackTrace} 
 _failedAssertion = "is assignable"
 _url = "package:streamapp/src//helpers/parse.dart"
 _line = 31
 _column = 7
 message = "type 'int' is not a subtype of type 'double'"

C'est ma première fois avec le flutter, et c'est intéressant car je suis seul face à ce problème (c'est une application que je reçois du marché codecanyon) avec une nouvelle installation.


0 commentaires

5 Réponses :


3
votes
static double checkDouble(dynamic value) {
    if (value is String) {
      return double.parse(value);
    } else {
      return value;
    }
  }
}
The problem seems from the last return value. You may need return value+.0.

0 commentaires

0
votes

Dans mon cas, cette erreur était due au fait que je devais représenter mon nombre sous la forme d'une valeur double et non d'une valeur int.

Exemple:

Remplacez 0 par 0,0.

double rating = rating??0.0;

à:

double rating = rating??0;


0 commentaires

5
votes

Il vous suffit d'ajouter la fonction .toDouble () à la dernière valeur renvoyée.

static double checkDouble(dynamic value) {
    if (value is String) {
      return double.parse(value);
    } else {
      return value.toDouble;
    }
  }
}


0 commentaires

7
votes

J'ai eu un problème similaire pour obtenir des données météorologiques.

J'ai résolu en déclarant la variable comme un type dynamic au lieu de type int .


1 commentaires

S'il vous plaît, n'utilisez JAMAIS cette solution. dynamic jette votre sécurité de type par la fenêtre. La réponse de paulo conde ( stackoverflow.com/a/62927320/9695154 ) est parfaite. Si vous consommez un JSON que vous devez marshall pour doubler, il suffit de .toDouble à la fin.



0
votes

Une idée serait d'utiliser num au lieu de int ou double dans ce cas.


0 commentaires