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.
5 Réponses :
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.
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;
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; } } }
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
.
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.
Une idée serait d'utiliser num
au lieu de int
ou double
dans ce cas.