在我的flutter应用程序中遇到了这个问题。似乎无法加载API请求,但是当我在浏览器上尝试时,它返回“ http://vplay.id/api/series/popular”。
调试
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'"
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
static double checkDouble(dynamic value) {
if (value is String) {
return double.parse(value);
} else {
return value;
}
}
}
这是我第一次颤抖,这很有趣,因为只有我面对这个问题(这是我从codecanyon市场获得的一个应用程序),并且进行了全新的安装。
答案 0 :(得分:8)
我在获取天气数据时遇到类似的问题。
我通过将变量声明为dynamic
而不是int
类型来解决了这个问题。
答案 1 :(得分:6)
您只需要将.toDouble()函数添加到最后返回的值。
static double checkDouble(dynamic value) {
if (value is String) {
return double.parse(value);
} else {
return value.toDouble;
}
}
}
答案 2 :(得分:2)
在这种情况下,一种想法是使用num
代替int
或double
。
答案 3 :(得分:0)
static double checkDouble(dynamic value) {
if (value is String) {
return double.parse(value);
} else {
return value;
}
}
}
从上一个return value
开始出现问题。您可能需要return value+.0
。
答案 4 :(得分:0)
在我的情况下,此错误是因为我必须将我的数字表示为双精度值,而不是整数值。
示例:
将0更改为0.0。
double rating = rating??0;
收件人:
double rating = rating??0.0;